2013年2月9日土曜日

"Corosync & Pacemaker"で"Routing-Based HAパターン"

スズキです。

下記で未完成の「Routing-Based HAパターン」を完成するために、
Amazon Web Services 温泉ハッカソン 〜熱海湯けむり 第1夜〜
実際に下図のルーティングの切り替えで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が通れば、OKです。
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に変わるので、レイテンシーが
高くなっていることも確認できます。

ということで、温泉入って「Routing-Based HAパターン」書きます。
--------
http://www.suz-lab.com

0 コメント: