マルチライター モードで永続ディスクを使用する SQL Server フェイルオーバー クラスタ インスタンスを構成する


Microsoft SQL Server の Always On フェイルオーバー クラスタ インスタンス(FCI)を使用すると、複数の Windows Server フェイルオーバー クラスタ(WSFC)ノードで単一の SQL Server インスタンスを実行できます。どの時点においても、いずれかのクラスタノードが、SQL インスタンスをアクティブにホストします。エラーが発生すると、WSFC はインスタンス リソースの所有権を別のノードに自動的に移します。

SQL Server FCI では、すべての WSFC ノードからアクセスできるように、データを共有ストレージに配置する必要があります。このガイドでは、SQL Server 2022 フェイルオーバー クラスタ インスタンスをデプロイし、共有ストレージとしてマルチライター モードの永続ディスクを使用する方法について説明します。

オンプレミス環境では、フェイルオーバーが発生したときに、WSFC が ARP 通知を実行して、IP アドレスの変更をネットワーク機器に通知できます。ただし、Google Cloud は ARP の発表を無視します。そのため、次の 2 つのオプションのいずれかを実装する必要があります。

アーキテクチャ

アーキテクチャ

この記事では、Google Cloud に Active Directory がデプロイされており、SQL Server、Active Directory、Compute Engine の基本的な知識があることを前提としています。

目標

  • 2 つの SQL Server VM インスタンスと、ファイル共有監視の機能を有する 1 つの VM インスタンスで構成される WSFC をデプロイします。
  • WSFC に SQL Server FCI をデプロイします。
  • SQL Server を使用して可用性グループにトラフィックをルーティングするように、ロードバランサまたは分散ネットワーク名(DNN)を構成します。
  • フェイルオーバーをシミュレートして、クラスタが動作していることを確認します。

料金

このチュートリアルでは、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 プロジェクトも必要です。

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳しくは、クリーンアップをご覧ください。

プロジェクトとネットワークの準備

SQL Server FCI をデプロイするために Google Cloud プロジェクトと VPC を準備するには、次の操作を行います。

  1. Google Cloud コンソールで、[Cloud Shell をアクティブにする] Cloud Shell をアクティブにします。 ボタンをクリックして Cloud Shell を開きます。

    Google Cloud コンソールに移動

  2. 次の変数を初期化します。

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    ここで

    • VPC_NAME: VPC の名前
    • SUBNET_NAME: サブネットの名前
  3. デフォルトのプロジェクト ID を設定します。

    gcloud config set project PROJECT_ID
    

    PROJECT_ID は、Google Cloud プロジェクトの ID に置き換えます。

  4. デフォルト ゾーンを設定します。

    gcloud config set compute/zone ZONE
    

    ZONE は、デプロイするゾーンの ID に置き換えます。

ファイアウォール ルールの作成

クライアントによる SQL Server への接続、WSFC ノード間の通信、ロードバランサによるヘルスチェックの実行を可能にするには、ファイアウォール ルールをいくつか作成する必要があります。ネットワーク タグを使用すると、こうしたファイアウォール ルールを簡単に作成できます。

  • 2 つの WSFC ノードには、wsfc-node タグを付加します。
  • すべてのサーバー(監視サーバーを含む)には、wsfc タグを付加します。

こうしたネットワーク タグを使用してファイアウォール ルールを作成します。

  1. 既存の Cloud Shell セッションに戻ります。
  2. 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
    
  3. Google Cloud プローバーの IP 範囲からのヘルスチェックを許可するファイアウォール ルールを作成します(DNN 構成では不要です)。

    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 インスタンスは、次のとおりである必要があります。

  • 同じ永続ディスクにアクセスできるように、同じゾーンに配置されている。
  • Windows Server フェイルオーバー クラスタリングと SQL Server がインストールされている。
  • Compute Engine の WSFC サポートが有効になっている。

SQL Server 2022 がプリインストールされた SQL Server プレミアム イメージを使用します。

多数決でフェイルオーバー シナリオのクォーラムを構成するには、ファイル共有監視として機能する 3 つ目の VM をデプロイします。

  1. 既存の Cloud Shell セッションに戻ります。
  2. 基盤となるデータセンター インフラストラクチャ全体で WSFC ノードを分散させ、同じホストまたは電源システムを共有しないようにする分散プレースメント ポリシーを作成します。

    ZONE=$(gcloud config get-value compute/zone)
    gcloud compute resource-policies create group-placement spread-placement \
      --availability-domain-count 2 \
      --region ${ZONE::-2}
    
  3. 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
    
  4. VM インスタンスを作成し、メタデータキー enable-wsfctrue に設定して、WSFC ノードで Windows Server フェイルオーバー クラスタリング エージェントを有効にします。

    MACHINE_TYPE=n2-standard-8
    
    gcloud compute instances create node-1 \
      --resource-policies spread-placement \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-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" \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create node-2 \
      --resource-policies spread-placement \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-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" \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create "witness" \
      --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"
    
  5. 3 つの VM インスタンスを Active Directory に参加させるには、3 つの各 VM インスタンスに対して次の操作を行います。

    1. シリアルポートの出力を表示して、VM の初期化プロセスをモニタリングします。

      gcloud compute instances tail-serial-port-output NAME
      

      NAME は VM インスタンスの名前に置き換えます。

      Instance setup finished という出力が表示されるまで 3 分ほど待ちます。表示されたら Ctrl+C キーを押します。この時点で、VM インスタンスが使用できるようになります。

    2. VM インスタンスにユーザー名とパスワードを作成します。

    3. リモート デスクトップを使用して VM に接続し、前のステップで作成したユーザー名とパスワードを使用してログインします。

    4. [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。

    5. 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。

    6. コンピュータを Active Directory ドメインに追加して再起動します。

      Add-Computer -Domain DOMAIN -Restart
      

      DOMAIN は、Active Directory ドメインの DNS 名に置き換えます。

      再起動が完了するまで 1 分ほど待ちます。

マルチライター モードで永続ディスクを作成する

マルチライター モードで永続ディスクを 3 つ作成し、それぞれを WSFC ノードにアタッチします。

  1. 既存の Cloud Shell セッションに戻ります。
  2. 共有永続ディスクを 3 つ作成します。

    PD_SIZE=50
    
    gcloud beta compute disks create datadisk-1 \
      --size $PD_SIZE \
      --type pd-ssd \
      --multi-writer \
      --zone $(gcloud config get-value compute/zone)
    gcloud beta compute disks create datadisk-2 \
      --size $PD_SIZE \
      --type pd-ssd \
      --multi-writer \
      --zone $(gcloud config get-value compute/zone)
    gcloud beta compute disks create datadisk-3 \
      --size $PD_SIZE \
      --type pd-ssd \
      --multi-writer \
      --zone $(gcloud config get-value compute/zone)
    
  3. ディスクを node-1 にアタッチします。

    gcloud compute instances attach-disk node-1 --disk datadisk-1
    gcloud compute instances attach-disk node-1 --disk datadisk-2
    gcloud compute instances attach-disk node-1 --disk datadisk-3
    
  4. ディスクを node-2 にアタッチします。

    gcloud compute instances attach-disk node-2 --disk datadisk-1
    gcloud compute instances attach-disk node-2 --disk datadisk-2
    gcloud compute instances attach-disk node-2 --disk datadisk-3
    

クラスタの IP アドレスを予約する

VPC 内に 2 つの静的 IP アドレスを予約します。1 つは WSFC クラスタの IP アドレスとして使用され、もう 1 つの IP アドレスは内部ロードバランサで使用されます。

  1. 内部ロードバランサ用に静的 IP を予約し、そのアドレスを LOADBALANCER_ADDRESS という新しい環境変数でキャプチャします。

    gcloud compute addresses create wsfc \
      --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev) \
      --subnet $SUBNET_NAME
    
    LOADBALANCER_ADDRESS=$(gcloud compute addresses describe wsfc \
      --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev) \
      --format=value\(address\)) && \
    echo "Load Balancer IP: $LOADBALANCER_ADDRESS"
    

    後で必要になるため、IP アドレスをメモします。

  2. クラスタ IP として使用する別の静的 IP アドレスを予約します(DNN 構成では不要です)

    gcloud compute addresses create wsfc-cluster \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev) && \
    CLUSTER_ADDRESS=$(gcloud compute addresses describe wsfc-cluster \
      --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev) \
      --format=value\(address\)) && \
    echo "Cluster IP: $CLUSTER_ADDRESS"
    

    後で必要になるため、IP アドレスをメモします。

これで、プロジェクトと VPC を WSFC と SQL Server にデプロイする準備が整いました。

監視ファイル共有を作成する

witness をファイル共有監視として使用できるように準備するには、ファイル共有を作成し、ご自身と 2 つの WSFC ノードにファイル共有へのアクセス権を付与します。

  1. リモート デスクトップを使用して、witness に接続します。ドメイン ユーザー アカウントでログインします。
  2. [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
  3. 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
  4. 監視フォルダを作成して共有します。

    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 をデプロイする

ここでは、フェイルオーバー クラスタを作成します。

  1. リモート デスクトップを使用して、node-1 に接続します。ドメイン ユーザー アカウントでログインします。
  2. [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
  3. 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
  4. 新しいクラスタを作成します。

    • ロードバランサの構成
    New-Cluster `
      -Name sql-cluster `
      -Node node-1,node-2 `
      -NoStorage `
      -StaticAddress CLUSTER_ADDRESS
    

    CLUSTER_ADDRESS は、前に作成したクラスタ IP アドレスに置き換えます。

    • DNN 構成の場合
    New-Cluster `
      -Name sql-cluster `
      -Node node-1,node-2 `
      -NoStorage `
      -ManagementPointNetworkType Distributed
    
  5. witness の PowerShell セッションに戻り、クラスタの仮想コンピュータ オブジェクトにファイル共有へのアクセス権限を付与します。

    icacls C:\QWitness\ /grant 'sql-cluster$:(OI)(CI)(M)'
    Grant-SmbShareAccess `
      -Name QWitness `
      -AccountName 'sql-cluster$' `
      -AccessRight Full `
      -Force
    
  6. node-1 の PowerShell セッションに戻り、witness のファイル共有をクラスタ クォーラムとして使用するようにクラスタを構成します。

    Set-ClusterQuorum -FileShareWitness \\witness\QWitness
    
  7. クラスタが正常に作成されたことを確認します。

    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 スナップインを起動し、クラスタの正常性を確認することもできます。

  8. Managed AD を使用している場合は、WSFC が使用するコンピュータ アカウントを Cloud Service Domain Join Accounts グループに追加して、コンピュータをドメインに参加させることができるようにします。

    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members sql-cluster$
    

ストレージ プールを作成する

前に作成した 3 つの永続ディスクを組み合わせるストレージ プールを作成し、そのストレージ プールを使用して、クラスタ共有ボリュームを作成します。

  1. node-1 の PowerShell セッションに戻ります。
  2. 3 つの永続ディスクを使用する新しいストレージ プールを作成します。

    $NodeName = [System.Net.Dns]::GetHostName()
    
    $ClusterDisks = Get-PhysicalDisk -CanPool $True |
      Where-Object { ($_ |
        Get-PhysicalDiskStorageNodeView |
        Select-Object -Property StorageNodeObjectId) -like ('*' + $NodeName + '*') }
    
    $Pool = New-StoragePool `
      -StorageSubsystemFriendlyName 'Clustered*' `
      -FriendlyName FciPool `
      -PhysicalDisks $ClusterDisks `
      -ResiliencySettingNameDefault Simple `
      -Verbose
    
  3. ストレージ プールで、クラスタ共有ボリューム バージョンの ReFS と、64 KB のクラスタサイズを使用する新しいボリュームを作成します。

    $Pool | New-Volume `
      -FriendlyName FciVolume `
      -FileSystem CSVFS_ReFS `
      -Size 100GB `
      -AllocationUnitSize 65536
    

    基礎となる永続ディスクが両方の VM インスタンスにアタッチされているため、ボリュームは node-2 に自動的に表示されます。

  4. フェイルオーバー クラスタ マネージャー MMC スナップインを開きます。

    cluadmin.msc
    
  5. 左側のウィンドウ ペインで、[Failover Cluster Manager] > [sql-cluster] > [Storage] > [Disks] に移動します。

  6. [Cluster Virtual Disk (FciVolume)] を右クリックし、[Remove From Cluster Shared Volumes] を選択します。

  7. [Cluster Virtual Disk (FciVolume)] を選択します。

  8. 下部の [Volumes] タブで、ボリュームを右クリックして [Change drive letter] を選択します。

  9. ドライブ文字 [D] を選択し、[OK] をクリックします。

ストレージ プールのフェイルオーバーをテストする

必要に応じて、ストレージ プールのフェイルオーバーが正常に機能するかどうかをテストできます。

  1. リモート デスクトップを使用して、node-2 に接続します。ドメイン ユーザー アカウントでログインします。
  2. [スタート] ボタンを右クリックするか Win + X を押して、[実行] を選択します。
  3. cluadmin.msc」と入力して [OK] を選択します。
  4. 左側のウィンドウ ペインで、[Failover Cluster Manager] > [sql-cluster] > [Storage] > [Pools] に移動します。

    [Owner node] が「node-1」に設定された、「Cluster Pool 1」というプールが表示されます。

  5. Cloud Shell に戻り、node-1 VM をリセットしてフェイルオーバーをシミュレートします。

    gcloud compute instances reset node-1
    
  6. node-2フェイルオーバー クラスタ マネージャーに戻ります。

  7. F5 キーを繰り返し押してビューを更新し、ストレージ プールのステータスを確認します。

    約 30 秒後、[Owner node] が自動的に「node-2」に切り替わります。

デフォルトの SQL Server インストールを削除する

2 つのノードからデフォルトの SQL Server インストールを削除し、新しい FCI 構成に置き換えます。

node-1node-2 の 2 つの WSFC ノードそれぞれに、次の手順を行います。

  1. [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
  2. 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
  3. デフォルトの SQL Server インスタンスを削除します。

    C:\sql_server_install\Setup.exe /Action=Uninstall /FEATURES=SQL,AS,IS,RS /INSTANCENAME=MSSQLSERVER /Q
    
  4. Microsoft OLE ドライバを削除します。

    Get-Package -Name "Microsoft OLE*" | Uninstall-Package -Force
    
  5. Microsoft ODBC ドライバを削除します。

    Get-Package -Name "Microsoft ODBC*" | Uninstall-Package -Force
    
  6. コンピュータを再起動します。

    Restart-Computer
    
  7. 再起動が完了するまで 1 分ほど待ちます。

SQL Server FCI をインストールする

新しい FCI 構成をインストールする前に、node-1 がクラスタのアクティブ ノードであることを確認します。

  1. リモート デスクトップを使用して node-1 に再接続し、ドメイン ユーザーを使用してログインします。
  2. [スタート] ボタンを右クリックするか Win + X を押して、[実行] を選択します。
  3. cluadmin.msc」と入力して [OK] を選択します。
  4. 左側のウィンドウ ペインで、[Failover Cluster Manager] > [sql-cluster] に移動します。

    [Current host server] が「node-1」に設定されていることを確認します。

    [Current host server] が「node-2」に設定されている場合は、左側のウィンドウ ペインで [sql-cluster] を右クリックして、[More actions] > [Move core cluster resources] > [Select node…] > [node-1] を選択し、[OK] をクリックします。

  5. 左側のウィンドウ ペインで、[Failover Cluster Manager] > [sql-cluster] > [Storage] > [Pools] に移動します。

    [Cluster Pool 1] の [Owner node] が「node-1」に設定されていることを確認します。

    [Owner node] が「node-2」に設定されている場合は、プールを右クリックして、[Move] > [Select Node] > [node-1] を選択し、[OK] をクリックします。

node-1 で新しい SQL Server フェイルオーバー クラスタ インストールを作成します。

  1. [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
  2. 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
  3. SQL サーバーと SQL エージェントのドメイン ユーザー アカウントを作成し、パスワードを割り当てます。

    $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
    
  4. SQL Server の設定を開始します。

    & c:\sql_server_install\setup.exe
    
  5. 左側のメニューで [Installation] を選択します。

  6. [New SQL Server failover cluster installation] を選択します。

  7. [Edition] ページで [I have a SQL Server License only] をオンにして、[Next] を選択します。

  8. [License Terms] ページで、規約を確認し、同意する場合は [Next] を選択します。

  9. [Microsoft Update] ページで、[Next] を選択してインストールを開始します。

  10. [Install Failover Cluster Rules] ページに、MSCS クラスタの確認の警告Windows ファイアウォールの警告が表示されます。この警告は無視して [Next] を選択できます。

  11. [Feature Selection] ページで [Database Engine Services] を選択し、[Next] を選択します。

  12. [Instance Configuration] ページで、ネットワーク名として「sql」を入力し、[Next] を選択します。

  13. [Cluster Resource Group] ページで、デフォルト値をそのまま使用して [Next] を選択します。

  14. [Cluster Disk Selection] ページで [Cluster Virtual Disk (FciVolume)] を選択し、[Next] を選択します。

  15. [Cluster Network Configuration] ページで次の設定を構成し、[Next] を選択します。

    • DHCP: 消去します。
    • IP アドレス: 内部ロードバランサの IP アドレスを入力します。
  16. [Server configuration] ページで、SQL Server エージェントSQL Server データベース エンジンの両方について、次の設定を構成します。

    • アカウント名: DOMAIN\sql_serverDOMAIN は Active Directory ドメインの NetBIOS 名です。
    • パスワード: 前に作成したパスワードを入力します。
  17. [Collation] タブを選択し、使用する照合を選択します。[Next] をクリックします。

  18. [Database Engine Configuration] ページで、[Add current user] を選択して現在のユーザーを SQL Server 管理者として指定します。[Next] を選択します。

  19. [Ready to Install] ページで設定内容を確認し、[Install] を選択します。

  20. インストールが完了したら、[Close] を選択します。

次に、node-2 を SQL Server フェイルオーバー クラスタに追加します。

  1. リモート デスクトップを使用して node-2 に接続し、ドメイン ユーザーを使用してログインします。
  2. [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
  3. 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
  4. SQL Server の設定を開始します。

    & c:\sql_server_install\setup.exe
    
  5. 左側のメニューで [Installation] を選択します。

  6. [Add node to a SQL Server failover cluster] を選択します。

  7. インストール ウィザードの手順に沿って、[Service Accounts] ページが表示されるまでデフォルトの設定を受け入れます。

  8. [Service Accounts] ページで、以前に作成した SQL Server エージェントSQL Server データベース エンジンのパスワードを入力します。[Next] を選択します。

  9. [Ready to Install] ページで設定内容を確認し、[Install] を選択します。

  10. インストールが完了したら、[Close] を選択します。

ヘルスチェックを構成する

最後の手順として、内部ロードバランサで使用可能なヘルスチェック エンドポイントを公開するようにクラスタを構成します。

  1. node-2 の PowerShell セッションに戻ります。
  2. ロードバランサの IP アドレスを使用して変数を初期化します。

    $LoadBalancerIP = 'IP_ADDRESS'
    

    IP_ADDRESS は、前に予約した wsfc アドレスの IP アドレスに置き換えます。

  3. ヘルスチェック サービスに応答するようにフェイルオーバー クラスタを構成します。

    $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; }
    
  4. クラスタ リソースを再起動します。

    $SqlIpAddress | Stop-ClusterResource
    $SqlIpAddress | Start-ClusterResource
    
  5. クラスタ グループを再起動します。

    $SqlGroup | Stop-ClusterGroup
    $SqlGroup | Start-ClusterGroup
    

内部ロードバランサを作成する

SQL Server クライアントに単一のエンドポイントを指定するため、内部ロードバランサをデプロイします。ロードバランサはヘルスチェックを使用して、トラフィックが WSFC のアクティブ ノードに転送されるかどうかを確認します。

  1. 既存の Cloud Shell セッションに戻ります。
  2. 非マネージド インスタンス グループを作成し、2 つのノードをグループに追加します。

    gcloud compute instance-groups unmanaged create wsfc-group
    gcloud compute instance-groups unmanaged add-instances wsfc-group --instances node-1,node-2
    
  3. ロードバランサがアクティブ ノードの判別に使用できるヘルスチェックを作成します。

    gcloud compute health-checks create tcp wsfc-healthcheck \
      --check-interval="2s" \
      --healthy-threshold=1 \
      --unhealthy-threshold=2 \
      --port=59997 \
      --timeout="1s"
    

    ヘルスチェック プローブ ポート 59997 は、以前に WSFC クラスタの IP アドレスに ProbePort として構成したポートです。

  4. バックエンド サービスを作成し、インスタンス グループを追加します。

    gcloud compute backend-services create wsfc-backend \
      --load-balancing-scheme internal \
      --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev) \
      --health-checks wsfc-healthcheck \
      --protocol tcp
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group \
      --instance-group-zone $(gcloud config get-value compute/zone) \
      --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev)
    
  5. 内部ロードバランサを作成します。

    gcloud compute forwarding-rules create wsfc-sql \
      --load-balancing-scheme internal \
      --address $LOADBALANCER_ADDRESS \
      --ports 1433 \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/zone | rev | cut -c 3- | rev) \
      --backend-service wsfc-backend
    

DNN リソースと DNN DNS 名を構成する

内部ロードバランサと同様に、DNN リソースは SQL Server クライアントの単一のゲートウェイとして機能します。フェイルオーバー中、クラスタはトラフィックをアクティブな SQL Server FCI ノードにシームレスにルーティングします。クライアントは DNS 名を使用して SQL Server FCI に接続します。

  1. node-1 の PowerShell セッションに戻ります。
  2. スクリプトを実行して DNN リソースを作成する

      $DNNResourceName='fci-dnn'
      $DNN_DNSName='fcidnn'
    
      # create the DNN resource
      Add-ClusterResource -Name $DNNResourceName -ResourceType 'Distributed Network Name' -Group 'SQL Server (MSSQLSERVER)'
    
      # set the DNS name of the DNN resource
      Get-ClusterResource -Name $DNNResourceName | Set-ClusterParameter -Name DnsName -Value $DNN_DNSName
    
      # start the DNN resource
      Start-ClusterResource -Name $DNNResourceName
    
  3. node-1node-2 を再起動する

フェイルオーバー クラスタのテスト

フェイルオーバー クラスタのインストールは完了しましたが、クラスタが正常に機能するかどうかをテストする必要があります。

クライアントを準備する

フェイルオーバー クラスタへの接続に使用できる新しい VM インスタンスを作成します。

  1. 既存の Cloud Shell セッションに戻ります。
  2. 新しい VM インスタンスを作成します。

    gcloud compute instances create sqlclient \
      --machine-type n2-standard-2 \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-win-2022 \
      --image-project windows-sql-cloud \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd
    
  3. シリアルポートの出力を表示して、VM の初期化プロセスをモニタリングします。

    gcloud compute instances tail-serial-port-output sqlclient
    

    インスタンスの設定が完了したという内容の出力が表示されるまで 3 分ほど待ちます。表示されたら Ctrl + C キーを押します。この時点で、VM インスタンスが使用できるようになります。

  4. VM インスタンスにユーザー名とパスワードを作成します。

  5. リモート デスクトップを使用して VM に接続し、前のステップで作成したユーザー名とパスワードを使用してログインします。

  6. [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。

  7. 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。

  8. コンピュータを Active Directory ドメインに追加します。

    Add-Computer -Domain DOMAIN
    

    DOMAIN は、Active Directory ドメインの DNS 名に置き換えます。

  9. コンピュータを再起動します。

    Restart-Computer
    

    再起動が完了するまで 1 分ほど待ちます。

テストを実行する

sqlclient VM を使用して、フェイルオーバー クラスタに接続できることをテストし、フェイルオーバーが正しく機能していることを確認します。

  1. リモート デスクトップを使用して sqlclient に接続し、ドメイン ユーザーを使用してログインします。
  2. [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell] をクリックします。
  3. ネットワーク名 sql を使用して SQL Server クラスタに接続し、dm_os_cluster_nodes テーブルに対してクエリを行います。

    & "$env:ProgramFiles\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.EXE" `
       -S SQL_SERVER_NAME -E -Q "SELECT * FROM sys.dm_os_cluster_nodes"
    

    SQL_SERVER_NAME は、sqlロードバランサ構成の場合)または fcidnnDNN 構成の場合)に置き換えます。

    出力は次のようになります。

    NodeName                       status      status_description is_current_owner
    ------------------------------ ----------- ------------------ ----------------
    NODE-1                                   0 up                                1
    NODE-2                                   0 up                                0
    
    (2 rows affected)
    

    node-1 が SQL Server フェイルオーバー クラスタ リソースの現在のオーナーであることがわかります。

  4. Cloud Shell に戻り、node-1 VM を停止してフェイルオーバー シナリオをテストします。

    gcloud compute instances stop node-1
    
  5. クエリを繰り返します。

    & "$env:ProgramFiles\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\SQLCMD.EXE" `
       -S SQL_SERVER_NAME -E -Q "SELECT * FROM sys.dm_os_cluster_nodes"
    

    SQL_SERVER_NAME は、sqlロードバランサ構成の場合)または fcidnnDNN 構成の場合)に置き換えます。

    出力は次のように変わります。

    NodeName                       status      status_description is_current_owner
    ------------------------------ ----------- ------------------ ----------------
    NODE-1                                   1 down                              0
    NODE-2                                   0 up                                1
    
    (2 rows affected)
    

    node-1 が失われたにもかかわらず、クエリに成功し、node-2 がフェイルオーバー クラスタの現在のオーナーであることが示されます。

クリーンアップ

チュートリアルが終了したら、作成したリソースをクリーンアップして、割り当ての使用を停止し、課金されないようにできます。次のセクションで、リソースを削除または無効にする方法を説明します。

プロジェクトの削除

課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。

プロジェクトを削除するには:

  1. Google Cloud コンソールで、[リソースの管理] ページに移動します。

    [リソースの管理] に移動

  2. プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
  3. ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。

次のステップ