MySQLをチューニング,そしてスケールアップ/スケールアウトへ

第8回 MySQLのレプリケーション構成

この記事を読むのに必要な時間:およそ 3.5 分

MySQLの準同期レプリケーション

準同期レプリケーションでは,バイナリログの内容がスレーブに渡りリレーログに書き込まれてからアプリケーションにコミットの応答を返します。このため仮にアプリケーションがコミットの応答を受け取った直後にマスターに障害が発生したとしても,コミットが成功したトランザクション内容を失うことはありません。一方でマスターとスレーブが別のデータセンターに置かれている構成などでネットワークのレイテンシが大きい場合などには,コミット時のレスポンスタイムに大きな影響が出ます。

準同期レプリケーションを利用するためには,マスターおよびスレーブのそれぞれに準同期レプリケーションのプラグインをインストールする必要があります。

参考URL
17.3.8.2 Semisynchronous Replication Installation and Configuration

MySQLの準同期レプリケーションでは,以下の流れとなっています。

  • 0) スレーブのIOスレッドがマスターに接続
  • 1) アプリケーションがトランザクションをコミット
  • 2) データとバイナリログ(Binlog)が同時に変更
  • 3) IOスレッドがバイナリログの内容を受け取りスレーブのリレーログにコピー
  • 4) スレーブがマスターにコピー完了の応答
  • 5) MySQLサーバがアプリケーションにコミット完了の応答
  • 6) スレーブのSQLスレッドがリレーログにコピーされた内容をデータに反映

図2 準同期レプリケーションの流れ

図2 準同期レプリケーションの流れ

準同期の流れの4),5)の各応答と6)のスレーブでのデータ変更は一連の処理になっておらず,実行されるのはこの順番とは限らず応答中にデータ変更が進むこともあります。

MySQL 5.6の準同期レプリケーションでは,全てのスレーブが応答するか,いずれかのスレーブから応答がない場合はサーバパラメタrpl_semi_sync_master_timeoutで指定したタイムアウトになってから,アプリケーションに応答します。MySQL 5.7では,上記のタイムアウト以外に新しいパラメタのrpl_semi_sync_master_wait_for_slave_countで指定した台数(デフォルトでは1)のスレーブから応答があった時点でアプリケーションが応答する仕組みが加わっています。

表1 MySQLのレプリケーションの方式による特色

非同期型 準同期型
応答性能 マスターでの処理のみを待つ マスターでの処理とスレーブへのコピーを待つ
耐障害性 低い。スレーブへのコピー前にマスターに障害が発生するとコミットが成功したトランザクションを失う 非同期型よりも高い
用途 耐障害性はクラスタリングなど他の方法で担保されている場合のスケールアウト構成
ディザスタリカバリ構成
簡易的な高可用性構成

非同期レプリケーションと準同期レプリケーションは同一のレプリケーション構成の中で混在させることができるため,データを保護するためにスレーブのうち1台を準同期レプリケーションとし,他のスレーブは非同期レプリケーションで参照処理の負荷分散を行うという構成を構築することが可能です。これによって応答性能への影響を最小限に抑えながら,耐障害性を持った構成とすることができます。

レプリケーションのフォーマット

実際にはレプリケーションのフォーマットではなく,バイナリログをどの形式で記録するかによって,レプリケーションでコピーされるものが変わって来ます。

参考URL
17.1.2 Replication Formats

表2 MySQLのレプリケーションのフォーマットによる特色

文ベース 行ベース ミックス
binlog_formatの値 STATEMENT ROW MIXED
バイナリログ内容 データおよびスキーマ定義を変更したSQL文 変更後のデータ注1 基本は文ベース,特定の関数や変数の利用があった場合は行ベース注2
データ量 大(注3
主な制約 非決定性の(nondeterministic)関数は不整合の可能性あり注4 トリガーの利用不可 N/A
注1)
MySQL 5.6ではbinlog_rows_query_log_eventsを有効にするとデータ以外に該当の変更を行ったSQL文をあわせて記録する。
注2)
行ベースで記録される条件は下記URLを参照:5.2.4.3 Mixed Binary Logging Format
注3)
MySQL 5.6ではbinlog_row_imageをminimalに設定すると主キーと変更があった列のみを記録する。デフォルトは行全体を記録するfullとなっている。
注4)
文ベースでマスターとスレーブで不整合が発生する可能性のある関数等は次のURLを参照:17.1.2.1 Advantages and Disadvantages of Statement-Based and Row-Based Replication

SUPER権限を持っているユーザは,SETコマンドにてサーバ全体または接続中のセッションのバイナリログフォーマットを一時的に変更可能です。

参考URL
5.2.4.2 Setting The Binary Log Format

著者プロフィール

梶山隆輔

MySQL Sales Consulting Senior Manager。

日本オラクル(株)において,MySQLのお客様環境への導入支援や製品の技術解説を担当するセールスコンサルタントチームのアジア太平洋地域リーダー。多国籍なMySQL部門にて,オーストラリア,インド,台湾などに在籍するチームメンバーを束ね,アジア太平洋地域の25以上の国や地域でのMySQL普及やビジネスの拡大をミッションとする。