ミラーリングされた SQL データベースを使用するように XenDesktop 7 サイトを再構成する方法

ミラーリングされた SQL データベースを使用するように XenDesktop 7 サイトを再構成する方法

book

Article ID: CTX141304

calendar_today

Updated On:

Description

日本語版ご利用にあたって
【重要】本資料は原文である英語版 Knowledge Base から日本語訳されたものであり、最新の更新が反映されていない場合がございます。ご利用にあたっては、英語版の最新情報をあわせてご確認いただけますようお願いいたします。

この文書では、ミラーリングされた SQL データベースを使用するように、稼働中の既存の XenDesktop 7 サイトを変換する方法について説明します。

ミラーリングされたデータベースの使用は、サイトの高可用性が重要な場合に最適なオプションです。

サイトに必要な再構成およびその後に推奨されるデータベースフェールオーバー動作の検証について紹介します。ただしこの文書では、基礎となるデータベースをミラーリングされたデータベースとして再構成する手順について、読者が理解していることを前提としています。この情報は、https://technet.microsoft.com/ja-jp/library/bb510479.aspx などの Microsoft 社の各種の文書で解説されています。


Instructions

SQL Server の前提条件


XenDesktop 7 では、SQL Server 2012 Service Pack 1 および SQL Server 2008 R2 Service Pack 2の使用をサポートしています。

SQL Server ミラーリングを使用するには、ライセンスのある SQL Server を2つ(プリンシパルとミラー)インストールする必要があります。これらのサーバーのいずれかが XenDesktop サイトで既に使用中のものであっても構いません(使用中のものである必要はありません)。
注: SQL Server Express Edition は、プリンシパルまたはミラーのいずれの役割でも使用できません。

自動フェールオーバーサポートを使用するには、さらにもう1つ SQL Server をインストールする必要があります(ミラーリング監視サーバー)。このサーバーは SQL Server Express Edition でも構いません。

推奨されるミラーリング動作モードは、自動フェールオーバーを伴う高い安全性(同期)です。自動フェールオーバーが不要な場合は、自動フェールオーバーを伴わない高い可用性(同期)も使用できます。
 

XenDesktop の前提条件

サイト内のすべての XenDesktop サーバーを再構成する必要があるため、構成を変更する前に、すべてのサイトコントローラーを利用可能で、稼働中の状態にすることをお勧めします。

データベースの再構成中はサイトは使用できませんが、既存のユーザーセッションは影響を受けません。再構成を行えるように、サイトに対して適切なダウンタイムをスケジュールする必要があります。

すべての XenDesktop サービス SDK の使用が必要になります。すべての SDK がインストールされ、PowerShell ウィンドウで登録されている 1 台のマシン(いずれかのサイトコントローラーでも構いません)が必要です。この文書で紹介する PowerShell スクリプトを使用するには、標準の SQL Server SQLCMD ユーティリティがマシンにローカルにインストールされている必要もあります。

再構成を行うユーザーには、XenDesktop サイトに対する完全な管理者権限が必要です。また、データベースの再構成自体には、関係するすべてのデータベースサーバーに対するsysadmin 権限が必要です。
 

XenDesktop サイトの準備

まず、データベース接続をテストします。また、データベースを再構成する前に、サイト内のすべての XenDesktop サービスを現在のデータベースから切断する必要があります。これは、データベース接続文字列をクリアし、すべてのサービスを休止状態にすることにより行います。これは、次の PowerShell スクリプトを使用して実行できます。

注:Broker PowerShell SDK スナップインを使用して再構成中のサイトにアクセス済みであり、初期のデフォルト管理アドレスがそのサイト内のいずれかのコントローラーに設定されていることを前提としています。これをまだ行っていない場合は、PowerShell 内から Add-PSSnapin Citrix* を実行して、XenDesktop PowerShell SDK スナップインをロードする必要があります。
ミラーリングの構成前に使用されていたデータベースが、新しいミラーリング構成のプリンシパルとなる場合は、コントローラーログオンは新しいミラーサーバーにのみ追加する必要があります。ミラーリングされたペアの両方のデータベースサーバーが新しい場合は、両方でログオンの作成が必要です。
適切なログオンは、次に示すように、Broker PowerShell SDK および SQLCMD を使用して作成できます。ログオンを作成するデータベースサーバーの名前およびターゲットデータベースの名前を適宜置き換えます。

$PrimaryDB= 'FQDN name of the primary DB within quotes'
$mirrorDB = 'FQDN name of the mirror DB within quotes'
$dbName = 'Name of the XD database within quotes'
$controllers = Get-BrokerController | %{$_.DNSName}
foreach ($controller in $controllers) {
    Write-Host "Make login for $controller on $mirrorServer ..."
    Get-BrokerDBSchema -DatabaseName $dbName -ScriptType Login -AdminAddress $controller > add-login.sql
    sqlcmd -S $mirrorDB -Q ':r add-login.sql'
    }

# In Maintenance Window , Failover to the Mirror and run the following to test connectivity

$cs = "Data Source=$PrimaryDB; Failover Partner=$MirrorDB; Initial Catalog=$dbName; Integrated Security=True; Network=dbmssocn"

$controllers = Get-BrokerController | %{$_.DNSName}
foreach ($controller in $controllers) {
    Write-Host "Testing controller $controller ..."

Test-ConfigDBConnection -DBConnection $cs -AdminAddress $Controller
Test-AcctDBConnection -DBConnection $cs -AdminAddress $Controller
Test-HypDBConnection -DBConnection $cs -AdminAddress $Controller
Test-ProvDBConnection -DBConnection $cs -AdminAddress $Controller
Test-BrokerDBConnection -DBConnection $cs -AdminAddress $Controller
Test-EnvTestDBConnection -DBConnection $cs -AdminAddress $Controller
Test-SfDBConnection -DBConnection $cs -AdminAddress $Controller
Test-MonitorDBConnection -DBConnection $cs -AdminAddress $Controller
Test-MonitorDBConnection -DataStore Monitor -DBConnection $cs -AdminAddress $Controller
Test-AdminDBConnection -DBConnection $cs -AdminAddress $Controller
Test-LogDBConnection -DBConnection $cs -AdminAddress $Controller
Test-LogDBConnection -Datastore Logging -DBConnection $cs -AdminAddress $Controller
}


注:バージョン 7.6 では上記に加えて Test-AnalyticsDBConnection -DBConnection $cs -AdminAddress $controller を実施する必要があります。

# Now set the DB connections to null.

$controllers = Get-BrokerController | %{$_.DNSName}
foreach ($controller in $controllers) {
    Write-Host "Disconnect controller $controller ..."

Set-ConfigDBConnection -DBConnection $null -AdminAddress $Controller
Set-AcctDBConnection -DBConnection $null -AdminAddress $Controller
Set-HypDBConnection -DBConnection $null -AdminAddress $Controller
Set-ProvDBConnection -DBConnection $null -AdminAddress $Controller
Set-BrokerDBConnection -DBConnection $null -AdminAddress $Controller
Set-EnvTestDBConnection -DBConnection $null -AdminAddress $Controller
Set-SfDBConnection -DBConnection $null -AdminAddress $Controller
Set-MonitorDBConnection -Datastore Monitor -DBConnection $null -AdminAddress $Controller
reset-MonitorDataStore -DataStore Monitor
Set-MonitorDBConnection -DBConnection $null -AdminAddress $Controller
Set-LogDBConnection -DataStore Logging -DBConnection $null -AdminAddress $Controller
reset-LogDataStore -DataStore Logging
Set-LogDBConnection -DBConnection $null -AdminAddress $Controller
Set-AdminDBConnection -DBConnection $null -AdminAddress $Controller
}


注:バージョン 7.6 では上記に加えて Set-AnalyticsDBConnection -DBConnection $null -AdminAddress $controller を実施する必要があります。

注:上記のスクリプトで取得した変数 $controllers は、この後で紹介する PowerShell スクリプトに対する入力として必要になります。
理想的には、どちらのスクリプトも同じ PowerShell ウィンドウ内で実行するべきです。
ただしこれが可能ではない場合は、変数は単にサイト内のすべてのコントローラーの DNS 名を含む配列です。


また、同じサイト内に DDC が一台以上が存在する場合、以下のコマンドを一台目の DDC のみで実施してください。

  Set-MonitorDBConnection -DataStore Monitor -DBConnection $null -AdminAddress $Controller
  Set-LogDBConnection -Datastore Logging -DBConnection $null -AdminAddress $Controller
  Set-MonitorDBConnection -DataStore Monitor -DBConnection $cs -AdminAddress $Controller
  Set-LogDBConnection -Datastore Logging -DBConnection $cs -AdminAddress $Controller

 

データベースのミラーリング

サービスをデータベースから切断したら、基礎となるデータベースをミラーリングされたデータベースとして再構成できます。XenDesktop サイトに関しては、既存のデータベースが新しい構成の最初のプリンシパルデータベースになるのか、またはまったく新しいミラーリング構成が作成されるのか(まったく異なるデータベースサーバーを使用して)は重要ではありません。重要なのは、XenDesktop サイトデータベースの元の内容が、新たにミラーリングされたデータベースに存在するということです。

ミラーリング構成で、既存のデータベースを最初のプリンシパルとして直接再利用する予定である場合は、次の点に注意してください。

  • データベースが元々 Desktop Studioを使用して作成されたものである場合は、その復旧モデルは単純に設定されています。ミラーリングする前に、モデルを完全に変更する必要があります。
  • データベースが簡易展開を使用して作成された場合は、SQL Server Express Edition のローカルインストールを使用しています。サーバーのこのエディションではミラーリングはサポートされていません。この場合、データベースをバックアップしてから、Express Edition 以外の適切なエディションを実行している別の SQL Server 上に復元する必要があります。
  • デフォルト以外の固定のポートを使用するデータベースのミラーリングでは問題が発生します。デフォルトポート 1433 を使用するデータベースエンジンで、ミラーリングされたデータベースをホストすることをお勧めします。

ミラーリングされたデータベースを設定したら、続行する前に、データベースの基本的なフェールオーバー動作を検証する必要があります。これは、SQL Server Management Studio (SSMS) でデータベースのプロパティの[ミラーリング]ダイアログボックスにある [フェールオーバー] オプションを使用して行えます。

標準の動作では、2 つのデータベースが「プリンシパル、同期済み」および「ミラー、同期済み/復元中...」という状態で表示されます。データベースのプロパティの [ミラーリング] ダイアログボックスで [フェールオーバー] オプションを選択すると、2つのデータベースの役割が切り替わります。
 

XenDesktop サイトによるミラーリングされたデータベースの使用の有効化

ミラーリングされたデータベースを設定し、その基本的なフェールオーバー動作を検証したら、新しいデータベースを使用するように XenDesktop サービスを設定する必要があります。これには、次のことを行います。

  • 両方のデータベースサーバー上に、サイト内のすべてのコントローラーに対する適切なログオンが存在することを確認します。
  • ミラーリングされたペアの両方のデータベースサーバーの詳細を含む新しい接続文字列を定義します。

次の点に注意してください。

  • すべての XenDesktop サービスは NetworkService として実行されるため、1つのコントローラー上のすべてのサービスに対して、1つのログオンだけで十分です。上記のスクリプトではブローカーログオンスクリプトしか使用していませんが、そのコントローラー上のすべてのサービスへのアクセスを有効にするには、これで十分です。
  • ミラーリング構成のいずれのデータベースサーバーも、XenDesktopコントローラーではないことを前提としています。これは推奨される構成ではないため、この場合、上記のスクリプトでは適切なデータベースログオンは作成されません。
  • Broker PowerShell SDK スナップインを使用して再構成中のサイトにアクセス済みであり、初期のデフォルト管理アドレスがそのサイト内のいずれかのコントローラーに設定されていることを前提としています。
  • 上記の PowerShell コマンドでは、標準の SQL Server ユーティリティ SQLCMD がローカルに使用可能であることを前提としています。
  • このスクリプトは、変更するデータベースサーバーに対する sysadmin 権限を持つユーザーとして実行する必要があります。
  • データベースサーバー上に適切なログオンが既に存在する場合は、それらは変更されません。

再構成の最後の手順は、XenDesktopサービスからミラーリングされたデータベースへの接続の再確立です。これには、修正した接続文字列をすべてのサービスインスタンスに配布する必要があります。ミラーリングされたデータベースに適した接続文字列の例を次に示します。

Data Source=$PrimaryDB; Failover Partner=$MirrorDB; Initial Catalog=$dbName; Integrated Security=True; Network=dbmssocn

ミラーリングされたデータベースでは、Network=dbmssocn オプションを使用することをお勧めします。このオプションは、XenDesktop による両方のデータベースサーバーとの通信に TCP プロバイダーが強制的に使用されるようにします。このプロバイダーは、ミラーリングでの使用のために最適化されています。また、次の点にも注意してください。

  • これまで接続文字列でデータベースサーバー名に TCP:プレフィックスを使用していた場合は、Network=dbmssocn オプションの使用に切り替える必要があります。 ミラーリング接続文字列で両方のサーバー名に TCP:プレフィックスを指定しても、両方のデータベースサーバーで TCP プロバイダーは強制的に使用されません。
  • Network=dbmssocn オプションは、TCP:プレフィックスの使用と互換性がありません。両方が存在すると、データベース接続は失敗します。

新しい接続文字列は、以下に示すように、XenDesktop PowerShell SDKを使用してサイト内のすべてのサービスに適用できます。新しい接続文字列の値を適宜置き換えます。接続文字列を適用することにより、暗黙的にすべてのXenDesktopサービスが再度有効になります。サイトは、サービスが最初に切断されたときの状態から動作を再開します。

$cs = '<new connection string>'

foreach ($controller in $controllers) {
Write-Host "Reconnect controller $controller ..."

Set-AdminDBConnection -DBConnection $cs -AdminAddress $Controller
Set-LogDBConnection -DBConnection $cs -AdminAddress $Controller 
Set-ConfigDBConnection -DBConnection $cs -AdminAddress $Controller
Set-AcctDBConnection -DBConnection $cs -AdminAddress $Controller
Set-HypDBConnection -DBConnection $cs -AdminAddress $Controller
Set-ProvDBConnection -DBConnection $cs -AdminAddress $Controller
Set-BrokerDBConnection -DBConnection $cs -AdminAddress $Controller
Set-EnvTestDBConnection -DBConnection $cs -AdminAddress $Controller
Set-SfDBConnection -DBConnection $cs -AdminAddress $Controller
Set-MonitorDBConnection -DBConnection $cs -AdminAddress $Controller
Set-MonitorDBConnection -DataStore Monitor -DBConnection $cs -AdminAddress $Controller
Set-LogDBConnection -Datastore Logging -DBConnection $cs -AdminAddress $Controller
}


注:バージョン 7.6 では上記に加えて Set-AnalyticsDBConnection -DBConnection $cs -AdminAddress $controller を実施する必要があります。

上記のコマンドの実行中に次のエラーが表示された場合は、適切な接続文字列値を空にする必要があります。

Set-AdminDBConnection :The operation could not be performed because of a configuration logging error.
At line:16 char:22
+ Set-AdminDBConnection <<<< -DBConnection $null -AdminAddress $Controller
    + CategoryInfo :InvalidOperation:(:)[Set-AdminDBConnection], InvalidOperationException
    + FullyQualifiedErrorId :Citrix.XDPowerShell.Status.ConfigurationLoggingError,Citrix.DelegatedAdmin.Sdk.Cmdlets.DataStore.Commands.SetAdminDBConnectionCommand


以下に示す手順で、レジストリで接続文字列値を手動で空にする必要があります。

注意:この修正を行うには、レジストリを編集する必要があります。レジストリエディターの使用を誤ると、深刻な問題が発生する可能性があり、Windowsの再インストールが必要になる場合もあります。Citrixでは、レジストリエディターを誤って使用した結果生じる問題の解決については保証できません。レジストリエディターはご自身の責任で使用してください。レジストリファイルのバックアップを作成してから、レジストリを編集してください。

HKLM\Software\Citrix\XDservices に移動します。実行中に失敗した特定のサービス接続に基づいて、適切な接続文字列値を空にする必要があります。

たとえば、上記の例のように、AdminDBConnection が実行中に失敗した場合は、HKLM\Software\Citrix\XDservices\DAS\Datastore\Connections の下の接続文字列値を空にします。

Registry Editor

サービスの切断時に Virtual Delivery Agent が登録されており、ユーザーセッションがアクティブであった場合は、動作の再開後に数分間かけて、データベースに記録されているサイトのデータが、アクティブな Virtual Delivery Agent とユーザーセッションの現在の状態で再同期されます。これは仕様に基づく動作であり、これ以上の修正操作は必要ありません。
 

データベースの高可用性の検証

ミラーリングされたデータベースに関して、XenDesktop サイトの適切なフェールオーバー動作を検証することを強くお勧めします。サイトが次の状態であることを確認するために、以下のすべてのテスト手順が成功することが重要です。

  • サイトが問題なく起動し、そのサービスが現時点でプリンシパルであるデータベースサーバーに接続できる。
  • サービスがアクティブな状態で障害が発生した場合に、データベースサーバー間で両方向にフェールオーバー可能である。

使用されている接続文字列はすべてのサービスで同じであるため、テスト目的では1つのサービスインスタンスを選択すれば十分です。次のテストシーケンスの例では、サイト内の任意のブローカーサービスインスタンスを使用しています。

$cs = Get-BrokerDBConnection
Set-BrokerDBConnection -DBConnection $null
Set-BrokerDBConnection -DBConnection $cs
Get-BrokerServiceStatus


正しく機能しているデータベースでは、上記のスクリプトからの出力は次のようになります。

DBUnconfigured
OK
OK


XenDesktopサイトとミラーリングされたデータベース間のやり取りが適切に行われていることを確認するには、次のテストシーケンスを実行します。
 

サービス起動時のデータベース接続

まず、サービスの起動時に、接続文字列内に指定されている情報を使用して、サービスが両方のデータベースサーバーに接続できることを検証します。

  1. 上記のPowerShellスクリプトを実行して、出力が期待どおりかどうかを確認します。
  2. SSMSを使用して、もう一方のデータベースサーバーへのフェールオーバーを強制的に実行します。
  3. 上記のスクリプトを再度実行して、出力が期待どおりかどうかを確認します。
  4. SSMSを使用して、元のデータベースサーバーへのフェールオーバーを強制的に実行します。
  5. 上記のスクリプトを再度実行して、出力が期待どおりかどうかを確認します。


上記のテストの結果が失敗であった場合、XenDesktopサイトの構成またはデータベースサーバーへの接続にエラーがある可能性が高いでしょう。次のようなエラーが考えられます。

  • XenDesktop データベースが、ミラーリング構成に適切に復元されていない。
  • 接続文字列で、一方または両方のサーバー名が間違って指定されている。
  • コントローラーと一方または両方のデータベースサーバーとの間に接続の問題がある。
  • 一方または両方のデータベースサーバー上でコントローラーログオンが指定されていないか間違っている。

 

データベースのフェールオーバー後のデータベース接続

上記のテストの結果が期待どおりであった場合は、データベースのフェールオーバーのトリガー時に、サービスがサーバー間でアクティブなデータベースに自動的に切り替わることを検証します。

  1. Get-BrokerServiceStatus PowerShell コマンドレットのみを実行して、OK と出力されることを確認します。
  2. SSMS を使用して、もう一方のデータベースサーバーへのフェールオーバーを強制的に実行します。
  3. Get-BrokerServiceStatus PowerShell コマンドレットのみを実行して、OK と出力されることを確認します。このようにトリガーされたフェールオーバー後に、出力に一時的に PendingFailure と表示される場合があります。この場合は、コマンドを繰り返します。 PendingFailover と表示されても、その状態は数秒間しか続かず、その後、OK と表示されるはずです。
  4. SSMS を使用して、元のデータベースサーバーへのフェールオーバーを強制的に実行します。
  5. Get-BrokerServiceStatus を使用して、上記のチェックを繰り返します。

最初のテストでサービスの再起動後の両方のデータベースサーバーへの接続に問題がなかったが、2つ目のテストでエラーが発生した場合は、データベースのミラーリングの構成自体に問題がある可能性が高いでしょう。たとえば、データベースインスタンスに対してデフォルト以外の固定ポートを使用しようとすると、サービスは接続文字列で failover partner として指定されているサーバーから data source として指定されているサーバーにはフェールオーバーできますが、逆方向にはフェールオーバーできません。
 

Environment

The above mentioned sample code is provided to you as is with no representations, warranties or conditions of any kind. You may use, modify and distribute it at your own risk. CITRIX DISCLAIMS ALL WARRANTIES WHATSOEVER, EXPRESS, IMPLIED, WRITTEN, ORAL OR STATUTORY, INCLUDING WITHOUT LIMITATION WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NONINFRINGEMENT. Without limiting the generality of the foregoing, you acknowledge and agree that (a) the sample code may exhibit errors, design flaws or other problems, possibly resulting in loss of data or damage to property; (b) it may not be possible to make the sample code fully functional; and (c) Citrix may, without notice or liability to you, cease to make available the current version and/or any future versions of the sample code. In no event should the code be used to support ultra-hazardous activities, including but not limited to life support or blasting activities. NEITHER CITRIX NOR ITS AFFILIATES OR AGENTS WILL BE LIABLE, UNDER BREACH OF CONTRACT OR ANY OTHER THEORY OF LIABILITY, FOR ANY DAMAGES WHATSOEVER ARISING FROM USE OF THE SAMPLE CODE, INCLUDING WITHOUT LIMITATION DIRECT, SPECIAL, INCIDENTAL, PUNITIVE, CONSEQUENTIAL OR OTHER DAMAGES, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. Although the copyright in the code belongs to Citrix, any distribution of the sample code should include only your own standard copyright attribution, and not that of Citrix. You agree to indemnify and defend Citrix against any and all claims arising from your use, modification or distribution of the sample code.

Issue/Introduction

この文書では、ミラーリングされた SQL データベースを使用するように、稼働中の既存の XenDesktop 7 サイトを変換する方法について説明します。 ミラーリングされたデータベースの使用は、サイトの高可用性が重要な場合に最適なオプションです。 サイトに必要な再構成およびその後に推奨されるデータベースフェールオーバー動作の検証について紹介します。ただしこの文書では、基礎となるデータベースをミラーリングされたデータベースとして再構成する手順について、読者が理解していることを前提としています。この情報は、https://technet.microsoft.com/ja-jp/library/bb510479.aspx などの Microsoft 社の各種の文書で解説されています。

Additional Information

この資料は米国の Knowledge Base で提供している資料をもとに作成したものです。

Document ID: CTX139874
How to Reconfigure a XenDesktop 7 Site to Use a SQL Mirrored Database