Microsoft SQL Server の Always On フェイルオーバー クラスタ インスタンス(FCI)を使用すると、複数の Windows Server フェイルオーバー クラスタ(WSFC)ノードで単一の SQL Server インスタンスを実行できます。どの時点においても、いずれかのクラスタノードが、SQL インスタンスをアクティブにホストします。エラーが発生すると、WSFC はインスタンス リソースの所有権を別のノードに自動的に移します。
SQL Server FCI では、すべての WSFC ノードからアクセスできるように、データを共有ストレージに配置する必要があります。このガイドでは、共有ストレージに記憶域スペース ダイレクト(S2D)を使用する SQL Server 2019 フェイルオーバー クラスタ インスタンスをデプロイする方法について説明します。S2D は、Compute Engine VM データディスクを使用して SQL データベースを格納できるソフトウェアベースの仮想 SAN を実現します。
この環境を次の図に示します。
ハイパーコンバージド アーキテクチャを実装すると、VM インスタンス node-1 と node-2 が WSFC ノードとして機能し、共有ストレージもホストします。3 番目の VM インスタンス witness は、フェイルオーバー シナリオでクォーラムを達成するために使用されます。3 つの VM インスタンスは 3 つのゾーンに分散され、共通のサブネットを共有します。
クライアントは、内部 TCP ロードバランサ経由で SQL Server インスタンスと通信します。このロードバランサは、カスタム ヘルスチェックを使用して、現在 SQL インスタンスをホストしている WSFC ノードを特定し、そのインスタンスにトラフィックをルーティングします。
この記事は、Google Cloud に Active Directory がデプロイされており、SQL Server、Active Directory、Compute Engine の基本的な知識があることを前提としています。
目標
- 2 つの SQL Server VM インスタンスと、ファイル共有監視の機能を有する 1 つの VM インスタンスで構成される WSFC をデプロイします。
- WSFC に SQL Server FCI をデプロイします。
- フェイルオーバーをシミュレートして、クラスタが動作していることを確認します。
費用
このチュートリアルでは、以下を含む、 Google Cloudの課金対象となるコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。
始める前に
このガイドを完了するには、次の準備が必要です。
- ドメイン コントローラが 1 つ以上配置された Active Directory ドメイン。Active Directory ドメインは、Managed Microsoft AD を使用して作成できます。または、Compute Engine にカスタムの Active Directory 環境をデプロイして、DNS クエリをドメイン コントローラに転送するプライベート DNS 転送ゾーンを設定することも可能です。
- コンピュータをドメインに参加させ、RDP を使用してログインする権限を付与された Active Directory ユーザー。Managed Microsoft AD を使用している場合は、setupadminユーザーを使用できます。
- Active Directory ドメイン コントローラに接続している Google Cloud プロジェクトと VPC。
- WSFC VM インスタンスに使用するサブネット。
このガイドを完了するには、次の Google Cloud プロジェクトも必要です。
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
- 
    
    
      In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
    
    
      In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳しくは、クリーンアップをご覧ください。
プロジェクトとネットワークの準備
SQL Server FCI をデプロイするために Google Cloud プロジェクトと VPC を準備するには、次の操作を行います。
- Google Cloud コンソールで、[Cloud Shell をアクティブにする] - ボタンをクリックして Cloud Shell を開きます。 
- 次の変数を初期化します。 - VPC_NAME= - VPC_NAMESUBNET_NAME=- SUBNET_NAME- ここで - VPC_NAME: VPC の名前
- SUBNET_NAME: サブネットの名前
 
- デフォルトのプロジェクト ID を設定します。 - gcloud config set project - PROJECT_ID- PROJECT_IDは、 Google Cloud プロジェクトの ID に置き換えます。
- デフォルトのリージョンを設定します。 - gcloud config set compute/region - REGION- REGIONは、デプロイするリージョンの ID に置き換えます。
ファイアウォール ルールの作成
クライアントによる SQL Server への接続、WSFC ノード間の通信、ロードバランサによるヘルスチェックの実行を可能にするには、ファイアウォール ルールをいくつか作成する必要があります。ネットワーク タグを使用すると、こうしたファイアウォール ルールを簡単に作成できます。
- 2 つの WSFC ノードには、wsfc-nodeタグを付加します。
- すべてのサーバー(監視サーバーを含む)には、wsfcタグを付加します。
こうしたネットワーク タグを使用してファイアウォール ルールを作成します。
- 既存の Cloud Shell セッションに戻ります。
- WSFC ノードのファイアウォール ルールを作成します。 - SUBNET_CIDR=$(gcloud compute networks subnets describe $SUBNET_NAME --format=value\('ipCidrRange'\)) gcloud compute firewall-rules create allow-all-between-wsfc-nodes \ --direction=INGRESS \ --action=allow \ --rules=tcp,udp,icmp \ --enable-logging \ --source-tags=wsfc \ --target-tags=wsfc \ --network=$VPC_NAME \ --priority 10000 gcloud compute firewall-rules create allow-sql-to-wsfc-nodes \ --direction=INGRESS \ --action=allow \ --rules=tcp:1433 \ --enable-logging \ --source-ranges=$SUBNET_CIDR \ --target-tags=wsfc-node \ --network=$VPC_NAME \ --priority 10000
- Google Cloud プローバーの IP 範囲からのヘルスチェックを許可するファイアウォール ルールを作成します。 - gcloud compute firewall-rules create allow-health-check-to-wsfc-nodes \ --direction=INGRESS \ --action=allow \ --rules=tcp \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=wsfc-node \ --network=$VPC_NAME \ --priority 10000 
VM インスタンスを作成する
フェイルオーバー クラスタ用に 2 つの VM インスタンスをデプロイします。任意の時点でいずれかの VM がアクティブな FCI ノードとして機能し、もう 1 つのノードはフェイルオーバー ノードとして機能します。2 つの VM インスタンスは、次の要件を満たす必要があります。
- 内部 TCP ロードバランサからアクセスできるように、同じリージョンに配置されている。
- ゲスト エージェントが WSFC モードを使用するように構成されている。このモードでは、ゲスト エージェントは、ローカル ネットワーク インターフェースを構成するときに内部ロードバランサの IP アドレスを無視します。この動作は、WSFC フェイルオーバー イベント中の IP アドレスの競合を防ぐために必要です。
SQL Server 2019 がプリインストールされた SQL Server プレミアム イメージを使用します。
多数決でフェイルオーバー シナリオのクォーラムを構成するには、ファイル共有監視として機能する 3 つ目の VM をデプロイします。
- 既存の Cloud Shell セッションに戻ります。
- WSFC ノード用の専用スクリプトを作成します。このスクリプトは、必要な Windows 機能をインストールし、WSFC と SQL Server 用のファイアウォール ルールを作成します。 - cat << "EOF" > specialize-node.ps1 $ErrorActionPreference = "stop" # Install required Windows features Install-WindowsFeature Failover-Clustering -IncludeManagementTools Install-WindowsFeature RSAT-AD-PowerShell # Open firewall for WSFC netsh advfirewall firewall add rule name="Allow SQL Server health check" dir=in action=allow protocol=TCP localport=59997 # Open firewall for SQL Server netsh advfirewall firewall add rule name="Allow SQL Server" dir=in action=allow protocol=TCP localport=1433 EOF 
- VM インスタンスを作成します。S2D ノードと WSFC ノードとして機能する 2 つの VM で、追加のデータディスクをアタッチし、メタデータキー - enable-wsfcを- trueに設定して WSFC モードを有効にします。- REGION=$(gcloud config get-value compute/region) PD_SIZE=50 MACHINE_TYPE=n2-standard-8 gcloud compute instances create node-1 \ --zone $REGION-a \ --machine-type $MACHINE_TYPE \ --subnet $SUBNET_NAME \ --image-family sql-ent-2019-win-2022 \ --image-project windows-sql-cloud \ --tags wsfc,wsfc-node \ --boot-disk-size 50 \ --boot-disk-type pd-ssd \ --boot-disk-device-name "node-1" \ --create-disk=name=node-1-datadisk-1,size=$PD_SIZE,type=pd-ssd,auto-delete=no \ --create-disk=name=node-1-datadisk-2,size=$PD_SIZE,type=pd-ssd,auto-delete=no \ --create-disk=name=node-1-datadisk-3,size=$PD_SIZE,type=pd-ssd,auto-delete=no \ --create-disk=name=node-1-datadisk-4,size=$PD_SIZE,type=pd-ssd,auto-delete=no \ --metadata enable-wsfc=true \ --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1 gcloud compute instances create node-2 \ --zone $REGION-b \ --machine-type $MACHINE_TYPE \ --subnet $SUBNET_NAME \ --image-family sql-ent-2019-win-2022 \ --image-project windows-sql-cloud \ --tags wsfc,wsfc-node \ --boot-disk-size 50 \ --boot-disk-type pd-ssd \ --boot-disk-device-name "node-2" \ --create-disk=name=node-2-datadisk-1,size=$PD_SIZE,type=pd-ssd,auto-delete=no \ --create-disk=name=node-2-datadisk-2,size=$PD_SIZE,type=pd-ssd,auto-delete=no \ --create-disk=name=node-2-datadisk-3,size=$PD_SIZE,type=pd-ssd,auto-delete=no \ --create-disk=name=node-2-datadisk-4,size=$PD_SIZE,type=pd-ssd,auto-delete=no \ --metadata enable-wsfc=true \ --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1 gcloud compute instances create "witness" \ --zone $REGION-c \ --machine-type n2-standard-2 \ --subnet $SUBNET_NAME \ --image-family=windows-2022 \ --image-project=windows-cloud \ --tags wsfc \ --boot-disk-size 50 \ --boot-disk-type pd-ssd \ --metadata sysprep-specialize-script-ps1="add-windowsfeature FS-FileServer" 
- 3 つの VM インスタンスを Active Directory に参加させるには、3 つの各 VM インスタンスに対して次の操作を行います。 - シリアルポートの出力を表示して、VM の初期化プロセスをモニタリングします。 - gcloud compute instances tail-serial-port-output - NAME- NAMEは VM インスタンスの名前に置き換えます。- Instance setup finishedという出力が表示されるまで数分待ちます。表示されたら Ctrl+C キーを押します。この時点で、VM インスタンスが使用できるようになります。
- VM インスタンスにユーザー名とパスワードを作成します。 
- リモート デスクトップを使用して VM に接続し、前のステップで作成したユーザー名とパスワードを使用してログインします。 
- [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。 
- 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。 
- コンピュータを Active Directory ドメインに追加して再起動します。 - Add-Computer -Domain - DOMAIN -Restart- DOMAINは、Active Directory ドメインの DNS 名に置き換えます。- 再起動が完了するまで 1 分ほど待ちます。 
 
クラスタの IP アドレスを予約する
VPC ネットワーク内に 2 つの静的 IP アドレスを予約します。この 2 つのアドレスはそれぞれ異なる目的で使用されます。
- ロードバランサの IP: この IP アドレスは、クライアントが SQL Server に接続するために使用されます。
- クラスタの IP: この IP アドレスは WSFC によって内部的にのみ使用されます。
静的 IP アドレスを予約する手順は次のとおりです。
- 内部ロードバランサ用に静的 IP を予約し、そのアドレスを - LOADBALANCER_ADDRESSという新しい環境変数でキャプチャします。- gcloud compute addresses create wsfc \ --subnet $SUBNET_NAME \ --region $(gcloud config get-value compute/region) LOADBALANCER_ADDRESS=$(gcloud compute addresses describe wsfc \ --region $(gcloud config get-value compute/region) \ --format=value\(address\)) && \ echo "Load Balancer IP: $LOADBALANCER_ADDRESS" - 後で必要になるため、IP アドレスをメモします。 
- クラスタ IP として使用する別の静的 IP アドレスを予約します。 - gcloud compute addresses create wsfc-cluster \ --subnet $SUBNET_NAME \ --region $(gcloud config get-value compute/region) && \ CLUSTER_ADDRESS=$(gcloud compute addresses describe wsfc-cluster \ --region $(gcloud config get-value compute/region) \ --format=value\(address\)) && \ echo "Cluster IP: $CLUSTER_ADDRESS"- 後で必要になるため、IP アドレスをメモします。 
これで、プロジェクトと VPC を WSFC と SQL Server にデプロイする準備が整いました。
監視ファイル共有を作成する
witness をファイル共有監視として使用できるように準備するには、ファイル共有を作成し、ご自身と 2 つの WSFC ノードにファイル共有へのアクセス権を付与します。
- リモート デスクトップを使用して、witnessに接続します。 ドメイン ユーザー アカウントでログインします。
- [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
- 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
- 監視フォルダを作成して共有します。 - New-Item "C:\QWitness" -Type directory icacls C:\QWitness\ /grant 'node-1$:(OI)(CI)(M)' icacls C:\QWitness\ /grant 'node-2$:(OI)(CI)(M)' New-SmbShare ` -Name QWitness ` -Path "C:\QWitness" ` -Description "SQL File Share Witness" ` -FullAccess $env:username,node-1$,node-2$ 
フェイルオーバー クラスタのデプロイ
次に、VM インスタンスを使用して WSFC と SQL Server をデプロイします。
WSFC をデプロイする
ここでは、フェイルオーバー クラスタを作成します。
- リモート デスクトップを使用して、node-1に接続します。 ドメイン ユーザー アカウントでログインします。
- [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
- 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
- 新しいクラスタの作成 - New-Cluster ` -Name windows-fci ` -Node node-1,node-2 ` -NoStorage ` -StaticAddress - CLUSTER_ADDRESS- CLUSTER_ADDRESSは、前に作成したクラスタ IP アドレスに置き換えます。- このコマンドにより、Active Directory ドメインにコンピュータ アカウント - windows-fciが作成されます。
- witnessの PowerShell セッションに戻り、このコンピュータ アカウントに、ファイル共有にアクセスするための- windows-fci権限を付与します。- icacls C:\QWitness\ /grant 'windows-fci$:(OI)(CI)(M)' Grant-SmbShareAccess ` -Name QWitness ` -AccountName 'windows-fci$' ` -AccessRight Full ` -Force 
- node-1の PowerShell セッションに戻り、- witnessのファイル共有をクラスタ クォーラムとして使用するようにクラスタを構成します。- Set-ClusterQuorum -FileShareWitness \\witness\QWitness 
- クラスタが正常に作成されたことを確認します。 - Test-Cluster - 次のような警告が表示される場合がありますが、無視して問題ありません。 - WARNING: System Configuration - Validate All Drivers Signed: The test reported some warnings.. WARNING: Network - Validate Network Communication: The test reported some warnings.. WARNING: Test Result: HadUnselectedTests, ClusterConditionallyApproved Testing has completed for the tests you selected. You should review the warnings in the Report. A cluster solution is supported by Microsoft only if you run all cluster validation tests, and all tests succeed (with or without warnings). - cluadmin.mscを実行してフェイルオーバー クラスタ マネージャー MMC スナップインを起動し、クラスタの正常性を確認することもできます。
- Managed AD を使用している場合は、WSFC が使用するコンピュータ アカウントを Cloud Service Domain Join Accounts グループに追加して、コンピュータをドメインに参加させることができるようにします。 - Install-WindowsFeature RSAT-ADDS Add-ADGroupMember ` -Identity "Cloud Service Domain Join Accounts" ` -Members windows-fci$ 
記憶域スペース ダイレクトの有効化
S2D を有効にし、前に作成した 3 つの永続ディスクを組み合わせたクラスタ共有ボリュームを作成します。
- node-1の PowerShell セッションに戻ります。
- S2D を有効にします。 - Enable-ClusterStorageSpacesDirect - 必要に応じて、ディスクのパフォーマンスを改善する必要がある場合は、標準 SSD 永続ディスクに加えて、SCSI ローカル SSD を S2D ノードに追加できます。ローカル SSD は S2D キャッシュ層として機能します。キャパシティ ドライブ(このケースでは SSD 永続ディスク)の数は、ローカル SSD の数の倍数にします。キャッシュによる S2D を有効にするには、次のコマンドを実行します。 - Enable-ClusterStorageSpacesDirect -CacheDeviceModel "EphemeralDisk" - 確認のメッセージが表示されたら、デフォルトを受け入れます。次のような警告が表示される場合がありますが、無視して問題ありません。 - WARNING: 2021/04/08-13:12:26.159 Node node-1: No disks found to be used for cache WARNING: 2021/04/08-13:12:26.159 Node node-2: No disks found to be used for cache 
- 必要に応じて、クラスタ共有ボリューム(CSV)のメモリ内キャッシュを 2,048 MB に設定し、読み取りスループットを改善します。 - (Get-Cluster).BlockCacheSize = 2048 
- ReFS バージョンのクラスタ共有ボリュームと 64 KB のクラスタサイズを使用する新しいボリュームを作成します。 - New-Volume ` -StoragePoolFriendlyName S2D* ` -FriendlyName FciVolume ` -FileSystem CSVFS_ReFS ` -UseMaximumSize ` -AllocationUnitSize 65536 
ストレージ プールのフェイルオーバーをテストする
必要に応じて、ストレージ プールのフェイルオーバーが正常に機能するかどうかをテストできます。
- リモート デスクトップを使用して、node-2に接続します。 ドメイン ユーザー アカウントでログインします。
- [スタート] ボタンを右クリックするか Win + X を押して、[実行] を選択します。
- 「cluadmin.msc」と入力して [OK] を選択します。
- 左側のウィンドウ ペインで、[Failover Cluster Manager] > [windows-fci] > [Storage] > [Pools] に移動します。 - [Owner node] が「 - node-1」に設定された、「Cluster Pool 1」というプールが表示されます。
- Cloud Shell に戻り、 - node-1VM をリセットしてフェイルオーバーをシミュレートします。- gcloud compute instances reset node-1 --zone $REGION-a 
- node-2のフェイルオーバー クラスタ マネージャーに戻ります。
- F5 キーを繰り返し押してビューを更新し、ストレージ プールのステータスを確認します。 - 約 30 秒後、[Owner node] が自動的に「 - node-2」に切り替わります。
デフォルトの SQL Server インストールを削除する
2 つのノードからデフォルトの SQL Server インストールを削除し、新しい FCI 構成に置き換えます。
node-1 と node-2 の 2 つの WSFC ノードそれぞれに、次の手順を行います。
- [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
- 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
- デフォルトの SQL Server インスタンスを削除します。 - C:\sql_server_install\Setup.exe /Action=Uninstall /FEATURES=SQL,AS,IS,RS /INSTANCENAME=MSSQLSERVER /Q 
- Microsoft OLE ドライバを削除します。 - Get-Package -Name "Microsoft OLE*" | Uninstall-Package -Force 
- Microsoft ODBC ドライバを削除します。 - Get-Package -Name "Microsoft ODBC*" | Uninstall-Package -Force 
- コンピュータを再起動します。 - Restart-Computer 
- 再起動が完了するまで 1 分ほど待ちます。 
SQL Server FCI をインストールする
新しい FCI 構成をインストールする前に、node-1 がクラスタのアクティブ ノードであることを確認します。
- リモート デスクトップを使用して node-1に再接続し、ドメイン ユーザーを使用してログインします。
- [スタート] ボタンを右クリックするか Win + X を押して、[実行] を選択します。
- 「cluadmin.msc」と入力して [OK] を選択します。
- 左側のウィンドウ ペインで、[Failover Cluster Manager] > [windows-fci] に移動します。 - [Current host server] が「 - node-1」に設定されていることを確認します。- [Current host server] が「 - node-2」に設定されている場合は、左側のウィンドウ ペインで [windows-fci] を右クリックして、[More actions] > [Move core cluster resources] > [Select node…] > [node-1] を選択し、[OK] をクリックします。
- 左側のウィンドウ ペインで、[Failover Cluster Manager] > [windows-fci] > [Storage] > [Pools] に移動します。 - [Cluster Pool 1] の [Owner node] が「 - node-1」に設定されていることを確認します。- [Owner node] が「 - node-2」に設定されている場合は、プールを右クリックして、[Move] > [Select Node] > [node-1] を選択し、[OK] をクリックします。
node-1 で新しい SQL Server フェイルオーバー クラスタ インストールを作成します。
- [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
- 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
- SQL サーバーと SQL エージェントのドメイン ユーザー アカウントを作成し、パスワードを割り当てます。 - Active Directory- $Credential = Get-Credential -UserName sql_server -Message 'Enter password' New-ADUser ` -Name "sql_server" ` -Description "SQL Agent and SQL Admin account." ` -AccountPassword $Credential.Password ` -Enabled $true -PasswordNeverExpires $true - Managed Microsoft AD- $Credential = Get-Credential -UserName sql_server -Message 'Enter password' New-ADUser ` -Name "sql_server" ` -Description "SQL Agent and SQL Admin account." ` -AccountPassword $Credential.Password ` -Enabled $true -PasswordNeverExpires $true ` -Path "OU=Cloud,DOMAIN" - DOMAINは、ドメインの識別名(- DC=example,DC=orgなど)に置き換えます。
- SQL Server の設定を開始します。 - & c:\sql_server_install\setup.exe 
- 左側のメニューで [Installation] を選択します。 
- [New SQL Server failover cluster installation] を選択します。 
- [Microsoft Update] ページで、[Next] を選択してインストールを開始します。 
- [Install Failover Cluster Rules] ページに、MSCS クラスタの確認の警告と Windows ファイアウォールの警告が表示されます。この警告は無視して [Next] を選択できます。 
- [Product Key] ページで、デフォルト値をそのまま使用して [Next] を選択します。 
- [License Terms] ページで、規約を確認し、同意する場合は [Next] を選択します。 
- [Feature Selection] ページで [Database Engine Services] を選択し、[Next] を選択します。 
- [Instance Configuration] ページで、ネットワーク名と名前付きインスタンスとして「 - sql」と入力し、[Next] を選択します。
- [Cluster Resource Group] ページで、デフォルト値をそのまま使用して [Next] を選択します。 
- [Cluster Disk Selection] ページで、[Cluster Virtual Disk (FciVolume)] を有効にして、他のすべてのディスクを無効にします。[Next] を選択します。 
- [Cluster Network Configuration] ページで次の設定を構成し、[Next] を選択します。 - DHCP: 消去します。
- IP アドレス: 内部ロードバランサの IP アドレスを入力します。
 
- [Server configuration] ページで、SQL Server エージェントと SQL Server データベース エンジンの両方について、次の設定を構成します。 - アカウント名: DOMAIN\sql_server。DOMAINは Active Directory ドメインの NetBIOS 名です。
- パスワード: 前に作成したパスワードを入力します。
 
- アカウント名: 
- [Collation] タブを選択し、使用する照合を選択します。[Next] をクリックします。 
- [Database Engine Configuration] ページで、[Add current user] を選択して現在のユーザーを SQL Server 管理者として指定します。[Next] を選択します。 
- [Ready to Install] ページで設定内容を確認し、[Install] を選択します。 
- インストールが完了したら、[Close] を選択します。 
これで、Active Directory ドメインには、SQL Server インスタンスを表すコンピュータ アカウント sql と、内部ロードバランサの IP アドレスを指す対応する DNS エントリが含まれるようになりました。
次に、node-2 を SQL Server フェイルオーバー クラスタに追加します。
- リモート デスクトップを使用して node-2に接続し、ドメイン ユーザーを使用してログインします。
- [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
- 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
- SQL Server の設定を開始します。 - & c:\sql_server_install\setup.exe 
- 左側のメニューで [Installation] を選択します。 
- [Add node to a SQL Server failover cluster] を選択します。 
- インストール ウィザードの手順に沿って、[Service Accounts] ページが表示されるまでデフォルトの設定を受け入れます。 
- [Service Accounts] ページで、以前に作成した SQL Server エージェントと SQL Server データベース エンジンのパスワードを入力します。[Next] を選択します。 
- [Ready to Install] ページで設定内容を確認し、[Install] を選択します。 
- インストールが完了したら、[Close] を選択します。 
ヘルスチェックを構成する
最後の手順として、内部ロードバランサで使用可能なヘルスチェック エンドポイントを公開するようにクラスタを構成します。
- node-2の PowerShell セッションに戻ります。
- ロードバランサの IP アドレスを使用して変数を初期化します。 - $LoadBalancerIP = ' - IP_ADDRESS'- IP_ADDRESSは、前に予約した- wsfcアドレスの IP アドレスに置き換えます。
- ヘルスチェック サービスに応答するようにフェイルオーバー クラスタを構成します。 - $SqlGroup = Get-ClusterGroup | Where-Object {$_.Name.StartsWith("SQL Server")} $SqlIpAddress = Get-ClusterResource | Where-Object {$_.Name.StartsWith("SQL IP Address")} $SqlIpAddress | Set-ClusterParameter -Multiple @{ 'Address'=$LoadBalancerIP; 'ProbePort'= 59997; 'SubnetMask'='255.255.255.255'; 'Network'= (Get-ClusterNetwork).Name; 'EnableDhcp'=0; }
- クラスタ リソースを再起動します。 - $SqlIpAddress | Stop-ClusterResource $SqlIpAddress | Start-ClusterResource 
- クラスタ グループを再起動します。 - $SqlGroup | Stop-ClusterGroup $SqlGroup | Start-ClusterGroup 
内部ロードバランサを作成する
SQL Server クライアントに単一のエンドポイントを指定するため、内部ロードバランサをデプロイします。ロードバランサはヘルスチェックを使用して、トラフィックが WSFC のアクティブ ノードに転送されるかどうかを確認します。
- 既存の Cloud Shell セッションに戻ります。
- 非マネージド インスタンス グループを 2 つ(各ゾーンに 1 つ)作成し、2 つのノードをグループに追加します。 - gcloud compute instance-groups unmanaged create wsfc-group-1 --zone $REGION-a gcloud compute instance-groups unmanaged add-instances wsfc-group-1 --zone $REGION-a \ --instances node-1 gcloud compute instance-groups unmanaged create wsfc-group-2 --zone $REGION-b gcloud compute instance-groups unmanaged add-instances wsfc-group-2 --zone $REGION-b \ --instances node-2 
- ロードバランサがアクティブ ノードの判別に使用できるヘルスチェックを作成します。 - gcloud compute health-checks create tcp wsfc-healthcheck \ --check-interval="2s" \ --healthy-threshold=1 \ --unhealthy-threshold=2 \ --port=59997 \ --timeout="1s" - ヘルスチェック プローブ ポート - 59997は、以前に SQL Server IP アドレス リソース用に- ProbePortとして構成したポートです。
- バックエンド サービスを作成し、2 つのインスタンス グループを追加します。 - gcloud compute backend-services create wsfc-backend \ --load-balancing-scheme internal \ --region $(gcloud config get-value compute/region) \ --health-checks wsfc-healthcheck \ --protocol tcp gcloud compute backend-services add-backend wsfc-backend \ --instance-group wsfc-group-1 \ --instance-group-zone $REGION-a \ --region $REGION gcloud compute backend-services add-backend wsfc-backend \ --instance-group wsfc-group-2 \ --instance-group-zone $REGION-b \ --region $REGION 
- 内部ロードバランサを作成します。 - gcloud compute forwarding-rules create wsfc-sql \ --load-balancing-scheme internal \ --address $LOADBALANCER_ADDRESS \ --ports 1433 \ --network $VPC_NAME \ --subnet $SUBNET_NAME \ --region $REGION \ --backend-service wsfc-backend 
フェイルオーバー クラスタのテスト
フェイルオーバー クラスタのインストールは完了しましたが、クラスタが正常に機能するかどうかをテストする必要があります。
クライアントを準備する
フェイルオーバー クラスタへの接続に使用できる新しい VM インスタンスを作成します。
- 既存の Cloud Shell セッションに戻ります。
- 新しい VM インスタンスを作成します。 - gcloud compute instances create sqlclient \ --zone $REGION-a \ --machine-type n2-standard-2 \ --subnet $SUBNET_NAME \ --image-family sql-ent-2019-win-2022 \ --image-project windows-sql-cloud \ --boot-disk-size 50 \ --boot-disk-type pd-ssd 
- シリアルポートの出力を表示して、VM の初期化プロセスをモニタリングします。 - gcloud compute instances tail-serial-port-output sqlclient - Instance setup finishedという出力が表示されるまで数分待ちます。表示されたら Ctrl+C キーを押します。この時点で、VM インスタンスが使用できるようになります。
- VM インスタンスにユーザー名とパスワードを作成します。 
- リモート デスクトップを使用して VM に接続し、前のステップで作成したユーザー名とパスワードを使用してログインします。 
- [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。 
- 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。 
- コンピュータを Active Directory ドメインに追加します。 - Add-Computer -Domain - DOMAIN- DOMAINは、Active Directory ドメインの DNS 名に置き換えます。
- コンピュータを再起動します。 - Restart-Computer - 再起動が完了するまで 1 分ほど待ちます。 
テストを実行する
sqlclient VM を使用して、フェイルオーバー クラスタに接続できることをテストし、フェイルオーバーが正しく機能していることを確認します。
- リモート デスクトップを使用して sqlclientに接続し、ドメイン ユーザーを使用してログインします。
- [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell] をクリックします。
- TCP/IP と DNS 名 - sqlを使用して SQL Server クラスタに接続し、- dm_os_cluster_nodesテーブルに対してクエリを実行します。- & "$env:ProgramFiles\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.EXE" ` -S tcp:sql -E -Q "SELECT * FROM sys.dm_os_cluster_nodes" - 出力は次のようになります。 - NodeName status status_description is_current_owner ------------------------------ ----------- ------------------ ---------------- NODE-1 0 up 1 NODE-2 0 up 0 (2 rows affected) - node-1が SQL Server フェイルオーバー クラスタ リソースの現在のオーナーであることがわかります。
- Cloud Shell に戻り、node-1 VM を停止してフェイルオーバー シナリオをテストします。 - gcloud compute instances stop node-1 --zone $REGION-a 
- クエリを繰り返します。 - & "$env:ProgramFiles\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.EXE" ` -S tcp:sql -E -Q "SELECT * FROM sys.dm_os_cluster_nodes" - 出力は次のように変わります。 - NodeName status status_description is_current_owner ------------------------------ ----------- ------------------ ---------------- NODE-1 1 down 0 NODE-2 0 up 1 (2 rows affected) - node-1が失われたにもかかわらず、クエリに成功し、- node-2がフェイルオーバー クラスタの現在のオーナーであることが示されます。
制限事項
- S2D は Windows Server 2016 以降でのみサポートされています。
- S2D では、各ディスクにデータ全体の部分的なビューのみが含まれます。したがって、永続ディスクのスナップショットを作成するだけでは、データをバックアップできません。スナップショットではなく、ネイティブの SQL バックアップを使用してください。
クリーンアップ
チュートリアルが終了したら、作成したリソースをクリーンアップして、割り当ての使用を停止し、課金されないようにできます。次のセクションで、リソースを削除または無効にする方法を説明します。
プロジェクトの削除
課金されないようにする最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.