2015-04-23 5 views
1

Недавно мы сделали переезд и переименовали базу данных конфигурации AppFabric.Перемещение и переименование базы данных конфигурации AppFabric

Переименование был от имени по умолчанию «AppFabricConfigurationDatabase» в «AppFabricPreOrdersConfiguration»

DistirbutedCacheService.exe.config был изменен с новой базой данных и сервером именем

<clusterConfig provider="System.Data.SqlClient" connectionString="Data Source=NEWSERVER;Initial Catalog=AppFabricPreOrdersConfiguration;Integrated Security=True" /> 

и сервисом начинает успешно.

Но с этой точки на «кеширование администрирования powershell» больше не запускается, потому что, когда используется имя-cachecluster, он все еще пытается подключиться к старому серверу/базе данных.

Не удалось установить тестовое соединение для источника данных ConnectionString = OLDSERVER; Начальный каталог = AppFabricCacheConfigurationDatabase;

Use-CacheCluster: ErrorCode: SubStatus: недопустимый провайдер и c прочитанная строка onnection.

Где эти приборы читают эти значения? Видимо, не из конфигурационного файла службы, а где же?

+0

Попробуйте использовать программу 'procmon'. –

+0

ничего не получилось. Я начинаю думать, что это твердое значение где-то – Laurijssen

+0

Вы перезапустили AppFabricCachingService на каждом хосте? – SomeShinyObject

ответ

1

Вам нужно позвонить Remove-CacheAdmin и затем Add-CacheAdmin изменить подключение кэш-администратора на каждом хосте администратора

This Microsoft Powershell script - (.EXE скачать, сценарий воспроизводится ниже) - изменяет строку соединения на всех узлах в кластере.

param ([string] $provider, [string] $newConnectionString) 

function Main { 

    if ((! $provider) -or (! $newConnectionString)) 
    { 
     Write-Host "Usage: ChangeConnString.ps1 <provider> <newConnectionString>" 
     exit(1) 
    } 

    Import-Module "DistributedCacheAdministration" 
    Import-Module "DistributedCacheConfiguration" 

    Use-CacheCluster 

    Write-Host "Stop the cache cluster if it is running" 
    $clusterRunnig=$true 
    &{ 
     Stop-CacheCluster -EA Stop 
    } 
    trap [DataCacheException] { 
     #'Error Category {0}, Error Type {1}, ID: {2}, Message: {3} {4}' -f $_.CategoryInfo.Category, $_.Exception.GetType().FullName, $_.FullyQualifiedErrorID, $_.Exception.Message, $_.Exception.ErrorCode; 
     #12008: ErrorCode<ERRCAdmin008>:SubStatus<ES0001>:No hosts running in cluster 
     if ($_.Exception.ErrorCode -eq 12008) 
     { 
      write-host "Cluster is not running" 
      $clusterRunnig=$false 
      continue 
     } 
    } 

    [Reflection.Assembly]::LoadWithPartialName('Microsoft.ApplicationServer.Caching.Management') | Out-Null 
    [Reflection.Assembly]::LoadWithPartialName('System.Management.Automation') | Out-Null 
    [Reflection.Assembly]::LoadWithPartialName('System.Management.Automation.Runspaces') | Out-Null 

    SetCacheConnectionString $provider $newConnectionString 

    Write-Host "Connection string is altered on all the cache hosts. Now changing the connection string for cache admin" 
    Remove-CacheAdmin 
    Add-CacheAdmin -Provider $provider -ConnectionString $newConnectionString 

    if ($clusterRunnig -eq $true) 
    { 
     Write-Host "Starting the cache cluster..." 
     Start-CacheCluster 
    } 
} 

function SetCacheConnectionString { 

    param ([string] $provider, [string] $newConnectionString) 

    Write-Host "Parameters: " $provider " " $newConnectionString 
    $powerShell = [System.Management.Automation.PowerShell]::Create() 
    # Import the admin cmdlets module 
    $powerShell.AddCommand("Import-Module", $true); 
    $powerShell.AddParameter("Name", "DistributedCacheAdministration") 

    # Call the Invoke method to run the commands 
    $powerShell.Invoke(); 

    $powerShell.Commands.AddCommand("Use-CacheCluster") 
    $powerShell.Commands.AddCommand("Get-CacheHost") 
    $commandResults = $powerShell.Invoke() 
    $powerShell.Dispose() 

    Write-Host "Number of hosts in the cluster " $commandResults.Count 
    foreach ($cacheHost in $commandResults) 
    { 
     Write-Host "Configuring the host " $cacheHost.HostName 

     Invoke-Command -ComputerName $cacheHost.HostName -ScriptBlock {param ($provider, $newConnectionString) Import-Module DistributedCacheConfiguration;Remove-CacheHost;Add-CacheHost -Provider $provider -ConnectionString $newConnectionString -Account 'NT Authority\NETWORK SERVICE'} -ArgumentList $provider, $newConnectionString 
    } 
} 

# 
# Entry 
# 
Main 
+0

wow хороший ответ! Я попробую это, когда хосты могут быть остановлены :) – Laurijssen

2

Поскольку я не могу остановить кластер я попытался увидеть, если строка подключения будет изменена без перезагрузки и в основном просто звоню Remove-CacheAdmin и Add-CacheAdmin .... это сработало! Конечно сценарий должен быть запущен на каждом хосте, так не хорошо для крупных установок, но перезагрузка не требуется, видимо, действительно

param ([string] $provider, [string] $newConnectionString) 

function Main { 

    if ((! $provider) -or (! $newConnectionString)) 
    { 
     Write-Host "Usage: ChangeConnString.ps1 <provider> <newConnectionString>" 
     exit(1) 
    } 

    Import-Module "DistributedCacheAdministration" 
    Import-Module "DistributedCacheConfiguration" 
    [Reflection.Assembly]::LoadWithPartialName('Microsoft.ApplicationServer.Caching.Management') | Out-Null 
    [Reflection.Assembly]::LoadWithPartialName('System.Management.Automation') | Out-Null 
    [Reflection.Assembly]::LoadWithPartialName('System.Management.Automation.Runspaces') | Out-Null 

    Remove-CacheAdmin 
    Add-CacheAdmin -Provider $provider -ConnectionString $newConnectionString 

} 
1

Сценарии, предоставляемые другими пользователями, не работает для меня. Я столкнулся с исключениями. Я смог обойти эту проблему, отредактировав реестр на каждом хосте и перезапустив службу.

Строка соединения хранится здесь: HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ AppFabric \ V1.0 \ Конфигурация

Значение называется "ConnectionString"

Под пользователем улья, есть еще один пример соединения строка. Я не знаю, нужно ли менять это или нет, но я это сделал. HKEY_CURRENT_USER \ Software \ Microsoft \ AppFabric \ V1.0 \ Temp

Это сработало для меня. Не забудьте также отредактировать ClusterConfig ConnectionString в DistributedCacheService.exe.config в папке C: \ Program Files \ AppFabric 1.1 для Windows Server