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'