2009-11-11 (Wed)
実録、ほぼ無停止なMySQLのフェイルオーバ (動画もあるよ)
レプリケーションしてるMySQLで、マスタやスレーブが障害停止した場合のリカバリプラン でも掲げたゴールである、「マスタが落ちてもぐーすか寝ていられるようにしたい」がほぼできたので、ほとんどサービスが停止することなく、フェイルオーバする様をスクリーンキャストに収めました。
埋め込みプレイヤーだと、小さくてわからないと思うので、リンク直接でみてください。
http://www.irori.org/pub/mysql-mm.mov登場するホスト
登場するホストは2台、db901とdb902です。
最初は、db901が更新系クエリを受けるプライマリでdb900の浮動IPアドレスを持っています。
画面分割
画面は5分割しています。
- 左上 = 「select sysdate(),@@server_id」をdb900に対して(sleep 1しながら)延々と実行しまくりんぐ
- 右上 = ping -n db900
- 右下の2つ = 上のが ping -n db901、下のが ping -n db902
- 左下 = db901を落とそうと待ち構えているターミナル
動画の解説
- 00:00
- はじまりはじまり。db900に対するselect、db900,db901,db902に対するping、すべて正常に流れている。selectのserver_idは、db901のものである「901」が返ってきているのを覚えておいてください。
- 00:11
- この時点でのプライマリでもあるdb901を強制終了する。強制終了には SysRq を使ってバルスっと落とす (# echo b > /proc/sysrq-trigger)
- 00:12
- db901が停止したので、db901に対するpingがとまる。db901はdb900でもあったので、db900に対するpingとdb900に対するselectも止まる。
- 00:17
- 首尾よくフェイルオーバが完了し、db902がdb900となったので、db900に対するpingとdb900に対するselectが回復(server_idが「901」から「902」に変わっている点に注目!)した。yay!
フェイルオーバのメカニズム
今回のケースでは、停止から 5 秒後には、
- 異常の検知
- プライマリのフェイルオーバ
が完了しています。
フェイルオーバのメカニズムは、レプリケーションしてるMySQLで、マスタやスレーブが障害停止した場合のリカバリプラン の 「<セカンダリをプライマリに昇格>」に書いた通りなんですが、監視とこのフェイルオーバ処理の実装は、
- keepalived --vrrp
- MySQLのL7レベルの監視をするスクリプト (check-service.db)
- 状態変更時にもろもろの処理をするスクリプト (trigger-vrrp.db)
- keepalived.confのnotifyや、check-service.db から実行される
で行ってます。
あとがき
これでお正月は安心しておもちがたべられそうです ^ρ^
トラックバック - http://d.hatena.ne.jp/hirose31/20091111/1257942168
2003 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 05 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 12 |
2012 | 01 | 02 |



