先に結論
MHA for MySQLのデフォルトのヘルスチェックでは、DBの書き込み障害ではフェイルオーバーしない
なんで?
- MHAはヘルスチェックをバラメータ
ping_type
で設定された方法で行う ping_type
のデフォルトはSELECT
ping_type
:SELECT
の場合、ヘルスチェックはSELECT 1 As Value
で行うので、書き込み障害には気づけない
どうすればよいの?
ping_type
:INSERT
の場合、ヘルスチェックはINSERT INTO infra.chk_masterha values (1,unix_timestamp()) ON DUPLICATE KEY UPDATE val=unix_timestamp()"
で行うので、書き込み障害にも気づけるはず
ping_type
: INSERT
の場合の注意事項
- MHA実行ユーザにDBやテーブルの作成権限 or 予めヘルスチェック用のDB&テーブルを作成する必要がある
- MHAは、
infra
というDB(ハードコーディング!) に、chk_masterha
というテーブルを作る SELECT
のときよりオーバーヘッドが発生する
感想
書き込み障害が発生したのに、フェイルオーバーが行われず、めちゃくちゃ焦った
ツールが想定通りの挙動をしなかった場合、公式ドキュメントとコードをじっくり読もう