MHA+Haproxy フェイルオーバーとマスターの切戻し

MHA + Haproxy で Mysql冗長化するための方法は
いろいろなところで書いてあるので、考え方をメモ

1)概要

アプリからDBへアクセスさせるさいにHaproxyを経由させる。
HaproxyはマスターとスレーブのDBへリクエストを転送する。
MHAはDBを監視し、マスターが停止した場合、自動もしくは特定DBへ
マスターのDBを切替、スレーブの参照元DBを切替、Haproxyの
マスターDBの接続先を切り替える。

2)機能の役割分担

MHA役割
 MySQLの死活監視
 MySQLのマスターの切替え
 MySQLのバイナリログの新マスターへの連携
 MySQLのスレーブの参照元マスターの切替え
 各切替タイミングのスクリプト実行
 →アプリの接続先切替:停止時、オンライン手動、フェイルオーバーレポート

Haproxy役割
 アプリのDBへの接続先制御
 MySQLのスレーブの死活監視

独自スクリプトでやること
 アプリの接続先DBの制御(Haproxyの設定切替、VIPの設定切替)
 フェイルオーバーのレポート配信
 (レポート内容は自動生成される、どこに飛ばすか)

3)ポイント

フェイルオーバーは自動的に行われるように作成
フェイルオーバー時に、DBをスレーブにするためのbinlogとpositionはログに出力
旧マスタをスレーブにするさいは、上記のbinlogとpositionを設定するのみ
元々のDBにマスタを戻すさいもコマンドが準備されているので実行後
出力されたログのbinlogとpositionを元に、スレーブとして再開すればよい