クラスターの拡張
このセクションでは、Windows Server Failover Cluster (WSFC) と、デュアル・リージョン・デプロイメントで使用する可用性グループを拡張するために必要なビルド・タスクについて説明します。
本書では、以下を前提としています。
- 二重 AZ デプロイメントをデプロイし、災害復旧ユース・ケース用に拡張します。
- リカバリー・リージョンと呼ばれる別のリージョンに 2 つ目の VPC をプロビジョンし、VPC を中継ゲートウェイと共に接続しました。
- サーバー間の必要なトラフィックを許可するようにセキュリティー・グループを構成しました。
- リカバリー領域で仮想サーバーをプロビジョンし、それらを要塞サーバーおよび Active Directory サーバーとして構成しました。
- Active Directory サーバーは、現在 2 つの領域にまたがるドメインの一部です。
- リカバリー領域で仮想サーバーをプロビジョンし、それを SQL サーバーとして構成しました。
Failover Clustering 機能のインストール
-
SQL Admins グループ・アカウントのユーザーを使用し、PowerShell セッションを開いて、リカバリー MZR 内の SQL サーバーへの RDP。
-
SQL Admins グループをローカル・リモート管理ユーザー・グループに追加して、このグループのユーザーがリモート・コマンドを実行できるようにします。
-
このポートは可用性グループのトラフィックに使用されるため、サーバーへのインバウンド TCP ポート 5022 を許可します。 Failover Clustering 機能をインストールしてから、サーバーを再始動します。
$domainnb = "<NB_Domain>" $group = $domainnb + "\SQLAdmins" Add-LocalGroupMember -Group "Remote Management Users" -Member $group New-NetFirewallRule -DisplayName 'SQL-AG-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 5022 Install-WindowsFeature –Name Failover-Clustering –IncludeManagementTools Restart-Computer -Force
WSFC に参加して SQL Always On を有効にする
-
SQL Admins グループ・アカウントのユーザーを使用し、PowerShell セッションを開いて、リカバリー MZR 内の SQL サーバーへの RDP。
-
<clustername>
という名前 (例:wsfc01
) で<hostname3>
を WSFC クラスターに追加してから、新規ノードで Always On 可用性グループを有効にします。$sqldb03 = "<hostname3>" $cluster = "<clustername>" Get-Cluster -Name $cluster | Add-ClusterNode -Name $sqldb03 Enable-SqlAlwaysOn -ServerInstance $sqldb03 -Force
エンドポイントの作成
-
SQL Admins グループ・アカウントのユーザーを使用し、PowerShell セッションを開いて、リカバリー MZR 内の SQL サーバーへの RDP。
-
Always On 可用性グループに参加するには、サーバー・インスタンスに独自のエンドポイントが必要です。このエンドポイントは、可用性レプリカをホストするサーバー・インスタンス間でトラフィックを送受信するために TCP ポート 5022 を使用します。
-
以下の PowerShell コマンドを使用して、エンドポイントを構成します。
Hadr_endpoint
SQL サーバー上のデフォルトの SQL インスタンス (DEFAULT) で、<hostname3>
エンドポイント間の暗号化を有効にします。$sqldb03 = "<hostname3>" $domainnb = "<NB_Domain>" $user = $domainnb + "\sqlsvc" $pathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + "\DEFAULT" $endpoint3 = New-SqlHadrEndpoint Hadr_endpoint -Port 5022 -Path $pathsqldb03 -Encryption Required -EncryptionAlgorithm Aes -Owner $user Set-SqlHadrEndpoint -InputObject $endpoint3 -State "Started"
エンドポイントによって使用されるドメイン・サービスに接続権限を付与するには、以下の手順を実行する必要があります。 このステップを実行しないと、エンドポイント・ポートは開始されず、 netstat -a
リストに表示されません。
- プライマリー・レプリカ・ホスト上で SQL Server Management Studio (SSMS) を起動し、プライマリー・レプリカに接続します。
- **「セキュリティー」**を展開し、 「ログイン」 を右クリックして **「新規ログイン」**を選択します。
- 「検索」 をクリックし、ユーザー・アカウント
\sqlserver\sqlsvc
を入力して、 **「OK」**をクリックします。 - 作成したログインを右クリックし、 **「プロパティー」**を選択します。
- **「機密保護機能」**をクリックしてから、 **「検索」**をクリックします。
- 「オブジェクトの追加」ダイアログで、 「特定のオブジェクト」 を選択し、 **「OK」**をクリックします。
- 「オブジェクトの選択」ダイアログで、 「オブジェクト・タイプ」 をクリックし、 **「エンドポイント」**を選択します。
- 「参照」 をクリックして、オブジェクト名を選択します。
- 「Hadr_endpoint」 を選択し、 **「OK」**をクリックします。
- Hadr_endpoint の許可で、このオブジェクトに対する接続許可を明示的に付与します。
テスト・データベースの転送
-
SQL Admins グループ・アカウントのユーザーを使用し、PowerShell セッションを開いて、リカバリー MZR 内の SQL サーバーへの RDP。
-
Backup-SqlDatabase
コマンドおよびRestore-SqlDatabase
コマンドを使用して、1 次レプリカをホストする SQL サーバー・インスタンスであるTempShare
on<file_share_host>
上の<hostname1>
上に TestDatabase のバックアップを作成することにより、2 次データベースを準備します。 2 次レプリカをホストする<hostname3>
にバックアップをリストアします。NoRecovery
リストア・パラメーターを使用する必要があります。$sqldb01 = "<hostname1>" $sqldb03 = "<hostname3>" $filesharehost = "<file_share_host>" $backupfiledata = "\\" + $filesharehost +"\TempShare\TestDatabase.bak" $backupfilelog = "\\" + $filesharehost +"\TempShare\TestDatabase.trn" Backup-SqlDatabase -Database "TestDatabase" -ServerInstance $sqldb01 -BackupFile $backupfiledata -CopyOnly Backup-SqlDatabase -Database "TestDatabase" -BackupFile $backupfilelog -ServerInstance $sqldb01 -BackupAction Log -CopyOnly Restore-SqlDatabase -Database "TestDatabase" -BackupFile $backupfiledata -ServerInstance $sqldb03 -NoRecovery Restore-SqlDatabase -Database "TestDatabase" -BackupFile $backupfilelog -ServerInstance $sqldb03 -RestoreAction Log -NoRecovery
新しい 2 次データベースは、可用性グループに結合されるまで RESTORING 状態になり、アクセスできなくなります。
可用性グループのレプリカの作成
可用性グループに追加されたデータベースは、可用性データベースと呼ばれます。 データベースを追加する場合、そのデータベースはオンラインの読み取り/書き込みデータベースでなければならず、WSFC 内のプライマリー・レプリカをホストするサーバー・インスタンス上に存在していなければなりません。 追加されると、データベースは可用性グループに 1 次データベースとして結合され、クライアントは引き続き使用できます。 1 次データベースのバックアップが、2 次レプリカになるサーバー・インスタンスにリストアされるまで、2 次データベースは存在しません。 新しい 2 次データベースは、可用性グループに結合されるまで RESTORING 状態になります。 バックアップおよびリストア方式を使用しない場合は、 「Always On 可用性グループの 2 次レプリカを初期化するための自動シードの使用」 を参照してください。
-
SQL Admins グループ・アカウントのユーザーを使用し、PowerShell セッションを開いて、リカバリー MZR 内の SQL サーバーへの RDP。
-
パス・エラーが発生しないようにするには、
Invoke-SQLCmd
を使用します。これにより、PowerShell ドライブ・ツリーを介してアクセスできる SQL PowerShell ライブラリーが強制的にロードされます。 PowerShell は、 SQL Server 内のオブジェクトをディレクトリー内のファイルと同様に扱います。<hostname3>
を SQL Server のホスト名に置き換えます。invoke-sqlcmd cd SQLSERVER:\SQL\<hostname3>
-
可用性グループのレプリカを作成するには、
New-SqlAvailabilityReplica
コマンドを使用して、可用性モードを非同期コミットに構成します。<hostname1>
はプライマリー・レプリカのホスト名です。一方、<hostname3>
はリカバリー MZR 内のサーバーのホスト名であり、<fqdn3>
はそのサーバーの完全修飾ドメイン名です。<availability_group>
は、以前に構成された Always On 可用性グループの名前です。 その他のパラメーターの説明については、 New-SqlAvailabilityGroup 資料を参照してください。$sqldb03 = "<hostname3>" $sqldb03fqdn = "<fqdn3>" $ag = "<availability_group>" $endpointurl3 = "TCP://" + $sqldb03fqdn + ":5022" $pathsqldb01 = "SQLSERVER:\SQL\" + $sqldb01 +" \DEFAULT\AvailabilityGroups\" + $ag New-SqlAvailabilityReplica -Name $sqldb03 -EndpointUrl $endpointurl3 -FailoverMode Manual -AvailabilityMode AsynchronousCommit -ConnectionModeInSecondaryRole AllowNoConnections -Path $pathsqldb01
-
以下のコマンドを使用して、2 次レプリカを可用性グループに結合します。 結合すると、2 次データベースが ONLINE 状態になり、対応する 1 次データベースとのデータ同期が開始されます。 データ同期化は、1 次データベースに対する変更を 2 次データベースに複製するプロセスです。 データ同期化では、1 次データベースがトランザクション・ログ・レコードを 2 次データベースに送信します。
$sqldb03 = "<hostname3>" $ag = "<availability_group>" $sqldb03 = "sqldb03" $ag = "AG01" $pathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + " \DEFAULT" Join-SqlAvailabilityGroup -Path $pathsqldb03 -Name $ag -ClusterType WSFC
-
各 2 次データベースを可用性グループに結合して、データ同期化を開始します。
$sqldb03 = "<hostname3>" $ag = "<availability_group>" $agpathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + " \DEFAULT\AvailabilityGroups\" + $ag Add-SqlAvailabilityDatabase -Path $agpathsqldb03 -Database "TestDatabase"
-
dir コマンドを使用して、新しい可用性グループ (例えば、
dir SQLSERVER:\SQL\sqldb01\DEFAULT\AvailabilityGroups\AG01
) の内容を確認します。 -
Windows ファイアウォールを介して TCP 6789 を許可するには、以下のコマンドを使用します。
New-NetFirewallRule -DisplayName 'SQL-dnnlsnr-6789-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 6789