複数サブネットの Always On 可用性グループとフェールオーバー クラスター インスタンスを構成する

適用対象:SQL Server - Linux

Always On 可用性グループ (AG) またはフェールオーバー クラスター インスタンス (FCI) が複数のサイトにまたがっているとき、通常、各サイトには独自のネットワークがあります。これは多くの場合、各サイトに独自の IP アドレス指定があることを意味します。

たとえば、サイト A のアドレスが 192.168.1.<x>から開始し、サイト B のアドレスが 192.168.2.<x> から開始します (<x> はサーバー固有の IP アドレスの一部)。 ネットワーク層で何らかのルーティングが行われていない場合、これらのサーバーは相互に通信できません。

このシナリオに対処するには、2 つの方法があります。

  • 2 つの異なるサブネット (VLAN と呼ばれます) を橋渡しするネットワークを設定する
  • サブネット間のルーティングを構成する

VLAN ベースのソリューション

前提条件:VLAN ベースのソリューションの場合、適切な可用性を確保するには、AG または FCI に参加する各サーバーに 2 枚のネットワーク カード (NIC) が必要です (デュアル ポート NIC は物理サーバー上の単一障害点になります)。これにより、IP アドレスをネイティブ サブネットだけでなく、VLAN 上のサブネットにも割り当てられるようになります。 この要件に加えて、他のネットワーク ニーズもあります (同じく独自のネットワークを必要とする iSCSI など)。

AG または FCI 用の IP アドレスの作成は、VLAN で実行されます。 次の例では、VLAN のサブネットは 192.168.3.<x> であるため、AG または FCI に作成される IP アドレスは 192.168.3.104 です。 1 つの IP アドレスが AG または FCI に割り当てられているため、その他の構成は必要ありません。

Diagram showing how to configure multiple subnets with VLAN.

Pacemaker を使用した構成

Windows では、Windows Server フェールオーバー クラスター (WSFC) が複数のサブネットをネイティブでサポートし、IP アドレスに対して OR 依存関係を使用して複数の IP アドレスを処理します。 Linux では OR 依存関係はありませんが、Pacemaker でネイティブに適切なマルチサブネットを実現する方法があります。ただし、通常の Pacemaker コマンド ラインは使用できません。 代わりに、クラスター情報ベース (CIB) を変更する必要があります。 CIB は、Pacemaker 構成の XML ファイルです。

Diagram showing how to configure multiple subnets with Pacemaker.

CIB を更新する

  1. CIB をエクスポートします。

    sudo pcs cluster cib <filename>
    

    ここで、<filename> は CIB に付ける名前です。

  2. 生成されたファイルを編集します。 <resources> セクションを探します。 AG または FCI に対して作成された、さまざまなリソースが表示されます。 IP アドレスに関連付けられたものを探します。 2 番目の IP アドレスの情報を含む <instance_attributes> セクションを、既存のセクションの前か後のいずれか、ただし <operations> の前に追加します。 構文は次のようになります。

    <instance_attributes id="<NameForAttribute>">
        <nvpair id="<NameForIP>" name="ip" value="<IPAddress>"/>
    </instance_attributes>
    

    <NameForAttribute> はこの属性の一意の名前、<NameForIP> は IP アドレスに関連付けられている名前、<IPAddress> は 2 つ目のサブネットの IP アドレスです。

    次に例を示します。

    <instance_attributes id="virtualip-instance_attributes">
        <nvpair id="virtualip-instance_attributes-ip" name="ip" value="192.168.1.102"/>
    </instance_attributes>
    

    既定では、エクスポートされた CIB XML ファイルには <instance_attributes /> が 1 つだけあります。 サブネットが 2 つある場合は、2 つの <instance_attributes /> エントリが必要です。

    2 つのサブネットのエントリのサンプルを、次に示します。

    <instance_attributes id="virtualip-instance_attributes1">
        <rule id="Subnet1-IP" score="INFINITY" boolean-op="or">
            <expression id="Subnet1-Node1" attribute="#uname" operation="eq" value="Node1" />
            <expression id="Subnet1-Node2" attribute="#uname" operation="eq" value="Node2" />
        </rule>
        <nvpair id="IP-In-Subnet1" name="ip" value="192.168.1.102"/>
    </instance_attributes>
    <instance_attributes id="virtualip-instance_attributes2">
        <rule id="Subnet2-IP" score="INFINITY">
            <expression id="Subnet2-Node1" attribute="#uname" operation="eq" value="Node3" />
        </rule>
        <nvpair id="IP-In-Subnet2" name="ip" value="192.168.2.102"/>
    </instance_attributes>
    

    サブネットに複数のサーバーがあるときに boolean-op="or" を使用します。

  3. 変更した CIB をインポートし、Pacemaker を再構成します。

    sudo pcs cluster cib-push <filename>
    

    ここで、<filename> は、変更した IP アドレス情報を含む CIB ファイルの名前です。

フェールオーバーを確認して検証する

  1. CIB が更新済みの構成に正常に適用されたら、Pacemaker で IP アドレス リソースに関連付けられている DNS 名に対して ping を実行します。 これは、現在 AG または FCI をホストしているサブネットに関連付けられた IP アドレスを反映する必要があります。

  2. AG または FCI を他のサブネットにフェールオーバーします。

  3. AG または FCI が完全にオンラインになったら、IP アドレスに関連付けられている DNS 名に対して ping を実行します。 これは、2 番目のサブネットの IP アドレスを反映する必要があります。

  4. 必要であれば、AG または FCI を元のサブネットにフェールオーバーします。