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を元に、スレーブとして再開すればよい