2015-04-23 50 views
1

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

重命名来自

DistirbutedCacheService.exe.config与新的数据库和服务器名称

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

和服务改变了默认名称“AppFabricConfigurationDatabase”到“AppFabricPreOrdersConfiguration”成功地启动。

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

测试连接失败ConnectionString数据源= OLDSERVER;初始目录 = AppFabricCacheConfigurationDatabase;

Use-CacheCluster:ErrorCode:SubStatus:无效的提供程序和读取的连接字符串。

powershell从哪里读取这些值?显然不是从服务的配置文件,但在那里呢?

+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

很好回答!我会尝试当主机可以停止:) – Laurijssen

2

既然不能停止集群,我想看看如果连接字符串将无需重新启动被改变,基本上只是调用remove-CacheAdmin和附加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 \微软\的AppFabric \ V1.0 \配置

值命名为 “的ConnectionString”

根据用户蜂巢,有连接的另一个实例串。我不知道你是否需要改变这个,但我做到了。 HKEY_CURRENT_USER \ Software \ Microsoft \ AppFabric \ V1.0 \ Temp

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