高度な概念

SQL Server 高可用性ソリューションを使用するときにデータベース接続文字列を更新する

Citrix では、常にオンやミラーリングなどのSQL Serverの高可用性データベースソリューションを使用している場合に、XenApp およびXenDesktopデータベース接続文字列を更新するPowerShell スクリプトがいくつか用意されています。

これらのスクリプトは、XenAppおよびXenDesktop ktopのPowerShell のAPIを使用するものです。

  • DB接続文字列関数.ps1: 実際の作業を行うコアスクリプト。このスクリプトには、他のスクリプトが使用する共通関数が含まれています。
  • Change_XD_Failover_Partner_v1.ps1: フェイルオーバーパートナーを更新 (追加、変更、削除) します。このスクリプトは、各データベースのフェイルオーバーパートナーの場所 (FQDN) を要求します。(空のフェイルオーバーパートナーを指定すると、フェイルオーバーパートナーは削除されます。また、ClearPartner オプションを使用してパートナーを削除することもできます)。 フェイルオーバーパートナーは、プリンシパルデータベースサーバーと同じ場所に設定しないでください。
  • Change_XD_To_ConnectionString.ps1: 指定された接続文字列を使用して、データベースへの接続文字列を更新します。このスクリプトにより、特定のCitrix サービスが稼働していることを確認し、サイト内のすべてのControllerでこれらのサービスを正しい順序で更新します。各データベースの接続文字列情報を引用符で囲みます。
  • Change_XD_To_MultiSubnetFailover.ps1: マルチサブネットフェイルオーバー=trueの追加と削除を切り替えます。常に可用性グループを使用する場合は、接続文字列に MultiSubnetFailover=True を含めることをお勧めします。このオプションは、高可用性イベントが発生したときのリカバリを高速化します。単一サブネット環境と複数サブネット環境の両方に推奨されます。このスクリプトを 1 回実行して、オプションを追加します。オプションを削除する必要がある場合は、 Change_XD_To_ConnectionString.ps1 を使用してスクリプトを再度実行し、設定なしで文字列を指定します。
  • Change_XD_To_Null.ps1:何かが間違っているため、localhost上のすべての接続文字列をリセットします。接続文字列を null にリセットすることにより、このスクリプトはコントローラを「初期」状態にします。このスクリプトを実行した後にStudioを実行すると、サイトを作成するか、既存のサイトに参加するかを尋ねられます。これは、何かが間違ってリセットが必要な場合に便利です。リセット後、Change_XD_To_ConnectionString.ps1 を使用して接続文字列の設定を再試行できます。

データベース接続文字列を手動で更新することもできます。「文字列を手動で更新する」を参照してください。PowerShell スクリプトをダウンロードするには、「手順」を参照してください。

要件および考慮事項

  • スクリプトを実行するには、完全なサイト管理者である必要があります。
  • 1 つのコントローラの PowerShell ウィンドウでスクリプトを実行します。PowerShell のv3が必要です。
  • XenAppおよびXenDesktop のコアコンポーネントをインストールし、サイトを起動して実行する必要があります。
  • スクリプトを実行する前に、必須の構成ログを無効にします。
  • マルチサブネットフェイルオーバーオプションは、.NET 4.5 以降でサポートされています。ただし、StudioがWindows 7または2008 R2マシンで使用しているMMCには以前の.NETバージョンが含まれているため、 Studio のナビゲーションペインで [構成] を選択すると、「キーワードがサポートされていません: multisubnetfailover」というエラーが表示されることがあります。そのような場合は、次のようにパッチを適用または更新します。

  • .NET 3.5 SP1 の場合は、http://support.microsoft.com/kb/2654347を使用してパッチを適用します。
  • .NET 4.0 の場合は、最低限 4.0.2 に更新することをお勧めします:http://support.microsoft.com/kb/2600211

次に、 Change_XD_To_MultiSubnetFailover.ps1 スクリプトを使用して、このオプションを使用してデータベース接続文字列を更新します。

手順

  1. Citrix ShareFileからスクリプトを含むzipファイルをダウンロードします。
  2. ファイルを解凍します。
  3. DB接続文字列関数.ps1 内の関数を使用するため、実行するスクリプトと同じフォルダーに DBConnectionStringFuncs.ps1 があることを確認してください。
  4. コントローラ上でスクリプトを実行します。

サイトをマルチサブネットフェイルオーバーに設定する場合は、Change_XD_To_MultiSubnetFailover.ps1 スクリプトを実行するだけで済みます。(注意:DBConnectionStringFuncs.ps1 スクリプトが同じフォルダーにあることを確認してください)。

ヒント:

  • 接続文字列が更新されると、「Server=SQLxxx\\CITRIX\\...」が「Data Source=SQLxxx\\CITRIX\\...」に変更されたことを示すメッセージが表示されるのが普通です。「サーバー」と「データソース」という用語は同義語です。
  • 接続文字列を操作する場合は、Change\_XD\_スクリプトでDBConnectionStringFuncs.ps1の関数がどのように使用されるかを調べます。

文字列を手動で更新する

文字列を手動で更新するには、XenAppコマンドレットおよびXenDesktop PowerShell コマンドレットを実行します。

手順1. SQL データベースを別の SQL サーバーに移動し、適切なアクセス許可を割り当てる

  1. 元の SQL サーバ上のデータベースをバックアップし、新しい SQL サーバーにリストアします。
  2. [SQL Management Studio] > [セキュリティ] > [ログイン]で、Delivery Controller コンピュータアカウントを追加します。たとえば、次のように入力します。
  3. SQLログインを追加するときは、[ユーザーマッピング]ページで、[サイトデータベース]、[監視データベース]、[ログデータベース]の3つのCitrixデータベースをクリックします。
  4. 3つのCitrix データベースごとに、Delivery Controller コンピュータアカウントをさまざまなデータベースの役割に追加します。サイトデータベースには、ログデータベースと監視データベースよりも多くの役割があります。
Site database - ADIdentitySchema_ROLE

Site database - Analytics_ROLE                # for 7.8 and newer
Site database - AppLibrarySchema_ROLE         # for 7.8 and newer
Site database - chr_Broker
Site database - chr_Controller
Site database - ConfigLoggingSiteSchema_ROLE
Site database - ConfigurationSchema_ROLE
Site database - DAS_ROLE
Site database - DesktopUpdateManagerSchema_ROLE
Site database - EnvTestServiceSchema_ROLE
Site database - HostingUnitServiceSchema_ROLE
Site database - Monitor_ROLE
Site database - OrchestrationSchema_ROLE       # for 7.11 and newer
Site database - public
Site database - StorefrontSchema_ROLE          # for 7.8 and newer
Site database - TrustSchema_ROLE               # for 7.11 and newer
Monitoring database - Monitor_ROLE
Monitoring database - public
Logging database - ConfigLoggingSchema_ROLE
Logging database - public

手順2. 既存のデータベース接続を取得する (オプション)

次のコマンドを実行して、既存のデータベース接続文字列を確認します。

## Load the Citrix snap-ins
asnp Citrix.*

## Get the current Delivery Controller database connections
Get-ConfigDBConnection
Get-AcctDBConnection
Get-AnalyticsDBConnection              #  for 7.6 and newer
Get-AppLibDBConnection                 #  for 7.8 and newer
Get-OrchDBConnection                   #  for 7.11 and newer
Get-TrustDBConnection                  #  for 7.11 and newer
Get-HypDBConnection
Get-ProvDBConnection
Get-BrokerDBConnection
Get-EnvTestDBConnection
Get-SfDBConnection
Get-MonitorDBConnection
Get-MonitorDBConnection -DataStore Monitor
Get-LogDBConnection
Get-LogDBConnection -DataStore Logging
Get-AdminDBConnection

手順3. 既存のデータベース接続の削除

Delivery Controllerで、管理者としてPowerShell を開き、次のコマンドを実行します。このプロセスは、既存のデータベース接続を消去します。

## Note the state of the log site
Get-LogSite

## Load the Citrix snap-ins
asnp Citrix.*

## Disable configuration logging for the XD site:
Set-LogSite -State Disabled

## Clear the current Delivery Controller database connections

## Note: AdminDBConnection must be the last command

Set-ConfigDBConnection -DBConnection $null -Force
Set-AcctDBConnection -DBConnection $null -Force
Set-AnalyticsDBConnection -DBConnection $null -Force             #  for 7.6 and newer
Set-AppLibDBConnection -DBConnection $null -Force                #  for 7.8 and newer
Set-OrchDBConnection -DBConnection $null -Force                  #  for 7.11 and newer
Set-TrustDBConnection -DBConnection $null -Force                 #  for 7.11 and newer
Set-HypDBConnection -DBConnection $null -Force
Set-ProvDBConnection -DBConnection $null -Force
Set-BrokerDBConnection -DBConnection $null
Set-EnvTestDBConnection -DBConnection $null -Force
Set-SfDBConnection -DBConnection $null -Force
Set-MonitorDBConnection -DataStore Monitor -DBConnection $null -Force
Set-MonitorDBConnection -DBConnection $null -Force
Set-LogDBConnection -DataStore Logging -DBConnection $null -Force
Set-LogDBConnection -DBConnection $null -Force
Set-AdminDBConnection -DBConnection $null -Force

エラーメッセージが表示された場合は、すべてのCitrix サービスを再起動する必要があります。

Get-Service Citrix* | Stop-Service -Force
Get-Service Citrix* | Start-Service

Citrix サービスを再起動した後、引き続きエラーが表示される場合は、サーバーを再起動する必要があります。元のコマンドセットを再実行して、既存の接続が正しく削除されていることを確認します。

次のコマンドレットは、空の出力を返す必要があります。

## Load the Citrix snap-ins
asnp Citrix.*

## Get the current Delivery Controller database connections
Get-ConfigDBConnection
Get-AcctDBConnection
Get-AnalyticsDBConnection              #  for 7.6 and newer
Get-AppLibDBConnection                 #  for 7.8 and newer
Get-OrchDBConnection                   #  for 7.11 and newer
Get-TrustDBConnection                  #  for 7.11 and newer
Get-HypDBConnection
Get-ProvDBConnection
Get-BrokerDBConnection
Get-EnvTestDBConnection
Get-SfDBConnection
Get-MonitorDBConnection
Get-LogDBConnection
Get-AdminDBConnection

手順4. 新しいデータベース接続文字列の指定

目的の接続文字列に合わせて変数を調整します。

  • スタンドアロンのSQL Server接続文字列の場合:Server=SQLServerName; Initial Catalog=DBName; Integrated Security=True
  • データベースのミラーリング接続文字列の場合:Server=PrimarySQLServerName; Initial Catalog=DBName; Integrated Security=True; Failover Partner=SecondSQLServer
  • Always On機能による高可用性の場合:Server=ListenerName; Initial Catalog=XDdb; Integrated Security=True; MultiSubnetFailover=True

次のコマンドを実行して、新しい接続文字列を設定します。

$ServerName = "<dbserver>"
$SiteDBName = "<SiteDbName>"
$LogDBName = "<LoggingDbName>"
$MonitorDBName = "<MonitorDbName>"
$csSite = "Server=$ServerName;Initial Catalog=$SiteDBName;Integrated Security=True"
$csLogging = "Server=$ServerName;Initial Catalog=$LogDBName;Integrated Security=True"
$csMonitoring = "Server=$ServerName;Initial Catalog=$MonitorDBName;Integrated Security=True"

Set-AdminDBConnection -DBConnection $csSite
Set-ConfigDBConnection -DBConnection $csSite
Set-AcctDBConnection -DBConnection $csSite
Set-AnalyticsDBConnection -DBConnection $csSite              # for 7.6 and newer
Set-HypDBConnection -DBConnection $csSite
Set-ProvDBConnection -DBConnection $csSite
Set-AppLibDBConnection –DBConnection $csSite                 # for 7.8 and newer
Set-OrchDBConnection –DBConnection $csSite                   # for 7.11 and newer
Set-TrustDBConnection –DBConnection $csSite                  # for 7.11 and newer
Set-BrokerDBConnection -DBConnection $csSite
Set-EnvTestDBConnection -DBConnection $csSite
Set-SfDBConnection -DBConnection $csSite
Set-LogDBConnection -DBConnection $csSite
Set-LogDBConnection -DataStore Logging $null -force
Set-LogDBConnection -DataStore Logging -DBConnection $csLogging
Set-MonitorDBConnection -DBConnection $csSite
Set-MonitorDBConnection -DataStore Monitor -DBConnection $null -force
Set-MonitorDBConnection -DataStore Monitor -DBConnection $csMonitoring

## If necessary, enable configuration logging for the XD site:
Set-LogSite -State Enabled

注:

上記のすべてのSet-<service>DBConnectionコマンドが [OK] の結果を返したことを確認します。これらのコマンドの結果が [OK] 以外の場合は、ロギングまたはトレースを有効にして、接続エラーの原因を特定する必要があります。

Set-LogDBConnection -DBConnection $nullSet-MonitorDBConnection -DBConnection $nullOKではなくDBUnconfiguredを返します。

手順5. 新しいデータベース接続文字列のテスト

  1. 次のコマンドを実行して、データベースへの接続を確認します。

    ## Load the Citrix snap-ins
    asnp citrix.*
    
    $ServerName = "<dbserver>"
    $SiteDBName = "<SiteDbName>"
    $LogDBName = "<LoggingDbName>"
    $MonitorDBName = "<MonitorDbName>"
    $csSite = "Server=$ServerName;Initial Catalog=$SiteDBName;Integrated Security=True"
    $csLogging = "Server=$ServerName;Initial Catalog=$LogDBName;Integrated Security=True"
    $csMonitoring = "Server=$ServerName;Initial Catalog=$MonitorDBName;Integrated Security=True"
    
    Test-AcctDBConnection -DBConnection $csSite
    Test-AdminDBConnection -DBConnection $csSite
    Test-AnalyticsDBConnection -DBConnection $csSite   # for 7.6 and newer
    Test-AppLibDBConnection -DBConnection $csSite      # for 7.8 and newer
    Test-BrokerDBConnection -DBConnection $csSite
    Test-ConfigDBConnection -DBConnection $csSite
    Test-EnvTestDBConnection -DBConnection $csSite
    Test-HypDBConnection -DBConnection $csSite
    Test-LogDBConnection -DBConnection $csSite
    Test-LogDBConnection -DataStore Logging -DBConnection $csLogging
    Test-MonitorDBConnection -DBConnection $csSite
    Test-MonitorDBConnection -Datastore Monitor -DBConnection $csMonitoring
    Test-OrchDBConnection -DBConnection $csSite       # for 7.11 and newer
    Test-ProvDBConnection -DBConnection $csSite
    Test-SfDBConnection -DBConnection $csSite
    Test-TrustDBConnection -DBConnection $csSite      # for 7.11 and newer
    
  2. Citrix Studioを再起動します。

詳細情報の表示

SQL Server 高可用性ソリューションを使用するときにデータベース接続文字列を更新する