目次

Semi-Synchronous Replication

標準レプリケーションの設定が済んでいるものとします。

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;

参照

漢(オトコ)のコンピュータ道