2011年6月6日月曜日

RDSのフェイルオーバーに関する注意点

スズキです。

RDSはMulti-AZで利用していると、たまにフェイルオーバーしています。

フェールオーバーしたかどうかの確認は、
下記のように"AWS Management Console"で確認することができます。


もちろんAPI(DescribeEvents)でも確認できます。APIのドキュメントを確認すると、
イベントログが保存される期間は、14日のようです。(CloudWatchと同じです)

非常に便利な機能なのですが、一つ注意点があります。

RDSがフェイルオーバーするということは、
RDSが別ゾーンに切り替わってしまうということです。

パフォーマンスを考慮して、バッチ処理を行うようなEC2インスタンスとRDSを
あえて同じゾーンにしていた場合は、別ゾーンになってしまうと、パフォーマンス的に
困ってしまうことになります。

例えば、大量の連続したトランザクションを処理する場合には、
通信のレイテンシーが非常に大きく影響してしまうので、
同一AZの場合とAZをまたいだ場合では、数字の上では1ms未満と
数ms程度の小さい差ですが、最終的には大きな差が生じてしまいます。

すぐに元のゾーンにフェイルバックしてくれれば良いのですが、
実際はフェールバックすることはなく、もう一度フェイルオーバーするまでは
元のゾーンには戻らないようです。

ということで、上記のような用途の場合では、やはり、
フェイルオーバーの通知が欲しいところです。

先ほどチラっと紹介したAPI(DescribeEvents)を定期的に実行し確認することで
通知することはできるはずです。

また、Multi-AZでフェイルオーバーした際には、必ずDNSの書き換えが発生する
とのことなので、RDSのFQDNを解決した際に得られるAレコードを監視して、
変更された場合にはフェイルオーバーした、と確認し通知することもできます。

というのをNagios(のプラグイン)でチェックすると下記のようになります。
("nslookup"が必要なので"bind-utils"のインストールもしています)

# yum install bind-utils
# /usr/lib/nagios/plugins/check_dns -H suzlab.xxxxxxxx.ap-northeast-1.rds.amazonaws.com -a xxx.xxx.xxx.xxx
DNS OK: 0.126 seconds response time. suzlab.xxxxxxxx.ap-northeast-1.rds.amazonaws.com returns xxx.xxx.xxx.xxx|time=0.125635s;;;0.000000
# /usr/lib/nagios/plugins/check_dns -H suzlab.xxxxxxxx.ap-northeast-1.rds.amazonaws.com -a yyy.yyy.yyy.yyy
DNS CRITICAL - expected 'yyy.yyy.yyy.yyy' but got 'xxx.xxx.xxx.xxx'

今週は"AWS Summit"だ!
--------
http://www.suz-lab.com

0 コメント: