今回は、先日書籍(Amazon Web Servicesクラウドデザインパターン設計ガイド)が発売された
Cloud Design Pattern(CDP)の記事になります。
「Amazon Web Services 温泉ハッカソン ~熱海湯けむり 第1夜~」の成果物として、未完成の
「Routing-Based HAパターン」を完成するため、下図のルーティングの切り替えでAZ間を(自動で)
フェイルオーバーする仕組みをCorosync & Pacemakerで試してみました。
ルーティングを変更してAZ間でフェイルオーバーする仕組みに関しては、@c9katayamaさんが
下記の記事で詳しく説明されています。
基本的に同様の手順で構築しているため、ポイントを環境構築に絞り紹介します。
○フェイルオーバー対象の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に変わるため、レイテンシーが高くなっていることも
確認できます。