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'

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