LifeKeeper+MySQLで冗長構成を組む場合のリソース依存関係

MySQLのレプリケーションを構成して、マスターをLifeKeeperで冗長化して、スレーブはLifeKeeperで管理している仮想IPに対してレプリケーションを組んでいる環境でのハナシ。

通常、MySQLレプリケーション構成時にマスターがダウンすると、スレーブはこのようなメッセージと共に、即座にコネクションが切断される。

mysql> 081210 20:16:15 [Note] Slave: received end packet from server, apparent master shutdown:
081210 20:16:15 [Note] Slave I/O thread: Failed reading log event, reconnecting to retry, log 'h-bin.000028' at postion 192
081210 20:16:15 [ERROR] Slave I/O: error reconnecting to master 'rep@172.20.100.113:3306' - retry-time: 60 retries: 86400, Error_code: 2013

mysqladmin shutdownなどでマスターを停止すると、停止処理の中に、コネクション切断も入っている。


ただし、LifeKeeperのMySQLリソースとIPリソースの依存関係によっては、即座にコネクションが切断されない場合がある。

IPリソースを最上位に持ってくると、フェールオーバーしても、古いTCP/IPコネクションが維持されたまま(Established)となって非常によろしくない。
さらに、LifeKeeperでフェールオーバーしても、フェールオーバー先のマスターのMySQLに接続しない。

(LifeKeeperのGUI経由でのみ発生する問題だったので、IPリソースを落としてからMySQLリソースを落とす、という順番に問題がある模様。ただし、この場合もslave_net_timeout=30などで対処は可能。リレーログがさくさくローテートしてしまうけど、運用上は問題ないはず。)

セオリー通り、MySQLリソースを最上位に持ってくれば、問題ないハズ。(未だ試せてない。来週試す予定。)