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 とともに次の IP アドレス構成を使用します。

  • インスタンス名: cluster-sql1
    • 内部 IP アドレス: 10.0.0.4
    • Windows フェイルオーバー クラスタの名前: cluster-ag
    • フェイルオーバー クラスタの IP アドレス: 10.0.0.5(エイリアス IP)
    • 可用性グループの名前: cluster-listener
    • 可用性グループ リスナーのアドレス: 10.0.0.6(エイリアス IP)
  • インスタンス名: cluster-sql2
    • 内部 IP アドレス: 10.1.0.4
    • Windows フェイルオーバー クラスタの名前: cluster-ag
    • フェイルオーバー クラスタの IP アドレス: 10.1.0.5(エイリアス IP)
    • 可用性グループの名前: cluster-listener
    • 可用性グループ リスナーのアドレス: 10.1.0.6(エイリアス IP)

以下のいずれかの方法を使用して 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 \
--network-interface "subnet=wsfcsubnet1,private-network-ip=10.0.0.4,aliases=10.0.0.5;10.0.0.6" \
--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 \
--network-interface "subnet=wsfcsubnet2,private-network-ip=10.1.0.4,aliases=10.1.0.5;10.1.0.6" \
--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
    

    このコマンドでは、認証情報が要求されます。コマンドの実行が完了したら、インスタンスが再起動します。

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

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

可用性グループのインスタンスでフェイルオーバー クラスタリングを有効にし、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.0.5" #IP address of cluster in subnet 1
      
      PS C:\> $ipWSFC2 = "10.1.0.5" #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.0.6
    • 10.1.0.0/1610.1.0.6

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

次のステップ

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

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

Compute Engine ドキュメント