SQL Server 可用性グループの設定

Compute Engine で複数の SQL Server Enterprise インスタンスを実行している場合、Windows Server Failover Clustering と SQL Server AlwaysOn の可用性グループを使用して、高可用性と災害復旧がサポートされるようにインスタンスを設定できます。

このチュートリアルでは、必要なネットワーク設定を行って SQL Server Enterprise でインスタンスのクラスタを作成し、Windows Server Failover Clustering と SQL Server AlwaysOn 可用性グループが使用されるようにそれらのインスタンスを設定する方法について説明します。SQL Server 公開イメージまたは Microsoft ライセンス モビリティから作成された SQL Server Enterprise インスタンスを使用できます。

前提条件

このチュートリアルでは、以下を前提としています。

VPC ネットワークの設定

3 つのサブネットを持つカスタムモードの VPC ネットワークを作成します。次に、内部仮想マシン間のトラフィックが許可されるように、ファイアウォール ルールを設定します。必要に応じて、このタスクに既存のネットワークを使用することもできますが、システムは、異なるネットワークとサブネットに分離することをおすすめします。このチュートリアルでは、以下の VPC ネットワークとサブネットワークの構成を作成します。

  1. カスタムモードの VPC ネットワークを作成します。

    gcloud compute networks create wsfcnet --subnet-mode custom
    

  2. 3 つのサブネットを VPC ネットワークに追加します。

    gcloud compute networks subnets create wsfcsubnet1 --network wsfcnet \
    --region us-central1 --range 10.0.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet2 --network wsfcnet \
    --region us-central1 --range 10.1.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet3 --network wsfcnet \
    --region us-central1 --range 10.2.0.0/24
    

  3. 新しい VPC ネットワークで、内部 IP アドレスを持つインスタンス間でのトラフィック転送を許可するファイアウォール ルールを作成します。

    gcloud compute firewall-rules create allow-internal-ports \
    --network wsfcnet --allow tcp:1-65535,udp:1-65535,icmp \
    --source-ranges 10.0.0.0/24,10.1.0.0/24,10.2.0.0/24
    

  4. VPC ネットワーク上のポート 3389 で RDP を許可するファイアウォール ルールを作成します。

    gcloud compute firewall-rules create allow-rdp --network wsfcnet \
    --allow tcp:3389 --source-ranges 0.0.0.0/0
    

Windows ドメイン コントローラの作成

Windows ドメイン コントローラを作成します。このチュートリアルでは、ドメインは dbeng.com、ドメイン コントローラの名前は dc-windows、IP アドレスは 10.2.0.100 です。ドメイン コントローラは wsfcsubnet3 サブネットを使用しています。

  1. ドメイン コントローラとして使用するインスタンスを作成します。必要に応じて、任意のマシンタイプと Windows Server バージョンを指定できます。ドメイン コントローラには小さい n1-standard-1 マシンタイプを使用し、windows-2016 イメージ ファミリーの最新のイメージを指定します。

    gcloud compute instances create dc-windows --machine-type n1-standard-1 \
    --boot-disk-type pd-ssd --image-project windows-cloud \
    --image-family windows-2016 --boot-disk-size 200GB \
    --zone us-central1-f --subnet wsfcsubnet3 --private-network-ip=10.2.0.100
    

  2. RDP を使用してドメイン コントローラのインスタンスに接続します。

  3. インスタンスで、管理者として PowerShell を実行し、PowerShell ターミナルを開きます。

  4. 以下の変数を設定します。

    PS C:> $DomainName = "dbeng.com";
    
    PS C:> $DomainMode = "Win2012R2";
    
    PS C:> $ForestMode = "Win2012R2";
    
    PS C:> $DatabasePath = "C:\Windows\NTDS";
    
    PS C:> $LogPath = "C:\Windows\NTDS";
    
    PS C:> $SysvolPath = "C:\Windows\SYSVOL";
    

  5. 以下の Active Directory ツールをインストールします。

    PS C:> Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
    
    PS C:> Install-ADDSForest -CreateDnsDelegation:$false -DatabasePath $DatabasePath -LogPath $LogPath -SysvolPath $SysvolPath -DomainName $DomainName -DomainMode $DomainMode -ForestMode $ForestMode -InstallDNS:$true -NoRebootOnCompletion:$false -SafeModeAdministratorPassword ((Get-Credential).Password) -Force:$true
    

  6. ドメインが作成された後、インスタンスが自動的に再起動しない場合、インスタンスを手動で再起動してください。

  7. インスタンスが再起動したら、RDP を使用してインスタンスに再接続します。元の資格情報と一致するドメイン資格情報を使用します。

  8. 「Active Directory Users and Computers」を実行し、「Administrator」のパスワードをリセットします。[ユーザーは次回のログオン時にパスワード変更が必要] オプションをオフにしてください。

  9. インスタンスから切断し、Administrator アカウントを使用して再接続します。

  10. 「sql.service」という名前のドメイン アカウントを作成します。これは、SQL Server を実行するために使用されます。[ユーザーは次回のログオン時にパスワード変更が必要] オプションと、[パスワードを無期限にする] オプションはオフにします。

ドメイン コントローラが構成され、dc-windows インスタンスから切断できるようになります。次に、可用性グループのインスタンスを作成します。

可用性グループのインスタンスの作成

可用性グループの SQL Server インスタンスを作成します。これらのインスタンスは、以下の IP アドレス構成を使用します。

  • インスタンス名: cluster-sql1
    • 内部 IP アドレス: 10.0.0.4
    • Windows フェイルオーバー クラスタの名前: cluster-ag
    • フェイルオーバー クラスタの IP アドレス: 10.0.1.4
    • 可用性グループの名前: cluster-listener
    • 可用性グループ リスナーのアドレス: 10.0.1.5
  • インスタンス名: cluster-sql2
    • 内部 IP アドレス: 10.1.0.4
    • Windows フェイルオーバー クラスタの名前: cluster-ag
    • フェイルオーバー クラスタの IP アドレス: 10.1.1.4
    • 可用性グループの名前: cluster-listener
    • 可用性グループ リスナーのアドレス: 10.1.1.5

以下のいずれかの方法を使用して SQL Server インスタンスを作成します。

SQL Server の公開イメージ

公開 SQL Server イメージから 2 つのインスタンスを作成します。この例では、インスタンスに cluster-sql1cluster-sql2 という名前を付けます。ブートディスク サイズとして 200GB を指定し、マシンタイプに n1-highmem-4 を指定します。通常、SQL Server インスタンスではドメイン コントローラのインスタンスよりも多くのコンピューティング リソースが必要になります。後でさらにコンピューティング リソースが必要になった場合、それらのインスタンスのマシンタイプを変更できます。さらにストレージ スペースが必要になった場合、ディスクを追加するか永続ブートディスクのサイズを変更します。より大規模な可用性グループでは、複数のインスタンスを作成できます。

また、インスタンスの作成中に、--metadata sysprep-specialize-script-ps1 フラグを組み込んで PowerShell コマンドを実行し、Failover-Clustering 機能をインストールします。

この例では、以下のコマンドを使用して 2 つのインスタンスを作成します。

gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f --subnet wsfcsubnet1 --private-network-ip=10.0.0.4 \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f --subnet wsfcsubnet2 --private-network-ip=10.1.0.4 \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"

より大規模な可用性グループの場合、該当する IP アドレスを使用してさらにインスタンスを作成できます。

既存のライセンス

ソフトウェア アシュアランスによる Microsoft ライセンス モビリティに基づいて、所有する SQL Server Enterprise のライセンスを移動する場合は、--guestOSFeatures を有効にして Windows イメージを作成します。その後で、SQL Server Enterprise を手動でインストールします。

  1. Windows Server インスタンスを作成します。
  2. このインスタンスで、すべてのコンポーネントを最新バージョンに更新します。
  3. インスタンスのブートディスクの自動削除状態false に設定します。
  4. インスタンスを削除します
  5. 標準 Windows Server イメージを入れる一時ディスクを作成します。

    gcloud compute disks create windows-2012-disk-new --size 200 \
    --zone us-central1-f --type pd-ssd --image-family windows-2012-r2 \
    --image-project windows-cloud
    

  6. この新しいディスクから、guestOSFeatures パラメータで MULTI_IP_SUBNET を有効にしてカスタムの Windows Server イメージを作成します。

    gcloud beta compute images create windows-server-2012-r2-dc-new \
    --source-disk windows-2012-disk-new --source-disk-zone us-central1-f \
    --guest-os-features MULTI_IP_SUBNET
    

  7. イメージを作成したら、一時ディスクを削除します。

    gcloud compute disks delete windows-2012-disk-new --zone us-central1-f
    

  8. カスタム イメージを使用して、可用性グループ用の新しい SQL Server インスタンスを作成します。通常、SQL Server インスタンスではドメイン コントローラのインスタンスよりも多くのコンピューティング リソースが必要になるため、最低でも n1-highmem-4 のマシンタイプを指定します。後でさらにコンピューティング リソースが必要になった場合、それらのインスタンスのマシンタイプを変更できます。さらにストレージ スペースが必要になった場合、ディスクを追加するか永続ブートディスクのサイズを変更します。より大規模な可用性グループでは、複数のインスタンスを作成できます。たとえば、2 つのインスタンスを作成します。

    gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet1 --private-network-ip=10.0.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    

    gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet2 --private-network-ip=10.1.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    

  9. 各インスタンスで、SQL Server Enterprise を手動でインストールします。

インスタンスを作成した後、それらが可用性グループとして機能できるようにインスタンスを構成します。

  1. RDP 接続を使用して両方のインスタンスに接続します。
  2. 両方のインスタンスで、静的 IP アドレスを使用するように構成を変更し、ネットマスクを 255.255.0.0 に設定します。管理者として PowerShell ターミナルを開き、静的 IP アドレスを static に設定します。これらのコマンドを実行すると、リモート デスクトップ接続が終了する場合があります。

    • インスタンス 1:

      PS C:> netsh interface ip set address name=Ethernet static 10.0.0.4 255.255.0.0 10.0.0.1 1
      
      PS C:> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      

    • インスタンス 2:

      PS C:> netsh interface ip set address name=Ethernet static 10.1.0.4 255.255.0.0 10.1.0.1 1
      
      PS C:> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      

  3. 両方のインスタンスを Windows ドメインに追加します。管理者として PowerShell を開き、両方のインスタンスで以下の Add-Computer コマンドを実行します。

    PS C:> Add-Computer -DomainName "dbeng.com" -Credential "dbeng.com\Administrator" -Restart -Force
    

    コマンドにより、資格情報が要求されます。コマンドの実行が完了したら、インスタンスが再起動します。

  4. ローカル ワークステーションで、gcloud routes create コマンドを使用して Windows クラスタと可用性グループ用のルートを追加します。

    gcloud compute routes create cluster-sql1-route --network wsfcnet \
    --destination-range 10.0.1.4/32 --next-hop-instance cluster-sql1 \
    --next-hop-instance-zone us-central1-f --priority 1
    

    gcloud compute routes create cluster-sql2-route --network wsfcnet \
    --destination-range 10.1.1.4/32 --next-hop-instance cluster-sql2 \
    --next-hop-instance-zone us-central1-f --priority 1
    

    gcloud compute routes create cluster-sql1-route-listener --network wsfcnet \
    --destination-range 10.0.1.5/32 --next-hop-instance cluster-sql1 \
    --next-hop-instance-zone us-central1-f --priority 1
    

    gcloud compute routes create cluster-sql2-route-listener --network wsfcnet \
    --destination-range 10.1.1.5/32 --next-hop-instance cluster-sql2 \
    --next-hop-instance-zone us-central1-f --priority 1
    

  5. ルートが適切に作成されていることを確認します。

    gcloud compute routes list --filter="network:wsfcnet"
    

これで、可用性グループ用にインスタンスが作成されました。次に、フェイルオーバー クラスタ マネージャを設定します。

フェイルオーバー クラスタ マネージャの設定

可用性グループのインスタンスでフェイルオーバー クラスタリングを有効にし、1 つのインスタンスがフェイルオーバー クラスタ マネージャとして機能するように設定します。グループ内のすべてのインスタンスで AlwaysOn 高可用性を有効にします。

  1. RDP を使用してインスタンスに再接続しますが、ドメイン管理者の資格情報を使用します。この例では、ドメインは dbeng であり、管理者アカウントは Administrator です。Google Cloud Platform に Chrome RDP を使用している場合、オプション メニューの資格情報リストで、それらのアドレスに対する既存の RDP 資格情報を削除します。

  2. いずれかのインスタンスを選択し、フェイルオーバー クラスタ マネージャとして実行されるようにそのインスタンスを設定します。

    1. 管理者として PowerShell を開き、クラスタ環境を反映するように変数を設定します。この例の場合、以下の変数を設定します。

      PS C:> $node1 = "cluster-sql1"
      
      PS C:> $node2 = "cluster-sql2"
      
      PS C:> $nameWSFC = "cluster-dbclus" #Name of cluster
      
      PS C:> $ipWSFC1 = "10.0.1.4" #IP address of cluster in subnet 1
      
      PS C:> $ipWSFC2 = "10.1.1.4" #IP address of cluster in subnet 2
      

    2. フェイルオーバー クラスタを作成します。

      PS C:> New-Cluster -Name $nameWSFC -Node $node1, $node2 -NoStorage -StaticAddress $ipWSFC1, $ipWSFC2
      

    3. クラスタの両方のノードに対して、AlwaysOn 高可用性を有効にします。

      PS C:> Enable-SqlAlwaysOn -ServerInstance $node1 -Force
      

      PS C:> Enable-SqlAlwaysOn -ServerInstance $node2 -Force
      

  3. クラスタ マネージャが含まれていない 2 番目のインスタンスで、C:\SQLBackup にバックアップ フォルダを作成し、そのフォルダを \\cluster-sql2\SQLBackup として共有します。両方のインスタンスに共有フォルダへのアクセス権がある場合は、共有フォルダに別のロケーションを指定できます。

  4. 両方のインスタンスで、C:\SQLDataC:\SQLLog に 2 つのフォルダを作成します。これらのフォルダはデータベースのデータ用とログファイル用に使用します。

これで、フェイルオーバー クラスタ マネージャの準備が整いました。次に、可用性グループを作成します。

可用性グループの作成

テスト データベースを作成し、新しい可用性グループで機能するようにそれを設定します。あるいは、可用性グループに既存のデータベースを指定することもできます。

  1. まだデータベースが構成されていない場合は、テスト データベースを作成します。クラスタ マネージャのインスタンスで、SQL Server Management Studio を実行し、以下の SQL コマンドでテスト データベースを作成します。

    CREATE DATABASE TestDB
    ON PRIMARY (NAME = 'TestDB_Data', FILENAME='C:\SQLData\TestDB_Data.mdf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    LOG ON (NAME = 'TestDB_Log', FILENAME='C:\SQLLog\TestDB_Log.ldf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    GO
    USE [TestDB]
    Exec dbo.sp_changedbowner @loginame = 'sa', @map = false;
      ALTER DATABASE [TestDB] SET RECOVERY FULL;
      GO
      BACKUP DATABASE TestDB to disk = '\\cluster-sql2\SQLBackup\TestDB.bak' WITH INIT
    GO
    

  2. クラスタ マネージャのインスタンスで、SQL Server Management Studio を実行します。

  3. [AlwaysOn 高可用性] を右クリックし、[新しい可用性グループ ウィザード] を選択します。

  4. [名前を指定] ページで、可用性グループの名前を設定します。この例では、cluster-ag を指定します。

  5. [データベースの選択] ページで、複製するデータベースを指定します。この例では、TestDB データベースを指定します。

  6. [レプリカの指定] ページで、自動フェイルオーバーと同期コミットが組み込まれたレプリカとして両方のインスタンスを設定します。

  7. [データ同期の選択] ページで、初期同期中にデータベースのバックアップが保持されるようにネットワーク共有を指定します。この例では、\\cluster-sql2\SQLBackup を指定します。

  8. リスナーがないため、[検証] ページで警告が発生しますが、この警告は無視できます。

  9. ウィザードが完了したら、新しい可用性グループを右クリックし、[リスナーを追加] を選択します。

  10. このリスナーのパラメータを指定します。

    • リスナーの DNS 名: cluster-listener
    • ネットワーク ポート: 1433
    • ネットワーク モード: Static IP
  11. 2 つのサブネットと IP アドレス フィールドを追加します。この例では、以下のサブネットと IP アドレスのペアを使用します。

    • 10.0.0.0/1610.0.1.5
    • 10.1.0.0/1610.1.1.5

これで、インスタンスの名前ではなく、SQL Server データベースの名前として cluster-listener を使用し、SQL Server に接続できるようになります。この接続は、現在アクティブなインスタンスを指します。

次のステップ

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント