チュートリアル: Linux Virtual Machines で可用性グループ リスナーを構成する

適用対象:Azure VM 上の SQL Server

このチュートリアルでは、Red Hat Enterprise Linux (RHEL)、SUSE Linux Enterprise Server (SLES)、および Ubuntu を対象に、Azure の Linux Virtual Machines (VM) で SQL Server の可用性グループ リスナーを作成する手順について説明します。

学習内容は次のとおりです。

  • Azure portal でロード バランサーを作成する
  • ロード バランサーのバックエンド プールを構成する
  • ロード バランサーのプローブを作成する
  • 負荷分散規則を設定する
  • クラスターにロード バランサー リソースを作成する
  • AG リスナーを作成する
  • リスナーへの接続をテストする
  • フェールオーバーをテストする

Note

バイアスフリーなコミュニケーション

この記事には、この文脈で使用した場合に不快感を与えると Microsoft が考える slave (スレーブ、奴隷) という用語の言及が含まれています。 これはソフトウェアに現在表示されるものであるため、この記事に出現します。 ソフトウェアからこの用語が削除された時点で、この記事から削除します。

前提条件

Azure Portal でロード バランサーを作成する

次の手順では、「ロード バランサーと可用性グループ リスナーの構成 (Azure VM 上の SQL Server)」の記事の「Azure portal でロード バランサーを作成および構成する」セクションの手順 1 から 4 を実行します。

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

  1. Azure ポータルで、SQL Server の仮想マシンを含んだリソース グループを開きます。

  2. リソース グループで、 [追加] を選択します。

  3. ロード バランサーを探し、検索結果から [ロード バランサー] (Microsoft によって発行されたもの) を選択します。

  4. [Load Balancer] ペインで、[作成] を選択します。

  5. [ロード バランサーの作成] ダイアログボックスで、次のようにロード バランサーを構成します。

    設定
    名前 ロード バランサーを表すテキスト名 たとえば、sqlLB のようにします。
    Type 内部
    仮想ネットワーク 作成された既定の仮想ネットワークには、VM1VNET という名前が設定されているはずです。
    サブネット SQL Server インスタンスが存在するサブネットを選択します。 既定値は VM1Subnet である必要があります。
    IP アドレスの割り当て 静的
    プライベート IP アドレス クラスター内に作成された virtualip IP アドレスを使用します。
    サブスクリプション 対象のリソース グループに使用したサブスクリプションを使用します。
    リソース グループ SQL Server インスタンスが存在するリソース グループを選択します。
    場所 Azure において SQL Server インスタンスが存在する場所を選択します。

バックエンド プールを構成する

Azure では、バックエンド アドレス プールを "バックエンド プール" と呼んでいます。 この例では、AG に含まれる 3 つの SQL Server インスタンスのアドレスがバックエンド プールとなります。

  1. リソース グループで、作成したロード バランサーを選択します。

  2. [設定] で、[バックエンド プール] を選択します。

  3. [バックエンド プール][追加] を選択してバックエンド アドレス プールを作成します。

  4. [バックエンド プールの追加][名前] に、バックエンド プールの名前を入力します。

  5. [関連付け先] で、 [仮想マシン] を選択します。

  6. 環境内の各仮想マシンを選択し、適切な IP アドレスを各選択項目に関連付けます。

    Screenshot showing how to add a backend pool.

  7. [追加] を選択します。

プローブを作成する

このプローブで定義された方法で、現在どの SQL Server インスタンスが AG リスナーを所有しているかが Azure によって確認されます。 Azure は、プローブの作成時に定義されたポートで、IP アドレスに基づいてサービスをプローブします。

  1. ロード バランサーの [設定] ウィンドウで [正常性プローブ] を選択します。

  2. [正常性プローブ] ペインで [追加] を選択します。

  3. [プローブの追加] ウィンドウで、プローブを構成します。 次の値を使用してプローブを構成します。

    設定
    名前 プローブを表すテキスト名 たとえば、SQLAlwaysOnEndPointProbe のようにします。
    プロトコル TCP
    ポート 空いている任意のポートを使用できます たとえば、59999 のようにします。
    間隔 5
    異常のしきい値 2
  4. [OK] を選択します。

  5. すべての仮想マシンにサインインし、次のコマンドを使用してプローブ ポートを開きます。

    sudo firewall-cmd --zone=public --add-port=59999/tcp --permanent
    sudo firewall-cmd --reload
    

Azure はこのプローブを作成、使用して、どの SQL Server インスタンスが AG のリスナーを所有しているかを判定します。

負荷分散規則を設定する

負荷分散規則を使って、ロード バランサーでトラフィックを SQL Server インスタンスにルーティングする方法を構成します。 3 つの SQL Server インスタンスのうち AG リスナー リソースを所有できるのは一度に 1 つだけであるため、このロード バランサーでは Direct Server Return を有効にします。

  1. ロード バランサーの [設定] ウィンドウで [負荷分散規則] を選択します。

  2. [負荷分散規則] ペインで、[追加] を選択します。

  3. [負荷分散規則の追加] ウィンドウで、負荷分散規則を構成します。 次の設定を使用します。

    設定
    名前 負荷分散規則を表すテキスト名。 たとえば、SQLAlwaysOnEndPointListener のようにします。
    プロトコル TCP
    ポート 1433
    バックエンド ポート 1433. この規則には [フローティング IP (Direct Server Return)] が使用されるため、この値は無視されます。
    プローブ このロード バランサーに対して作成したプローブの名前を使用します。
    セッション永続化 なし
    アイドル タイムアウト (分) 4
    フローティング IP (ダイレクト サーバー リターン) Enabled

    Screenshot showing how to add a load balancing rule.

  4. [OK] を選択します。

  5. 負荷分散規則が Azure によって構成されます。 以上、AG のリスナーのホストとなっている SQL Server インスタンスにトラフィックをルーティングするようにロード バランサーを構成しました。

この時点で、リソース グループのロード バランサーがすべての SQL Server マシンに接続されています。 またロード バランサーには、AG への要求にすべてのマシンが応答できるよう、SQL Server Always On AG リスナーの IP アドレスが格納されます。

可用性グループ リスナー リソースを作成する

Pacemaker でロード バランサー リソースを作成する前に、まずリスナー リソースを作成します。

sudo crm configure primitive virtualip \
ocf:heartbeat:IPaddr2 \
params ip=x.y.z.a

前の例では、x.y.z.a はロード バランサーのフロントエンド IP アドレスを参照しています。

クラスターにロード バランサー リソースを作成する

構成しているディストリビューションの手順に従います。

  1. プライマリ仮想マシンにログインします。 Azure ロード バランサーのプローブ ポートを有効にするには、リソースを作成する必要があります (この例では 59999 が使用されています)。 次のコマンドを実行します。

    sudo pcs resource create azure_load_balancer azure-lb port=59999
    
  2. virtualip および azure_load_balancer リソースを含むグループを作成します。

    sudo pcs resource group add virtualip_group azure_load_balancer virtualip
    

制約を追加する

  1. Azure ロード バランサーの IP アドレスと AG リソースが同じノードで実行されるように、コロケーション制約を構成する必要があります。 次のコマンドを実行します。

    sudo pcs constraint colocation add azure_load_balancer ag_cluster-master INFINITY with-rsc-role=Master
    
  2. 順序制約を作成して、Azure ロード バランサーの IP アドレスよりも前に AG リソースが稼働するようにします。 コロケーション制約により順序制約が暗黙に示されますが、これによって適用されます。

    sudo pcs constraint order promote ag_cluster-master then start azure_load_balancer
    
  3. 制約を確認するには、次のコマンドを実行します。

    sudo pcs constraint list --full
    

    次の出力が表示されます。

    Location Constraints:
    Ordering Constraints:
      promote ag_cluster-master then start virtualip (kind:Mandatory) (id:order-ag_cluster-master-virtualip-mandatory)
      promote ag_cluster-master then start azure_load_balancer (kind:Mandatory) (id:order-ag_cluster-master-azure_load_balancer-mandatory)
    Colocation Constraints:
      virtualip with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-virtualip-ag_cluster-master-INFINITY)
      azure_load_balancer with ag_cluster-master (score:INFINITY) (with-rsc-role:Master) (id:colocation-azure_load_balancer-ag_cluster-master-INFINITY)
    Ticket Constraints:
    

可用性グループ リスナーを作成する

  1. プライマリ ノードで、sqlcmd または SSMS で次のコマンドを実行します。 以下で使用されている IP アドレスを virtualip の IP アドレスに置き換えてください。

    • SQL Server 2022 以降のバージョン:

      ALTER AVAILABILITY GROUP [ag1]
      ADD LISTENER 'ag1-listener' (
          WITH IP((
              '10.0.0.7',
              '0.0.0.0'
          )),
          PORT = 1433
      );
      GO
      
    • SQL Server 2017 および SQL Server 2019:

      ALTER AVAILABILITY GROUP [ag1]
      ADD LISTENER 'ag1-listener' (
          WITH IP((
              '10.0.0.7',
              '255.255.255.255'
          )),
          PORT = 1433
      );
      GO
      
  2. 各 VM ノードにログインします。 次のコマンドを使用して hosts ファイルを開き、各マシンで ag1-listener のホスト名解決を設定します。

    sudo vi /etc/hosts
    

    vi エディターで、テキストを挿入するために「i」と入力します。空白行に、ag1-listener の IP アドレスを追加します。 次に、IP アドレスの後にスペースを入れ、ag1-listener を追加します。

    <IP of ag1-listener> ag1-listener
    

    vi エディターを終了するには、まず Esc キーを押し、コマンド :wq を入力してファイルを書き込み、終了します。 これを各ノードで行います。

リスナーとフェールオーバーをテストする

このセクションでは、SQL Server AG リスナーへのログインとフェールオーバーのテストについて説明します。

可用性グループ リスナーを使用して SQL Server へのログインをテストする

  1. sqlcmd を使用し、AG リスナー名を使用して SQL Server のプライマリ ノードにログインします。

    • 以前に作成したログインを使用し、<YourPassword> を適切なパスワードに置き換えます。 次の例では、SQL Server で作成された sa ログインを使用します。
    sqlcmd -S ag1-listener -U sa -P <YourPassword>
    
  2. 接続先のサーバーの名前を確認します。 sqlcmd で次のコマンドを実行します。

    SELECT @@SERVERNAME;
    

    出力には、現在のプライマリ ノードが表示されます。 フェールオーバーを一度もテストしたことがない場合、これは VM1 になります。

    exit コマンドを入力して、SQL Server セッションを終了します。

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

  1. 次のコマンドを実行して、プライマリ レプリカを <VM2> または別のレプリカに手動でフェールオーバーします。 <VM2> は、実際のサーバー名の値に置き換えてください。

    sudo pcs resource move ag_cluster-master <VM2> --master
    
  2. 制約を確認すると、手動フェールオーバーが理由で別の制約が追加されたことがわかります。

    sudo pcs constraint list --full
    

    ID cli-prefer-ag_cluster-master の制約が追加されたことがわかります。

  3. 次のコマンドを使用して、ID が cli-prefer-ag_cluster-master の制約を削除します。

    sudo pcs constraint remove cli-prefer-ag_cluster-master
    
  4. コマンド sudo pcs resource を使用してクラスター リソースを確認すると、プライマリ インスタンスが <VM2> になっていることがわかります。

    Note

    この記事には、Microsoft が使用しなくなった "スレーブ" という用語への言及が含まれています。 ソフトウェアからこの用語が削除された時点で、この記事から削除します。

    [<username>@<VM1> ~]$ sudo pcs resource
    Master/Slave Set: ag_cluster-master [ag_cluster]
        Masters: [ <VM2> ]
        Slaves: [ <VM1> <VM3> ]
    Resource Group: virtualip_group
        azure_load_balancer        (ocf::heartbeat:azure-lb):      Started <VM2>
        virtualip  (ocf::heartbeat:IPaddr2):       Started <VM2>
    
  5. sqlcmd を使用し、リスナー名を使用してプライマリ レプリカにログインします。

    • 以前に作成したログインを使用し、<YourPassword> を適切なパスワードに置き換えます。 次の例では、SQL Server で作成された sa ログインを使用します。
    sqlcmd -S ag1-listener -U sa -P <YourPassword>
    
  6. 接続先のサーバーを確認します。 sqlcmd で次のコマンドを実行します。

    SELECT @@SERVERNAME;
    

    これで、フェールオーバー先の VM に接続していることがわかります。

次のステップ

SQL Server インスタンスで可用性グループ リスナーを利用するには、ロード バランサーを作成し、構成する必要があります。