株式会社ヴァンデミックシステム

Blog

<スポンサーリンク>

MySQLのレプリケーション方式である非同期型レプリケーションについて勉強したので自分なりにまとめてみたぞ。

① クラアイント(アプリケーション)からMasterノードにコミット実行
② コネクションスレッドが、データへの書き込み&バイナリログへの書き込みを実行(どちらか片方のみ実行されるということはない(原始性保証))
③ ②が正常終了したことをクライアントへ応答する
※①-③はMasterノードで一貫されて行われる動作
④ SlaveのI/Oスレッドがバイナリログの更新情報を受け取る
⑤ I/Oスレッドがリレーログに書き込む
⑥ SQLスレッドがリレーログを読み込む
⑦ SQLスレッドがリレーログを読み取った順にデータへ書き込んでいく

なので、非同期型レプリケーションはMySQLのデフォルトであるものの、Masterノードがクラッシュした場合、それがコミットしたトランザクションがスレーブに転送しきれずにいる場合もあり得る。
Pacemaker/Corosyncなどでのクラスタリング環境にて、Masterノードへのコミットが常時行われている状態でのフェイルオーバーはデータロストの危険性がある。
このデータロストを担保するためには、準同期レプリケーションを採用するという手がある。
準同期レプリケーションでは、クライアントからのコミットをMasterノードで一旦完結させずに、Slaveのリレーログへの書き込みが完了した時点で、応答を返す。
データの一貫性は非同期型よりも勝っているが、毎回Slaveからの応答を待つため、その分がオーバーヘッドになり単純な反応速度は非同期型に劣る。

<スポンサーリンク>

コメントを残す

Allowed tags:  you may use these HTML tags and attributes: <a href="">, <strong>, <em>, <h1>, <h2>, <h3>
Please note:  all comments go through moderation.

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)