移动和重命名 AppFabric 配置数据库



最近,我们对AppFabric配置数据库进行了移动和重命名。

重命名是从默认名称"AppFabricConfigurationDatabase"到"AppFabricPreOrdersConfiguration"

DistirbutedCacheService.exe.config 已更改为新的数据库和服务器名称

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

并且服务成功启动。

但是从这一点开始,"缓存管理powershell"不再启动,因为当调用use-cachecluster时,它仍然尝试连接到旧的服务器/数据库。

连接字符串数据源 = OLD服务器;初始目录的测试连接失败=AppFabricCacheConfigurationDatabase;

使用缓存群集:错误代码:子状态:无效的提供程序和 c连接字符串读取。

Powershell从哪里读取这些值?显然不是来自服务的配置文件,而是在哪里?

由于我无法停止集群,因此我尝试在不重新启动的情况下查看连接字符串是否会更改,基本上只是调用 删除缓存管理员 和 添加缓存管理员....成功了!当然,脚本必须在每台主机上运行,因此不适合大型设置,但显然不需要重新启动

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  
}

其他用户提供的脚本对我不起作用。 我遇到了例外。 我能够通过编辑每个主机上的注册表并重新启动服务来解决此问题。

连接字符串存储在此处:HKEY_LOCAL_MACHINE\软件\Microsoft\AppFabric\V1.0\配置

该值名为"连接字符串"

在用户配置单元下,有另一个连接字符串实例。 我不知道你是否需要改变这一点,但我做到了。 HKEY_CURRENT_USER\软件\Microsoft\AppFabric\V1.0\Temp

这对我有用。 不要忘记,您还需要在 C:\Program Files\AppFabric 1.1 for Windows Server 下的 DistributedCacheService.exe.config 中编辑 ClusterConfig ConnectionString

您需要

调用Remove-CacheAdmin,然后Add-CacheAdmin更改每个管理主机上的缓存管理连接

此Microsoft Powershell 脚本 - (.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 AuthorityNETWORK SERVICE'} -ArgumentList $provider, $newConnectionString
    }
}
#
# Entry
#
Main

最新更新