分散ネットワーク名を使用して同期 commit を使用する SQL Server Always On 可用性グループを構成する


Microsoft SQL Server の Always On 可用性グループを使用すると、複数の SQL Server Enterprise インスタンス間でデータベースを複製できます。

SQL Server フェイルオーバー クラスタ インスタンスと同様に、Always On 可用性グループは Windows Server フェイルオーバー クラスタリング(WSFC)を使用して高可用性を実装します。ただし、この 2 つの機能には次のような違いがあります。

Always On 可用性グループ フェイルオーバー クラスタ インスタンス
フェイルオーバーのスコープ データベースのグループ インスタンス
ストレージ 共有なし 共有

詳細な比較については、フェイルオーバー クラスタ インスタンスと可用性グループの比較をご覧ください。

Always On 可用性グループは、複数の可用性モードをサポートしています。このチュートリアルでは、Always On 可用性グループを同期 commit モードでデプロイして、1 つ以上のデータベースの高可用性を実装する方法について説明します。

この設定では、3 つの VM インスタンスを作成します。2 つの VM インスタンス(node-1node-2)がクラスタノードとして機能し、SQL Server を実行します。3 番目の VM インスタンス witness は、フェイルオーバー シナリオでクォーラムを達成するために使用されます。3 つの VM インスタンスは 3 つのゾーンに分散され、共通のサブネットを共有します。

SQL Server Always On 可用性グループを使用して、サンプル データベース bookshelf が 2 つの SQL Server インスタンス間で同期的に複製されます。

オンプレミスの Windows クラスタ環境では、Address Resolution Protocol(ARP)通知によってIP アドレスのフェイルオーバーがトリガーされます。ただし、Google Cloudは ARP の発表を無視します。そのため、内部ロードバランサと分散ネットワーク名(DNN)を使用する次の 2 つのオプションのいずれかを実装する必要があります。

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

SQL Server Always On 可用性グループを使用して、サンプル データベース bookshelf が、2 つの SQL Server インスタンス間で同期的に複製されます。クラスタの前に配置された分散ネットワーク名(DNN)リスナーは、SQL Server クライアントに単一のエンドポイントを提供します。

DNN の詳細については、可用性グループの DNN リスナーを構成するをご覧ください。

アーキテクチャ

この図には次のものが含まれています。

  • 同じリージョン内の 2 つの VM インスタンスと、node-1node-2 という名前の異なるゾーンのフェイルオーバー クラスタ。1 つは SQL Server データベースのプライマリ レプリカをホストし、もう一方はセカンダリ レプリカをホストします。
  • witness という 3 つ目の VM は、ファイル共有監視として機能し、タイブレークの投票を行い、フェイルオーバーのクォーラムを達成します。
  • クラスタの前に DNN リスナーを配置すると、SQL Server クライアントに単一のエンドポイントが提供されます。

目標

料金

このチュートリアルでは、 Google Cloudの課金対象コンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを出すことができます。

始める前に

このチュートリアルのタスクを完了するには、次のことを確認してください。

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. ドメイン コントローラが 1 つ以上配置された Active Directory ドメイン。Managed Microsoft AD を使用して Active Directory ドメインを作成できます。または、Compute Engine にカスタムの Active Directory 環境をデプロイして、DNS クエリをドメイン コントローラに転送するプライベート DNS 転送ゾーンを設定することもできます。
  7. コンピュータをドメインに参加させ、RDP を使用してログインする権限を付与された Active Directory ユーザーが存在する。Managed Microsoft AD を使用している場合は、setupadmin ユーザーを使用できます。Active Directory ユーザー アカウントのプロビジョニングの詳細については、Active Directory ユーザー アカウントのプロビジョニングをご覧ください。
  8. Google Cloud プロジェクトと、Active Directory ドメイン コントローラに接続する Virtual Private Cloud(VPC)。
  9. Windows Server フェイルオーバー クラスタ VM インスタンスに使用するサブネット。
このチュートリアルを終了した後、作成したリソースを削除すると、それ以上の請求は発生しません。詳しくは、クリーンアップをご覧ください。

プロジェクトとネットワークを準備する

SQL Server Always On 可用性グループをデプロイするには、デプロイ用にGoogle Cloud プロジェクトと VPC を準備する必要があります。以降のセクションでは、この方法について詳しく説明します。

プロジェクトとリージョンを構成する

SQL Server Always On 可用性グループをデプロイするために Google Cloud プロジェクトを準備するには、次の操作を行います。

  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/region REGION
    

    REGION は、デプロイするリージョンの ID に置き換えます。

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

クライアントが SQL Server に接続し、クラスタノード間で通信できるようにするには、いくつかのファイアウォール ルールを作成する必要があります。ネットワーク タグを使用すると、次のようにこれらのファイアウォール ルールの作成を簡素化できます。

  • 2 つのクラスタノードには、wsfc-node タグが付加されます。
  • すべてのサーバー(witness を含む)には、wsfc タグが付加されます。

これらのネットワーク タグを使用するファイアウォール ルールを作成するには、次の手順を行います。

  1. 既存の Cloud Shell セッションに戻ります。
  2. クラスタノード間のトラフィックを許可するファイアウォール ルールを作成します。

    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
    

VM インスタンスを作成する

フェイルオーバー クラスタ用に 2 つの VM インスタンスを作成してデプロイします。どの時点においても、これらの VM の 1 つが SQL Server データベースのプライマリ レプリカをホストし、もう一方がセカンダリ レプリカをホストします。2 つの VM インスタンスは、次の条件を満たしている必要があります。

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

タイブレークのための投票を行ってフェイルオーバー シナリオのクォーラムを達成するには、次の手順でファイル共有監視として機能する 3 つ目の VM をデプロイします。

  1. 既存の Cloud Shell セッションに戻ります。
  2. 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 WSFC health check" dir=in action=allow protocol=TCP localport=59998
    
    # Open firewall for SQL Server
    netsh advfirewall firewall add rule name="Allow SQL Server" dir=in action=allow protocol=TCP localport=1433
    
    # Open firewall for SQL Server replication
    netsh advfirewall firewall add rule name="Allow SQL Server replication" dir=in action=allow protocol=TCP localport=5022
    
    # Format data disk
    Get-Disk |
     Where partitionstyle -eq 'RAW' |
     Initialize-Disk -PartitionStyle MBR -PassThru |
     New-Partition -AssignDriveLetter -UseMaximumSize |
     Format-Volume -FileSystem NTFS -NewFileSystemLabel 'Data' -Confirm:$false
    
    # Create data and log folders for SQL Server
    md d:\Data
    md d:\Logs
    EOF
    
  3. VM インスタンスを作成します。クラスタノードとして機能する 2 つの VM で、追加のデータディスクをアタッチし、メタデータキー enable-wsfctrue に設定して Windows Server フェイルオーバー クラスタリングを有効にします。

    REGION=$(gcloud config get-value compute/region)
    ZONE1=ZONE1
    ZONE2=ZONE2
    ZONE3=ZONE3
    PD_SIZE=200
    MACHINE_TYPE=n2-standard-8
    
    gcloud compute instances create node-1 \
      --zone $ZONE1 \
      --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" \
      --create-disk=name=node-1-datadisk,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 $ZONE2 \
      --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" \
      --create-disk=name=node-2-datadisk,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 $ZONE3 \
      --machine-type e2-medium \
      --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"
    

    使用しているゾーンに応じて、ZONE1ZONE2ZONE3 を置き換えます。

  4. 3 つの VM インスタンスを Active Directory に参加させるには、3 つの各 VM インスタンスに対して次の操作を行います。

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

      gcloud compute instances tail-serial-port-output NAME
      

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

      Instance setup finished という出力が表示されるまで数分待ちます。表示されたら 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 名に置き換えます。

    7. VM をドメインに参加させる権限を持つアカウントの認証情報を入力します。

      VM が再起動するまで待ちます。VM インスタンスが Active Directory に参加しました。

フェイルオーバー クラスタのデプロイ

これで、VM インスタンスを使用して Windows Server フェイルオーバー クラスタと SQL Server をデプロイできます。以降のセクションでは、この方法について詳しく説明します。

SQL Server の準備

次の手順で、Active Directory で SQL Server 用の新しいユーザー アカウントを作成します。

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

    $Credential = Get-Credential -UserName sql_server -Message 'Enter password'
    New-ADUser `
      -Name "sql_server" `
      -Description "SQL Admin account." `
      -AccountPassword $Credential.Password `
      -Enabled $true -PasswordNeverExpires $true
    

SQL Server を構成するには、node-1node-2 の両方で次の操作を行います。

  1. SQL Server 構成マネージャーを開きます。
  2. ナビゲーション パネルで [SQL Server Services] を選択します。
  3. サービスのリストで [SQL Server(MSSQLSERVER)] を右クリックし、[プロパティ] を選択します。
  4. [ログオン] でアカウントを次のように変更します。

    • アカウント名: DOMAIN\sql_serverDOMAIN は Active Directory ドメインの NetBIOS 名です。
    • パスワード: 前に選択したパスワードを入力します。
  5. [OK] をクリックします。

  6. SQL Server を再起動を求めるプロンプトが表示されたら、[Yes] を選択します。

SQL Server がドメイン ユーザー アカウントで実行されるようになりました。

ファイル共有を作成する

VM インスタンス witness に 2 つのファイル共有を作成して、SQL Server のバックアップを保存し、ファイル共有監視として機能できるようにします。

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

    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$
    
  5. 別のファイル共有を作成してバックアップを保存し、SQL Server に完全アクセス権を付与します。

    New-Item "C:\Backup" –type directory
    New-SmbShare `
      -Name Backup `
      -Path "C:\Backup" `
      -Description "SQL Backup" `
      -FullAccess  $env:USERDOMAIN\sql_server
    

フェイルオーバー クラスタを作成する

フェイルオーバー クラスタを作成する手順は次のとおりです。

  1. node-1 のリモート デスクトップ セッションに戻ります。
  2. [スタート] ボタンを右クリックするか Win + X を押して、[Windows PowerShell(管理者)] をクリックします。
  3. 特権昇格を確認するプロンプトが表示されたら [はい] をクリックします。
  4. 新しいクラスタを作成します。

    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 を使用している場合は、Windows クラスタで使用されるコンピュータ アカウントを Cloud Service Domain Join Accounts グループに追加して、コンピュータをドメインに参加させることができます。

    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members sql-cluster$
    
  9. 両方のノードで Always On 可用性グループを有効にします。

    Enable-SqlAlwaysOn -ServerInstance node-1 -Force
    Enable-SqlAlwaysOn -ServerInstance node-2 -Force
    

可用性グループの作成

サンプル データベース bookshelf を作成し、bookshelf-ag という名前の新しい可用性グループに組み込み、高可用性を構成します。

データベースの作成

新しいデータベースを作成します。このチュートリアルでは、データベースにデータが含まれている必要はありません。

  1. node-1 のリモート デスクトップ セッションに戻ります。
  2. SQL Server Management Studio を開きます。
  3. [サーバーに接続] ダイアログで、サーバー名が node-1 に設定されていることを確認し、[接続] を選択します。
  4. メニューで [File] > [New] > [Query with current connection] を選択します。
  5. 次の SQL スクリプトをエディタに貼り付けます。

    -- Create a sample database
    CREATE DATABASE bookshelf ON PRIMARY (
      NAME = 'bookshelf',
      FILENAME='d:\Data\bookshelf.mdf',
      SIZE = 256MB,
      MAXSIZE = UNLIMITED,
      FILEGROWTH = 256MB)
    LOG ON (
      NAME = 'bookshelf_log',
      FILENAME='d:\Logs\bookshelf.ldf',
      SIZE = 256MB,
      MAXSIZE = UNLIMITED,
      FILEGROWTH = 256MB)
    GO
    
    USE [bookshelf]
    SET ANSI_NULLS ON
    SET QUOTED_IDENTIFIER ON
    GO
    
    -- Create sample table
    CREATE TABLE [dbo].[Books] (
      [Id] [bigint] IDENTITY(1,1) NOT NULL,
      [Title] [nvarchar](max) NOT NULL,
      [Author] [nvarchar](max) NULL,
      [PublishedDate] [datetime] NULL,
      [ImageUrl] [nvarchar](max) NULL,
      [Description] [nvarchar](max) NULL,
      [CreatedById] [nvarchar](max) NULL,
      CONSTRAINT [PK_dbo.Books] PRIMARY KEY CLUSTERED ([Id] ASC) WITH (
        PAD_INDEX = OFF,
        STATISTICS_NORECOMPUTE = OFF,
        IGNORE_DUP_KEY = OFF,
        ALLOW_ROW_LOCKS = ON,
        ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    
    -- Create a backup
    EXEC dbo.sp_changedbowner @loginame = 'sa', @map = false;
      ALTER DATABASE [bookshelf] SET RECOVERY FULL;
      GO
      BACKUP DATABASE bookshelf to disk = '\\witness\Backup\bookshelf.bak' WITH INIT
    GO
    

    このスクリプトは、1 つのテーブルで新しいデータベースを作成し、witness への初期バックアップを実行します。

  6. [実行] を選択して SQL スクリプトを実行します。

高可用性を構成する

これで、T-SQL または Server Management Studio を使用して、可用性グループの高可用性を構成できます。

T-SQL の使用

T-SQL を使用して可用性グループの高可用性を構成する手順は次のとおりです。

  1. node-1 に接続し、次のスクリプトを実行して bookshelf-ag 可用性グループを作成します。

    CREATE LOGIN [NET_DOMAIN\sql_server] FROM WINDOWS;
    GO
    
    USE [bookshelf];
    CREATE USER [NET_DOMAIN\sql_server] FOR LOGIN [NET_DOMAIN\sql_server];
    GO
    
    USE [master];
    CREATE ENDPOINT bookshelf_endpoint
      STATE=STARTED
      AS TCP (LISTENER_PORT=5022)
      FOR DATABASE_MIRRORING (ROLE=ALL);
    GO
    
    GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN\sql_server]
    GO
    
  2. node-2 に接続し、次のスクリプトを実行します。

    CREATE LOGIN [NET_DOMAIN\sql_server] FROM WINDOWS;
    GO
    
    CREATE ENDPOINT bookshelf_endpoint
      STATE=STARTED
      AS TCP (LISTENER_PORT=5022)
      FOR DATABASE_MIRRORING (ROLE=ALL);
    GO
    
    GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN\sql_server]
    GO
    
  3. node-1 で次のスクリプトを実行して、bookshelf-ag 可用性グループを作成します。

    USE master;
    GO
    
    CREATE AVAILABILITY GROUP [bookshelf-ag]
    WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY,
    CLUSTER_TYPE = WSFC,
    DB_FAILOVER = ON
    )
    FOR DATABASE [bookshelf]
    REPLICA ON
      N'node-1' WITH (
          ENDPOINT_URL = 'TCP://node-1:5022',
          AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
          FAILOVER_MODE = AUTOMATIC,
          BACKUP_PRIORITY = 50,
          SEEDING_MODE = AUTOMATIC,
          SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
      ),
      N'node-2' WITH (
          ENDPOINT_URL = 'TCP://node-2:5022',
          AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
          FAILOVER_MODE = AUTOMATIC,
          BACKUP_PRIORITY = 50,
          SEEDING_MODE = AUTOMATIC,
          SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
      );
    GO
    
  4. node-2 に接続し、次のスクリプトを実行して、セカンダリ レプリカを可用性グループに結合し、自動シーディングを有効にします。

    USE master;
    GO
    
    ALTER AVAILABILITY GROUP [bookshelf-ag] JOIN;
    ALTER AVAILABILITY GROUP [bookshelf-ag] GRANT CREATE ANY DATABASE;
    
    
  5. 可用性グループのステータスを確認します。

    SELECT * FROM sys.dm_hadr_availability_group_states;
    GO
    

    synchronization_health_descHEALTHY として表示されます。

SQL Server Management Studio を使用する

SQL Server Management Studio を使用して可用性グループの高可用性を構成する手順は次のとおりです。

  1. [Object Explorer] ウィンドウで、[Always On High Availability] を右クリックし、[New Availability Group Wizard] を選択します。
  2. [Specify Options] ページで、可用性グループ名を bookshelf-ag に設定し、[次へ] を選択します。
  3. [Select Databases] ページで、bookshelf データベースを選択し、[Next] を選択します。
  4. [Specify Replicas] ページで、[Replicas] タブを選択します。

    1. [レプリカを追加] を選択します。
    2. [Connect to server] ダイアログで、サーバー名として「node-2」と入力し、[Connect] を選択します。

      可用性レプリカのリストに SQL Server インスタンス node-1node-2 が追加されました。

    3. 両方のインスタンスで、可用性モードを [Synchrounous commit] に設定します。

    4. 両方のインスタンスで、自動フェイルオーバーを [Enabled] に設定します。

    5. [次へ] を選択します。

  5. [データ同期の選択] ページで、[自動シード] を選択します。

  6. [Validation] ページで、すべてのチェックが成功したことを確認します。可用性グループ リスナーのチェックは無視できます。

  7. [概要] ページで、[終了] を選択します。

  8. [Results] ページで、[Close] を選択します。

可用性グループの DNN リスナーを構成する

DNN リスナーは、SQL Server クライアントの単一のエンドポイントとして機能します。DNN リスナーを構成する手順は次のとおりです。

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

      $Ag='bookshelf-ag'
      $Port='DNN_PORT'
      $Dns='DNN_NAME'
    
      # create the DNN resource with the port as the resource name
      Add-ClusterResource -Name $Port -ResourceType "Distributed Network Name" -Group $Ag
    
      # set the DNS name of the DNN resource
      Get-ClusterResource -Name $Port | Set-ClusterParameter -Name DnsName -Value $Dns
    
      # start the DNN resource
      Start-ClusterResource -Name $Port
    
      # add the Dependency from availability group resource to the DNN resource
      Set-ClusterResourceDependency -Resource $Ag -Dependency "[$Port]"
    
      # restart the availability group resource
      Stop-ClusterResource -Name $Ag
      Start-ClusterResource -Name $Ag
    

    DNN_PORT は、DNN リスナーのポートに置き換えます。DNN リスナーポートは、一意のポートとして構成する必要があります。詳細については、ポートに関する考慮事項をご覧ください。

    DNN_NAME は、DNN リスナー名に置き換えます。

  3. node-1node-2 の両方で、DNN リスナーポートのファイアウォール ルールを作成します。

      netsh advfirewall firewall add rule name="Allow DNN listener" dir=in action=allow protocol=TCP localport=DNN_PORT
    

フェイルオーバーをテストする

これで、フェイルオーバーが想定どおりに機能するかどうかをテストする準備が整いました。

  1. witness の PowerShell セッションに戻ります。
  2. 次のスクリプトを実行します。

    while ($True){
      $Conn = New-Object System.Data.SqlClient.SqlConnection
      $Conn.ConnectionString = "Server=DNN_NAME,DNN_PORT;Integrated Security=true;Initial Catalog=master"
      $Conn.Open()
    
      $Cmd = New-Object System.Data.SqlClient.SqlCommand
      $Cmd.Connection = $Conn
      $Cmd.CommandText = "SELECT SERVERPROPERTY('ServerName')"
    
      $Adapter = New-Object System.Data.SqlClient.SqlDataAdapter $Cmd
      $Data = New-Object System.Data.DataSet
      $Adapter.Fill($Data) | Out-Null
      $Data.Tables[0] + (Get-Date -Format "MM/dd/yyyy HH:mm:ss")
    
      Start-Sleep -Seconds 2
    }
    

    DNN_NAME は DNN リスナー名に、DNN_PORT は DNN リスナー ポートに置き換えます。

    このスクリプトは、2 秒ごとに可用性グループ リスナーを使用して SQL Server に接続し、サーバー名を照会します。

    スクリプトを実行したままにします。

  3. node-1 のリモート デスクトップ セッションに戻り、フェイルオーバーをトリガーします。

    1. SQL Server Management Studio で、[Always On High Availability] > [Availability Groups] > [bookshelf-ag (Primary)] に移動し、ノードを右クリックします。
    2. [フェイルオーバー] を選択します。
    3. [Select new primary replica] ページで、node-2 が新しいプライマリ レプリカとして選択され、[Failover readiness] 列に No data loss が表示されていることを確認します。[Next] を選択します。
    4. [Connect to replica] ページで、[Connect] を選択します。
    5. [Connect to server] ダイアログで、サーバー名が node-2 であることを確認し、[Connect] をクリックします。
    6. [Next]、[Finish] の順に選択します。
    7. [結果] ページで、フェイルオーバーが成功したことを確認します。
  4. witness の PowerShell セッションに戻ります。

  5. 実行中のスクリプトの出力を確認して、フェイルオーバーの結果として、サーバー名が node-1 から node-2 に変更されたことを確認します。

  6. Ctrl+C を押してスクリプトを停止します。

クリーンアップ

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

プロジェクトの削除

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

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

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

次のステップ