mysql半同期レプリケーションの概要-semisync


mysqlの半同期レプリケーション-semisyncは、デフォルトの非同期レプリケーションと完全同期レプリケーションの間であり、masterがクライアントからコミットされたトランザクションを実行した後、すぐにクライアントに戻るのではなく、少なくとも1つのslaveが受信され、relay logに書き込まれてからクライアントに戻るのを待っています.非同期レプリケーションに比べてsemisyncはデータのセキュリティを向上させるが、完全同期よりもパフォーマンスが良いため、masterとslaveの間の時間はsemisyncの失敗を防ぐために一致しなければならない.mysqlの半同期レプリケーションのプラグインはGoogleが無料で提供したmysqlの$basedir/lib/pluginの下に対応するダイナミックライブラリファイルがあり、linuxでは.so,DOSシステムでは.dllは、デフォルトではmysqlはsemisyncをマウントしていないプラグインなので、semisyncを作成するにはmysqlのshellに手動でプラグインをマウントする必要があります.以下、mysqlのsemisync構成について簡単に説明します.ここではmysqlのsuperユーザーを使用して構成することに注意し、mysqlは5.5以上のバージョンがあり、非同期レプリケーションがある上で構成することができます.
#master 

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.00 sec)
mysql> show global variables like '%semi%';                            
+------------------------------------+-------+
| Variable_name                      | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled       | OFF   | 
| rpl_semi_sync_master_timeout       | 10000 | 
| rpl_semi_sync_master_trace_level   | 32    | 
| rpl_semi_sync_master_wait_no_slave | ON    | 
+------------------------------------+-------+
4 rows in set (0.01 sec)
mysql> set global rpl_semi_sync_master_enabled = 1;#  master  semisync,      ,      rpl_semi_sync_master_timeout     ,       
Query OK, 0 rows affected (0.00 sec)
mysql> show status like '%Rpl_semi_sync%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     | 
| Rpl_semi_sync_master_net_avg_wait_time     | 565   | 
| Rpl_semi_sync_master_net_wait_time         | 3391  | 
| Rpl_semi_sync_master_net_waits             | 6     | 
| Rpl_semi_sync_master_no_times              | 1     | 
| Rpl_semi_sync_master_no_tx                 | 12    | 
| Rpl_semi_sync_master_status                | ON    | 
| Rpl_semi_sync_master_timefunc_failures     | 0     | 
| Rpl_semi_sync_master_tx_avg_wait_time      | 588   | 
| Rpl_semi_sync_master_tx_wait_time          | 3528  | 
| Rpl_semi_sync_master_tx_waits              | 6     | 
| Rpl_semi_sync_master_wait_pos_backtraverse | 0     | 
| Rpl_semi_sync_master_wait_sessions         | 0     | 
| Rpl_semi_sync_master_yes_tx                | 6     | 
+--------------------------------------------+-------+
14 rows in set (0.00 sec)

#slave 

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';       
Query OK, 0 rows affected (0.00 sec)

mysql> show global variables like '%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | OFF   |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.00 sec)
mysql> set global rpl_semi_sync_slave_enabled = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> stop slave IO_THREAD;start slave IO_THREAD;#  slave  IO  
Query OK, 0 rows affected (0.09 sec)

Query OK, 0 rows affected (0.00 sec)
mysql> show status like '%Rpl_semi_sync%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+
1 row in set (0.00 sec)

このような簡単なsemisyncが構成されています.ここで注意したいのは、masterがタイムアウト時間を超えてslaveのメッセージを受信しなかった場合、自動的に非同期レプリケーションに移行することです.もちろん、semisyncを必要としない場合は、対応するプラグインを直接uninstallすることができます.
mysql> uninstall plugin rpl_semi_sync_master;
Query OK, 0 rows affected (0.00 sec)
mysql> uninstall plugin rpl_semi_sync_slave;
Query OK, 0 rows affected (0.00 sec)