IBM Cloud Docs
クラスターの拡張

クラスターの拡張

このセクションでは、Windows Server Failover Cluster (WSFC) と、デュアル・リージョン・デプロイメントで使用する可用性グループを拡張するために必要なビルド・タスクについて説明します。

本書では、以下を前提としています。

  • 二重 AZ デプロイメントをデプロイし、災害復旧ユース・ケース用に拡張します。
  • リカバリー・リージョンと呼ばれる別のリージョンに 2 つ目の VPC をプロビジョンし、VPC を中継ゲートウェイと共に接続しました。
  • サーバー間の必要なトラフィックを許可するようにセキュリティー・グループを構成しました。
  • リカバリー領域で仮想サーバーをプロビジョンし、それらを要塞サーバーおよび Active Directory サーバーとして構成しました。
  • Active Directory サーバーは、現在 2 つの領域にまたがるドメインの一部です。
  • リカバリー領域で仮想サーバーをプロビジョンし、それを SQL サーバーとして構成しました。

Failover Clustering 機能のインストール

  1. SQL Admins グループ・アカウントのユーザーを使用し、PowerShell セッションを開いて、リカバリー MZR 内の SQL サーバーへの RDP。

  2. SQL Admins グループをローカル・リモート管理ユーザー・グループに追加して、このグループのユーザーがリモート・コマンドを実行できるようにします。

  3. このポートは可用性グループのトラフィックに使用されるため、サーバーへのインバウンド 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 を有効にする

  1. SQL Admins グループ・アカウントのユーザーを使用し、PowerShell セッションを開いて、リカバリー MZR 内の SQL サーバーへの RDP。

  2. <clustername> という名前 (例: wsfc01 ) で <hostname3> を WSFC クラスターに追加してから、新規ノードで Always On 可用性グループを有効にします。

    $sqldb03 = "<hostname3>"
    $cluster = "<clustername>"
    Get-Cluster -Name $cluster | Add-ClusterNode -Name $sqldb03
    Enable-SqlAlwaysOn -ServerInstance $sqldb03 -Force
    

エンドポイントの作成

  1. SQL Admins グループ・アカウントのユーザーを使用し、PowerShell セッションを開いて、リカバリー MZR 内の SQL サーバーへの RDP。

  2. Always On 可用性グループに参加するには、サーバー・インスタンスに独自のエンドポイントが必要です。このエンドポイントは、可用性レプリカをホストするサーバー・インスタンス間でトラフィックを送受信するために TCP ポート 5022 を使用します。

  3. 以下の 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 リストに表示されません。

  1. プライマリー・レプリカ・ホスト上で SQL Server Management Studio (SSMS) を起動し、プライマリー・レプリカに接続します。
  2. **「セキュリティー」**を展開し、 「ログイン」 を右クリックして **「新規ログイン」**を選択します。
  3. 「検索」 をクリックし、ユーザー・アカウント \sqlserver\sqlsvcを入力して、 **「OK」**をクリックします。
  4. 作成したログインを右クリックし、 **「プロパティー」**を選択します。
  5. **「機密保護機能」**をクリックしてから、 **「検索」**をクリックします。
  6. 「オブジェクトの追加」ダイアログで、 「特定のオブジェクト」 を選択し、 **「OK」**をクリックします。
  7. 「オブジェクトの選択」ダイアログで、 「オブジェクト・タイプ」 をクリックし、 **「エンドポイント」**を選択します。
  8. 「参照」 をクリックして、オブジェクト名を選択します。
  9. 「Hadr_endpoint」 を選択し、 **「OK」**をクリックします。
  10. Hadr_endpoint の許可で、このオブジェクトに対する接続許可を明示的に付与します。

テスト・データベースの転送

  1. SQL Admins グループ・アカウントのユーザーを使用し、PowerShell セッションを開いて、リカバリー MZR 内の SQL サーバーへの RDP。

  2. 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 次レプリカを初期化するための自動シードの使用」 を参照してください。

  1. SQL Admins グループ・アカウントのユーザーを使用し、PowerShell セッションを開いて、リカバリー MZR 内の SQL サーバーへの RDP。

  2. パス・エラーが発生しないようにするには、 Invoke-SQLCmd を使用します。これにより、PowerShell ドライブ・ツリーを介してアクセスできる SQL PowerShell ライブラリーが強制的にロードされます。 PowerShell は、 SQL Server 内のオブジェクトをディレクトリー内のファイルと同様に扱います。 <hostname3> を SQL Server のホスト名に置き換えます。

    invoke-sqlcmd
    cd SQLSERVER:\SQL\<hostname3>
    
  3. 可用性グループのレプリカを作成するには、 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
    
  4. 以下のコマンドを使用して、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
    
  5. 各 2 次データベースを可用性グループに結合して、データ同期化を開始します。

    $sqldb03 = "<hostname3>"
    $ag = "<availability_group>"
    $agpathsqldb03 = "SQLSERVER:\SQL\" + $sqldb03 + " \DEFAULT\AvailabilityGroups\" + $ag
    Add-SqlAvailabilityDatabase -Path $agpathsqldb03 -Database "TestDatabase"
    
  6. dir コマンドを使用して、新しい可用性グループ (例えば、 dir SQLSERVER:\SQL\sqldb01\DEFAULT\AvailabilityGroups\AG01) の内容を確認します。

  7. Windows ファイアウォールを介して TCP 6789 を許可するには、以下のコマンドを使用します。

    New-NetFirewallRule -DisplayName 'SQL-dnnlsnr-6789-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 6789