レプリケーション ( 2 )

August 06, 2018

レプリケーションを構成するスレッド

以下の図におけるスレッドについて記載する。

f:id:shiro_kochi:2018××××××××:plain:w100:left

マスタースレッド

MySQL のレプリケーションでは、マスターがサーバでスレーブがクライアントという関係になっており、レプリケーションのための接続は、スレーブからマスターという形となる。
そのため、マスター上ではスレーブがログインするためのアカウントが必要であり、権限として REPLICATOIN SLAVE を付与しておく必要がある。スレーブが複数存在するとスレーブの数に応じたマスタースレッドが生成される。

マスタースレッドの役割は「バイナリログを読み取ってスレーブへ送る」ことである。スレーブがログインした際に、マスターにバイナリログを送信するように指示を出すことで、マスターはバイナリログの送信を開始する。

スレーブがマスターへバイナリログの送信を依頼するコマンドは COMBINLOGDUMP もしくは COMBINLOGDUMP_GTID となる。
前者はバイナリログファイル名とポジションによって、後者は GTID によってバイナリログ送信のポジションを決定する。

スレーブ I/O スレッド

スレーブ I/O スレッドは 2 種類あるスレーブのスレッドのうちの1つであり、以下を行う。

  • マスターへ接続し、COMBINLOGDUMP / COMBINLOGDUMP_GTID コマンドを発行
  • マスターから連続的に更新を受け取る
  • 受け取った更新データをリレーログと呼ばれる更新ファイルに保存する

リレーログのフォーマットはバイナリログとまったく同様であり、受け取ったデータを右から左へと書き込んでいく。
リレーログにもバイナリログ同様、インデックスファイルが存在する。リレーログの中身を見るには SHOW RELAYLOG EVENTS を使う。

スレーブ SQL スレッド

スレーブ SQL スレッドは、リレーログから更新の差分を読み取り、スレーブ上で再生するためのスレッド。SQL スレッドとも呼ばれ、IO スレッドに比べてこちらの方が処理量が多く、遅延が生じがち。
Second Behid Master (SBM) の原因は SQL スレッドの性能不足である。MySQL 5.7 では SQL スレッドのスループットを向上させるための機能が追加されている。


 © 2023, Dealing with Ambiguity