====== Semi-Synchronous Replication ====== [[os:centos:mysql:replication|標準レプリケーション]]の設定が済んでいるものとします。 * Slaveが落ちると自動で通常の非同期レプリケーションに切り替わる * 切り替わるまでの待ち時間はrpl_semi_sync_master_timeout ===== Master側の設定 ===== プラグインインストール mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; 確認 mysql> show plugins; +--------------------------+----------+--------------------+--------------------+---------+ | Name | Status | Type | Library | License | +--------------------------+----------+--------------------+--------------------+---------+ | rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL | +--------------------------+----------+--------------------+--------------------+---------+ LOGの書き出しがコミット単位になっているか確認 mysql> show variables like 'innodb_flush_log_at_trx_commit'; +--------------------------------+-------+ | Variable_name | Value | +--------------------------------+-------+ | innodb_flush_log_at_trx_commit | 1 | +--------------------------------+-------+ /etc/my.cnf で [mysqld] の中に下記を追加 rpl_semi_sync_master_enabled=1 <= 準同期レプリケーションを有効に rpl_semi_sync_master_timeout=100 <= 更新時、SLAVEが応答しない時のタイムアウト時間を0.1秒に設定 MySQLを再起動して、設定が反映しているか確認 mysql> show variables like '%semi%'; +------------------------------------+-------+ | Variable_name | Value | +------------------------------------+-------+ | rpl_semi_sync_master_enabled | ON | <= | rpl_semi_sync_master_timeout | 100 | | rpl_semi_sync_master_trace_level | 32 | | rpl_semi_sync_master_wait_no_slave | ON | <= +------------------------------------+-------+ Status mysql> SHOW STATUS LIKE "rpl%"; +--------------------------------------------+-------------+ | Variable_name | Value | +--------------------------------------------+-------------+ | Rpl_semi_sync_master_clients | 1 | | Rpl_semi_sync_master_net_avg_wait_time | 0 | | Rpl_semi_sync_master_net_wait_time | 0 | | Rpl_semi_sync_master_net_waits | 0 | | Rpl_semi_sync_master_no_times | 0 | | Rpl_semi_sync_master_no_tx | 0 | | Rpl_semi_sync_master_status | ON | <=SemiSyncで動作 | Rpl_semi_sync_master_timefunc_failures | 0 | | Rpl_semi_sync_master_tx_avg_wait_time | 0 | | Rpl_semi_sync_master_tx_wait_time | 0 | | Rpl_semi_sync_master_tx_waits | 0 | | Rpl_semi_sync_master_wait_pos_backtraverse | 0 | | Rpl_semi_sync_master_wait_sessions | 0 | | Rpl_semi_sync_master_yes_tx | 0 | | Rpl_status | AUTH_MASTER | +--------------------------------------------+-------------+ ===== Slave側の設定 ===== 同期停止 mysql> STOP SLAVE; プラグインインストール mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; 確認 mysql> show plugins; +--------------------------+----------+--------------------+--------------------+---------+ | Name | Status | Type | Library | License | +--------------------------+----------+--------------------+--------------------+---------+ | rpl_semi_sync_slave | ACTIVE | REPLICATION | semisync_slave.so | GPL | +--------------------------+----------+--------------------+--------------------+---------+ LOGの書き出しがコミット単位になっているか確認 mysql> show variables like 'innodb_flush_log_at_trx_commit'; +--------------------------------+-------+ | Variable_name | Value | +--------------------------------+-------+ | innodb_flush_log_at_trx_commit | 1 | +--------------------------------+-------+ /etc/my.cnf で [mysqld] の中に下記を追加 rpl_semi_sync_slave_enabled=1 <= 準同期レプリケーションスレーブ動作を有効に MySQLを再起動して、同期再開 mysql> START SLAVE; ===== 参照 ===== [[http://nippondanji.blogspot.jp/2009/03/mysql-ha-semi-synchronous-replication.html|漢(オトコ)のコンピュータ道]]