Using Failover Manager with virtual IP addresses

フェールオーバーマネージャーはefm_address スクリプトを使用して、仮想IPアドレスを割り当てまたは解放します。

注釈

仮想IPアドレスは、多くのクラウドプロバイダーでサポートされていません。これらの環境では、AWSのElastic IPアドレスなど、フェンシングまたはプロモーション後のスクリプトで必要に応じて変更できる別のメカニズムを使用します。

デフォルトでは、スクリプトは次の場所にあります。

/usr/edb/efm-4.<x>/bin/efm_address

フェールオーバーマネージャーは、次のコマンドバリエーションを使用して、IPv4またはIPv6 IPアドレスを割り当てまたは解放します。

仮想IPv4 IPアドレスを割り当てるには:

#  efm_address add4 <interface_name> <IPv4_addr>/<prefix>

仮想IPv6 IPアドレスを割り当てるには:

#  efm_address add6 <interface_name> <IPv6_addr>/<prefix>

仮想アドレスを解放するには:

#  efm_address del <interface_name> <IP_address/prefix>

そこで:

<interface_name> は、クラスタープロパティファイルのvirtual.ip.interface プロパティで指定された名前と一致します。

<IPv4_addr> または<IPv6_addr> は、クラスタープロパティファイルのvirtual.ip プロパティで指定された値と一致します。

prefix は、クラスタープロパティファイルのvirtual.ip.prefix プロパティで指定された値と一致します。

仮想IPアドレスを記述するプロパティの詳細については、 The cluster properties file を参照してください。

rootユーザーとしてefm_address スクリプトを呼び出します。 efmユーザーはインストール中に作成され、sudoersファイルでefm_address スクリプトを実行する特権が付与されます。 sudoers ファイルの詳細については、 Extending Failover Manager permissions を参照してください。

注釈

VIPアドレスまたは`bind.address` 以外のアドレスがノードに割り当てられている場合、オペレーティングシステムはデータベースへの接続時に使用されるソースアドレスを選択できます。すべての監視対象データベースの`pg_hba.conf` ファイルを変更して、レプリケーションシナリオ内のすべてのアドレスからの連絡を許可してください。

VIPのテスト

フェールオーバーマネージャーで仮想IP(VIP)アドレスを使用する場合、フェールオーバーマネージャーを開始する前にVIP機能を手動でテストすることが重要です。これにより、実際のフェールオーバー中に問題が発生する前に、ネットワーク関連の問題をキャッチします。 VIPのテスト中に、フェールオーバーマネージャーが実行されていないことを確認します。

次の手順では、フェールオーバーマネージャーが実行するアクションをテストします。この例では、次のプロパティ値を使用します。

virtual.ip=172.24.38.239
virtual.ip.interface=eth0
virtual.ip.prefix=24
ping.server.command=/bin/ping -q -c3 -w5

注釈

virtual.ip.prefix は、仮想IPアドレスの有効ビット数を指定します。

ノードからVIPをpingするように指示されたら、 ping.server.command プロパティで定義されたコマンドを使用します。

1.すべてのノードからVIPにpingを実行して、アドレスがまだ使用されていないことを確認します。

# /bin/ping -q -c3 -w5 172.24.38.239
PING 172.24.38.239 (172.24.38.239) 56(84) bytes of data.
--- 172.24.38.239 ping statistics ---
4 packets transmitted, 0 received, +3 errors, 100% packet loss,
time 3000ms

100%のパケット損失が表示されます。 !!!重要 フェールオーバーマネージャーは、 pingコマンドの終了コードを使用して、アドレスに到達可能かどうかを判断します。この場合、終了コードはゼロではありません。 ping以外のコマンドを使用している場合、アドレスに到達できない場合、ゼロ以外の終了コードを返す必要があります。

2.プライマリノードでefm_address add4 コマンドを実行してVIPを割り当て、IPアドレスで確認します。

# efm_address add4 eth0 172.24.38.239/24
# ip address
<output truncated>
eth0 Link encap:Ethernet HWaddr 36:AA:A4:F4:1C:40
inet addr:172.24.38.239 Bcast:172.24.38.255
...

3.他のノードからVIPにpingを実行して、VIPに到達できることを確認します。

# /bin/ping -q -c3 -w5 172.24.38.239
PING 172.24.38.239 (172.24.38.239) 56(84) bytes of data.
--- 172.24.38.239 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 1999ms
rtt min/avg/max/mdev = 0.023/0.025/0.029/0.006 ms

パケットロスは発生しません。 !!!重要 フェールオーバーマネージャーは、 pingコマンドの終了コードを使用して、アドレスに到達可能かどうかを判断します。この場合、終了コードはゼロです。 ping以外のコマンドを使用している場合、アドレスに到達可能な場合、ゼロの終了コードを返す必要があります。

  1. efm_address del コマンドを使用して、プライマリノードのアドレスを解放し、ノードがIPアドレスで解放されたことを確認します。

# efm_address del eth0 172.24.38.239/24
# ip address
eth0 Link encap:Ethernet HWaddr 22:00:0A:89:02:8E
inet addr:10.137.2.142 Bcast:10.137.2.191
...

この手順の出力には、eth0インターフェイスが表示されません。

5.手順3を繰り返します。今回は、スタンバイと監視に使用中のVIPが表示されないことを確認します。

# /bin/ping -q -c3 -w5 172.24.38.239
PING 172.24.38.239 (172.24.38.239) 56(84) bytes of data.
--- 172.24.38.239 ping statistics ---
4 packets transmitted, 0 received, +3 errors, 100% packet loss,
time 3000ms

100%のパケットロスが発生。すべてのノードでこの手順を繰り返します。

  1. すべてのスタンバイノードで手順2を繰り返し、VIPをすべてのノードに割り当てます。任意のノードからVIPにpingを実行して、それが使用中であることを確認できます。

# efm_address add4 eth0 172.24.38.239/24
# ip address
<output truncated>
eth0 Link encap:Ethernet HWaddr 36:AA:A4:F4:1C:40
inet addr:172.24.38.239 Bcast:172.24.38.255
...

これらのテスト手順の後、フェールオーバーマネージャーを起動する前に、非プライマリノードからVIPを解放します。

注釈

VIPに使用されるネットワークインターフェイスは、Failover Managerエージェントの`bind.address` 値に使用されるインターフェイスと同じである必要はありません。プライマリエージェントは、フェールオーバー中に必要に応じてVIPをドロップし、フェールオーバーマネージャーは、スタンバイを昇格する前にVIPが利用できないことを確認します。バインドアドレスネットワークの障害は、一次分離とフェイルオーバーにつながります。

VIPが別のインターフェイスを使用している場合、プライマリエージェントがドロップする前に、残りのクラスターが到達可能なVIPをチェックするタイミング条件が発生する場合があります。この場合、フェールオーバーマネージャーは node.timeout プロパティで指定された秒数だけVIPチェックを再試行して、フェールオーバーが期待どおりに発生することを確認します。