次の方法で共有


ワークグループ可用性グループを構成する

適用対象:Azure VM 上の SQL Server

この記事では、Always On 可用性グループを使用して Active Directory ドメインに依存しないクラスターを作成するために必要な手順について説明します。ワークグループ クラスターとも呼ばれます。 この記事では、ワークグループと可用性グループの準備と構成に関連する手順について説明します。 他の記事で説明されているクラスターの作成方法や可用性グループのデプロイ方法などの手順は省略されています。

前提条件

ワークグループ可用性グループを構成するには、次の前提条件が必要です。

  • 静的 IP アドレスを使用して同じ可用性セットまたは異なる可用性ゾーンにデプロイされている、SQL Server 2016 (またはそれ以降) を実行中の 2 台以上の Windows Server 2016 (またはそれ以降) の仮想マシン。
  • サブネット上に少なくとも 4 つの空き IP アドレスを持つローカル ネットワーク。
  • SQL Server 内で sysadmin 権限も持っている管理者グループ内の各コンピューターのアカウント。
  • 開いているポート: TCP 1433、TCP 5022、TCP 59999。

参考までに、この記事では次のパラメーターを使用しますが、必要に応じて変更できます。

名前 パラメーター
Node1 AGNode1 (10.0.0.4)
Node2 AGNode2 (10.0.0.5)
[Cluster name](クラスター名) AGWGAG (10.0.0.6)
リスナー AGListener (10.0.0.7)
DNS サフィックス ag.wgcluster.example.com
ワークグループ名 AGWorkgroup

DNS サフィックスを設定する

この手順では、両方のサーバーの DNS サフィックスを構成します。 たとえば、「 ag.wgcluster.example.com 」のように入力します。 この設定では、接続するオブジェクトの名前を、ネットワーク内の完全修飾アドレス ( AGNode1.ag.wgcluster.example.com など) として使用できます。

DNS サフィックスを構成するには、次の手順に従います。

  1. Bastion を使用して最初のノードに接続し、サーバー マネージャーを開きます。

  2. [ローカル サーバー] を選択した後、 [コンピューター名] から仮想マシンの名前を選択します。

  3. [To rename this computer...](このコンピューターの名前を変更するには...) の下の [変更...] を選択します。

  4. ワークグループ名を意味のあるもの (AGWORKGROUPなど) に変更します。

    [ワークグループ] が選択され、[AGWORKGROUP] という名前が入力された [コンピューター名/Doman の変更] ダイアログ ボックスを示すスクリーンショット。

  5. [詳細...] を選択して、 [DNS サフィックスと NetBIOS コンピューター名] ダイアログ ボックスを開きます。

  6. など、ag.wgcluster.example.com名前を入力し、[OK] を選択します

    ag.wgcluster.example.com という値が入力された [DNS サフィックスと NetBIOS コンピューター名] ダイアログ ボックスを示すスクリーンショット。

  7. [フル コンピューター名] に DNS サフィックスが表示されていることを確認した後、 [OK] を選択して変更を保存します。

    [完全なコンピューター名] が強調表示されている [コンピューター名/Doman の変更] ダイアログ ボックスを示すスクリーンショット。

  8. サーバーの再起動を求められたら、サーバーを再起動します。

  9. 可用性グループに使用する他のすべてのノードで、これらの手順を繰り返します。

ホスト ファイルを編集する

この構成には Active Directory がないため、Windows 接続を認証する方法はありません。 そのため、テキスト エディターでホスト ファイルを編集することで信頼を割り当てます。

ホスト ファイルを編集するには、次の手順を実行します。

  1. Bastion を使用して仮想マシンに接続します。

  2. エクスプローラーを使用して、c:\windows\system32\drivers\etc に移動します。

  3. hosts ファイルを右クリックし、メモ帳 (またはその他のテキスト エディター) を使用してファイルを開きます。

  4. ファイルの末尾に、次のように、各ノード、可用性グループ、およびリスナーのエントリを IP Address, DNS Suffix #comment の形式で追加します。

    10.0.0.4 AGNode1.ag.wgcluster.example.com #Availability group node
    10.0.0.5 AGNode2.ag.wgcluster.example.com #Availability group node
    10.0.0.6 AGWGAG.ag.wgcluster.example.com #Cluster IP
    10.0.0.7 AGListener.ag.wgcluster.example.com #Listener IP
    

    メモ帳の hosts ファイルのスクリーンショット。新しい各ノードの IP アドレス、クラスター、リスナーの新しいエントリがファイルの末尾に追加されます。

アクセス許可を設定する

アクセス許可を管理する Active Directory がないため、組み込みでないローカル管理者アカウントにクラスターの作成を手動で許可する必要があります。

これを行うには、すべてのノードの管理 PowerShell セッションで次の PowerShell コマンドレットを実行します。

new-itemproperty -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -Name LocalAccountTokenFilterPolicy -Value 1

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

この手順では、フェールオーバー クラスターを作成します。 手順に慣れていない場合は、 フェールオーバー クラスターのチュートリアルの「Windows フェールオーバー クラスターの作成」を参照してください。

フェールオーバー クラスターのチュートリアルとワークグループ クラスターに対して実行する必要がある作業の主な違い:

  • クラスターの検証を実行するときに、 [ストレージ][記憶域スペース ダイレクト] をオフにします。

  • ノードをクラスターに追加するときは、次のような完全修飾名を追加します。

    • AGNode1.ag.wgcluster.example.com
    • AGNode2.ag.wgcluster.example.com
  • [使用可能な記憶域をすべてクラスターに追加する] をオフにします。

クラスターが作成されたら、静的クラスター IP アドレスを割り当てます。 これを行うには、次のステップに従います。

  1. いずれかのノードでフェールオーバー クラスター マネージャーを開き、クラスターを選択し、[クラスター <] で [名前: >ClusterNameを右クリックし、[プロパティ] を選択します。

  2. [IP アドレス] から IP アドレスを選択し、 [編集] を選択します。

  3. [静的を使用] を選択し、クラスターの IP アドレスを指定した後、 [OK] を選択します。

    クラスターの静的 IP アドレスを編集する方法を示すスクリーンショット。

  4. 設定が正しく表示されていることを確認し、 [OK] を選択して保存します。

    確認用のクラスター のプロパティを示すスクリーンショット。

クラウド監視を作成する

この手順では、クラウド共有監視を構成します。 この手順がよくわからない場合は、「フェールオーバー クラスターのクラウド監視を展開する」参照してください。

可用性グループ機能を有効にする

この手順では、可用性グループ機能を有効にします。 この手順に慣れていない場合は、可用性グループのチュートリアルを参照してください。

キーと証明書を作成する

この手順では、SQL ログイン時に暗号化されたエンドポイントで使用される証明書を作成します。 証明書のバックアップを保持するフォルダーを各ノードに作成します (c:\certs など)。

証明書の有効期限を指定しない場合は、作成日から 1 年間有効です。 証明書の有効期限が切れると、エンドポイント間の接続ができなくなります。

最初のノードを構成するには、次の手順に従います。

  1. SQL Server Management Studio を開き、最初のノード (AGNode1 など) に接続します。

  2. [新しいクエリ] ウィンドウを開き、複雑でセキュリティが強化されたパスワードに更新した後、次の Transact-SQL (T-SQL) ステートメントを実行します。

    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'PassWOrd123!';
    GO
    
    --create a cert from the master key
    USE master;
    CREATE CERTIFICATE AGNode1Cert
       WITH SUBJECT = 'AGNode1 Certificate';
    GO
    
    --Backup the cert and transfer it to AGNode2
    BACKUP CERTIFICATE AGNode1Cert TO FILE = 'C:\certs\AGNode1Cert.crt';
    GO
    
  3. 次に、HADR エンドポイントを作成し、次の Transact-SQL (T-SQL) ステートメントを実行することで、認証に証明書を使用します。

    --CREATE or ALTER the mirroring endpoint
    CREATE ENDPOINT hadr_endpoint
       STATE = STARTED
       AS TCP (
          LISTENER_PORT=5022
          , LISTENER_IP = ALL
       )
       FOR DATABASE_MIRRORING (
          AUTHENTICATION = CERTIFICATE AGNode1Cert
          , ENCRYPTION = REQUIRED ALGORITHM AES
          , ROLE = ALL
       );
    GO
    
  4. エクスプローラーを使用して、証明書があるファイルの場所 (c:\certs など) に移動します。

  5. 最初のノードから証明書のコピーを手動で作成し (AGNode1Cert.crt など)、それを 2 番目のノードの同じ場所に転送します。

2 番目のノードを構成するには、次の手順に従います。

  1. SQL Server Management Studio を使用して 2 番目のノード (AGNode2 など) に接続します。

  2. [新しいクエリ] ウィンドウで、複雑でセキュリティが強化されたパスワードに更新した後、次の Transact-SQL (T-SQL) ステートメントを実行します。

    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<complex password>';
    GO
    
    --create a cert from the master key
    USE master;
    CREATE CERTIFICATE AGNode2Cert
       WITH SUBJECT = 'AGNode2 Certificate';
    GO
    --Backup the cert and transfer it to AGNode1
    BACKUP CERTIFICATE AGNode2Cert TO FILE = 'C:\certs\AGNode2Cert.crt';
    GO
    
  3. 次に、HADR エンドポイントを作成し、次の Transact-SQL (T-SQL) ステートメントを実行することで、認証に証明書を使用します。

    --CREATE or ALTER the mirroring endpoint
    CREATE ENDPOINT hadr_endpoint
       STATE = STARTED
       AS TCP (
          LISTENER_PORT=5022
          , LISTENER_IP = ALL
       )
       FOR DATABASE_MIRRORING (
          AUTHENTICATION = CERTIFICATE AGNode2Cert
          , ENCRYPTION = REQUIRED ALGORITHM AES
          , ROLE = ALL
       );
    GO
    
  4. エクスプローラーを使用して、証明書があるファイルの場所 (c:\certs など) に移動します。

  5. 2 番目のノードからの証明書のコピーを手動で作成し (AGNode2Cert.crt など)、それを最初のノードと同じ場所に転送します。

クラスターに他のノードがある場合は、それぞれの証明書の名前を変更しながら、これらの手順を繰り返します。

ログインを作成する

ノード間でデータを同期するために証明書認証が使用されます。 同期を許可するには、もう一方のノードのログインを作成し、ログイン用のユーザーを作成し、バックアップされた証明書を使用するログインの証明書を作成してから、ミラーリング エンドポイントで接続を許可します。

これを行うには、最初のノード (AGNode1 など) で、まず次の Transact-SQL (T-SQL) クエリを実行します。

--create a login for the AGNode2
USE master;
CREATE LOGIN AGNode2_Login WITH PASSWORD = '<complex password>';
GO

--create a user from the login
CREATE USER AGNode2_User FOR LOGIN AGNode2_Login;
GO

--create a certificate that the login uses for authentication
CREATE CERTIFICATE AGNode2Cert
   AUTHORIZATION AGNode2_User
   FROM FILE = 'C:\certs\AGNode2Cert.crt'
GO

--grant connect for login
GRANT CONNECT ON ENDPOINT::hadr_endpoint TO [AGNode2_login];
GO

次に、2 番目のノード (AGNode2 など) で、次の Transact-SQL (T-SQL) クエリを実行します。

--create a login for the AGNode1
USE master;
CREATE LOGIN AGNode1_Login WITH PASSWORD = '<complex password>';
GO

--create a user from the login
CREATE USER AGNode1_User FOR LOGIN AGNode1_Login;
GO

--create a certificate that the login uses for authentication
CREATE CERTIFICATE AGNode1Cert
   AUTHORIZATION AGNode1_User
   FROM FILE = 'C:\certs\AGNode1Cert.crt'
GO

--grant connect for login
GRANT CONNECT ON ENDPOINT::hadr_endpoint TO [AGNode1_login];
GO

クラスターに他のノードがある場合は、それぞれの証明書とユーザーの名前を変更しながら、これらの手順を繰り返します。

可用性グループを構成する

この手順では、可用性グループを構成して、そこにデータベースを追加します。 現時点ではリスナーを作成しないでください。 この手順に慣れていない場合は、可用性グループのチュートリアルを参照してください。 すべてが正常に動作していることを確認するには、必ずフェールオーバーとフェールバックを開始してください。

同期プロセス中にエラーが発生した場合は、 NT AUTHORITY\SYSTEM アカウント の sysadmin 権限を一時的に付与して、 AGNode1などのクラスター リソースを最初のノードに作成することが必要になる場合があります。

ロード バランサーを構成する

この最後の手順では、 Azure portal または PowerShell を使用してロード バランサーを構成します。

ただし、Windows クラスター GUI を使用する 場合は、いくつかの制限があります。 そのため、PowerShell を使用して、次のサンプル スクリプトを使用して、クライアント アクセス ポイントまたはリスナーのネットワーク名を作成する必要があります。

Add-ClusterResource -Name "IPAddress1" -ResourceType "IP Address" -Group "WGAG"
Get-ClusterResource -Name IPAddress1 | Set-ClusterParameter -Multiple @{"Network" = "Cluster Network 1";"Address" = "10.0.0.4";"SubnetMask" = "255.0.0.0";"EnableDHCP" = 0}
Add-ClusterResource -Name "IPAddress2" -ResourceType "IP Address" -Group "WGAG"
Get-ClusterResource -Name IPAddress2 | Set-ClusterParameter -Multiple @{"Network" = "Cluster Network 2";"Address" = "10.0.0.5";"SubnetMask" = "255.0.0.0";"EnableDHCP" = 0}
Add-ClusterResource -Name "TestName" -Group "WGAG" -ResourceType "Network Name"
Get-ClusterResource -Name "TestName" | Set-ClusterParameter -Multiple @{"DnsName" = "TestName";"RegisterAllProvidersIP" = 1}
Set-ClusterResourceDependency -Resource TestName -Dependency "[IPAddress1] or [IPAddress2]"
Start-ClusterResource -Name TestName -Verbose

プローブ ポートの構成

Azure Load Balancer を使用して仮想ネットワーク名 (VNN) リソースをサポートする場合は、正常性プローブ要求に応答するようにクラスターを構成する必要があります。 正常性プローブがバックエンド インスタンスから応答を取得できない場合、正常性プローブが再び成功するまで、そのバックエンド インスタンスに新しい接続は送信されません。

PowerShell でプローブ ポート パラメーターを設定するには、該当する IP アドレス リソースごとに次のスクリプトを 1 回使用します。

$ClusterNetworkName = "<MyClusterNetworkName>" # The cluster network name. Use Get-ClusterNetwork on Windows Server 2012 or later to find the name.
$IPResourceName = "<IPResourceName>" # The IP address resource name.
[int]$ProbePort = <nnnnn> # The probe port that you configured in the health probe of the load balancer for a given Frontend IP Address. Any unused TCP port is valid.

Import-Module FailoverClusters

Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$IPResourceName";"ProbePort"=$ProbePort;"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}

行った変更は、IP アドレス リソースがオフラインになって再びオンラインになるまで有効になりません。 この変更を有効にするには、リソースのフェールオーバーを実行します。

クラスター プローブを設定したら、次の PowerShell スクリプトを使用してクラスター パラメーターを確認します。

Get-ClusterResource $IPResourceName | Get-ClusterParameter

動的ポート範囲からポートを除外する

49,152 ~ 65,536 ( TCP/IP の既定の動的ポート範囲) の正常性プローブ ポートを使用する場合は、すべての VM で各正常性プローブ ポートの除外を追加します。

ポートの除外を構成すると、他のシステム プロセスに VM 上の同じポートが動的に割り当てられるのを防ぐことができます

ポートの除外を設定するには、次の PowerShell スクリプトを使用します。

  • 各ヘルスプローブのポートごとに
  • すべての VM で
[int]$ProbePort = <nnnnn> # The probe port that you configured in the health probe of the load balancer. Any unused TCP port is valid.

netsh int ipv4 add excludedportrange tcp startport=$ProbePort numberofports=1 store=persistent

除外が正しく構成されていることを確認するには、次のコマンドを使用します。

netsh int ipv4 show excludedportrange tcp