今回は、先日書籍(Amazon Web Servicesクラウドデザインパターン設計ガイド)が発売された
Cloud Design Pattern(CDP)の記事になります。

Amazon Web Services 温泉ハッカソン ~熱海湯けむり 第1夜~」の成果物として、未完成の
Routing-Based HAパターン」を完成するため、下図のルーティングの切り替えでAZ間を(自動で)
フェイルオーバーする仕組みをCorosync & Pacemakerで試してみました。

ルーティングを変更してAZ間でフェイルオーバーする仕組みに関しては、@c9katayamaさんが
下記の記事で詳しく説明されています。

VPCでアベイラビリティゾーン越しにプライベートIPを共有する(Source/Descチェック外し)

基本的に同様の手順で構築しているため、ポイントを環境構築に絞り紹介します。

○フェイルオーバー対象のEC2(XXX1/XXX2)はSource/Dest. Checkを無効にしておく

○ルートテーブルに仮想IP(192.168.1.1)に対するターゲットを上記のEC2(のどちらか)にしたものを追加する
(ここではXXX1にしています)

○フェイルオーバー対象のEC2(XXX1/XXX2)の仮想インターフェース(lo:0)に仮想IP(192.168.1.1)を割り当てる

はじめは何も割り当てられていません。

# ifconfig lo:0
lo:0 Link encap:Local Loopback
UP LOOPBACK RUNNING MTU:16436 Metric:1

設定ファイルを準備

# cat /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.1.1
NETMASK=255.255.255.255
NETWORK=192.168.1.1
ONBOOT=yes

ネットワークをリスタート

# service netowrk restart
インターフェース eth0 を終了中: [ OK ]
ループバックインターフェースを終了中 [ OK ]
ループバックインターフェイスを呼び込み中 [ OK ]
インターフェース eth0 を活性化中:
eth0 のIP情報を検出中... 完了。
[ OK ]

仮想IP(192.168.1.1)が割り当てられます。

# ifconfig lo:0
lo:0 Link encap:Local Loopback
inet addr:192.168.1.1 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:16436 Metric:1

この状態で、任意のEC2から192.168.1.1に対してPingが通れば、問題ありません。
AWSマネジメントコンソールでルートテーブルの192.168.1.1/32のターゲットをもう一つのEC2(XXX2)に
変更してもPingは通り続けるはずです。

さらにCorosync & Pacemakerで自動的にファイルオーバーする仕組みですが、以前紹介した方法
High Availability NATの作成(CentOS6)」と、ほぼ同様となります。

今回は「corosyncとpacemakerの導入と設定」をして、「フェイルオーバー時のRoute Tableの変更設定」まで
実施します。
(「iptablesのモニタリングとフェイルオーバーの設定」は本稿では扱っていません)

フェイルオーバーに使うスクリプト(associate-nat)も基本的に同じですが、初期設定ファイルの部分が、
下記のように変更対象となるルートテーブルのCIDRを指定する必要もあります。

# cat /etc/sysconfig/associate-nat
ROUTE_TABLE_ID=rtb-xxxxxxxx
DESTINATION_CIDR=192.168.1.1/32

下記のように設定します。

# crm configure property no-quorum-policy="ignore" stonith-enabled="false"
# crm configure rsc_defaults resource-stickiness="INFINITY" migration-threshold="1"
# crm configure primitive associate-nat lsb:associate-nat

アクテイブな方のcorosyncをストップ(service corosync stop)すると、フェイルオーバーしていることが
確認できます。

# crm_mon
============
Last updated: Sat Feb 9 17:14:30 2013
Last change: Sat Feb 9 17:13:38 2013 via cibadmin on ip-10-0-0-192
Stack: openais
Current DC: ip-10-0-1-86 - partition WITHOUT quorum
Version: 1.1.7-6.el6-148fccfd5985c5590cc601123c6c16e966b85d14
2 Nodes configured, 2 expected votes
1 Resources configured.
============

Online: [ ip-10-0-1-86 ]
OFFLINE: [ ip-10-0-0-192 ]

associate-nat (lsb:associate-nat): Started ip-10-0-1-86

フェイルオーバ時の停止時間もほとんどありませんでした。

# ping 192.168.1.1
...
64 bytes from 192.168.1.1: icmp_seq=72 ttl=64 time=0.385 ms
64 bytes from 192.168.1.1: icmp_seq=73 ttl=64 time=0.349 ms
64 bytes from 192.168.1.1: icmp_seq=74 ttl=64 time=0.318 ms
64 bytes from 192.168.1.1: icmp_seq=75 ttl=64 time=2.28 ms
64 bytes from 192.168.1.1: icmp_seq=76 ttl=64 time=2.27 ms
64 bytes from 192.168.1.1: icmp_seq=77 ttl=64 time=2.25 ms
...

フェイルオーバーすると、同じAZのEC2が他のAZのEC2に変わるため、レイテンシーが高くなっていることも
確認できます。

こちらの記事はなかの人(suz-lab)監修のもと掲載しています。
元記事は、こちら