PHP勉強会2nd
DBの負荷分散が参考になったので、ちょいまとめる。
MySQL分散処理
レプリケーションについて- MySQL5.5からSemiSyncReplication(準同期レプリケーション)
業務ではMySQL5.4なので、非同期レプリケーションですから
セッションまわりの同期がうまくとれなくて参ったってなことがあったが、
これならうまくいきそう。
相変わらず、スレーブに書き込まれてるかどうかの保証はないですがね。
- 非同期レプリケーションの動き
- マスターが更新クエリをバイナリログに記録
- スレーブが更新をチェックし、マスターからスレーブにBログ転送
- スレーブで更新クエリ実行
- 準同期レプリケーションの動き
- マスターは更新クエリを受け取ったときにBログをスレーブに転送
- Bログを受け取ったスレーブはマスターにレスポンスを返してからコミット。
しかもマスターはスレーブからのレスを一定時間まつ。
(レスがなければスレーブ無視してコミットする)
これによってほとんど齟齬が生じる可能性が低いようだ。
(リレーログ云々もあったけど全然わかってないw)
- メリット
- サーバー故障時にもデータが転送されていることが保障される。
- コミット動作がリレーログ書き込みまで保証してる。遅延がすくない。
- デメリット
- コミット動作がながくなってしまうので、書き込み速度が劣る。
- 負荷分散
死活監視させるために、
Keepalived(MISC)を使うといいらしい。
(Keepalivedとかつかったことない。。)
- Keepalived(MISC_CHECK)でスレーブに設置したWEBページをチェック
- 問題なければバランシングとして追加。
- たとえば遅延があったりした場合はバランシングからはずすなども可能。