mysql5.5ハーフ同期レプリケーション


一、実験目的:
mysqlはプライマリ・セカンダリ・レプリケーションで半同期レプリケーションもサポートされています.mysqlレプリケーションは非同期です.同期性能が非常に悪いためです.次の操作を行うには、プライマリ・ライブラリがイベントを配布した後、ライブラリからのデータのコピーが終了し、ライブラリから正常な応答が受信されるまで待たなければなりません.非同期モードでライブラリからマスターライブラリに遅れた場合、マスターライブラリは知りません.だからmysql 5.5後にGoogleパッチの半同期レプリケーションを導入し、2つのプラグイン:semisync_master.soとsemisync_slave.so.半同期:プライマリ・マルチスレーブ・アーキテクチャでは、プライマリ・ライブラリが1台のスレーブ・レプリケーションが完了し、正常な応答に戻るのを待つだけで、同期が完了して次の操作が行われると考えられます.これにより、非同期の高速化と同期の安全性が得られます.プライマリ・ライブラリがライブラリからの応答タイムアウトを待機すると、半同期レプリケーションは自動的に非同期レプリケーションにダウングレードされます.半同期レプリケーションは、少なくとも1台のスレーブライブラリとメインライブラリが同じ機械室にあることを前提とし、十分な帯域幅を保証し、データレプリケーションも十分速い.書き込みパフォーマンスに大きな影響を及ぼすため、同期確認待ちが必要です.
二、実験手順
1.mysqlがサポートするモジュール/プラグイン
[root@master~]# ls -t /usr/local/mysql/lib/plugin/
debug  semisync_slave.so  mypluglib.so  qa_auth_interface.so  qa_auth_client.so  adt_null.so daemon_example.ini  semisync_master.so  libdaemon_example.so  qa_auth_server.so  auth_test_plugin.so   auth_socket.so  auth.so

 
2.半同期モジュールの取り付け
2.1メインライブラリ
mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
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   |          
+------------------------------------+-------+
mysql>SET GLOBAL rpl_semi_sync_master_enabled=1;
mysql>SET GLOBAL rpl_semi_sync_master_timeout=1000;
mysql>SHOW GLOBAL STATUS LIKE '%semi%';
+--------------------------------------------+-------+
|Variable_name                              | Value |
+--------------------------------------------+-------+
|Rpl_semi_sync_master_clients              | 1     |    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    |
|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     |
+--------------------------------------------+-------+
mysql>USE school;
mysql>CREATE TABLE tb2(name CHAR(20));
mysql>SHOW GLOBAL STATUS LIKE '%semi%';
+--------------------------------------------+-------+
|Variable_name                             | Value |
+--------------------------------------------+-------+
|Rpl_semi_sync_master_clients              | 1     |
|Rpl_semi_sync_master_net_avg_wait_time    | 800   |           
|Rpl_semi_sync_master_net_wait_time        | 800   |
|Rpl_semi_sync_master_net_waits            | 1     |
|Rpl_semi_sync_master_no_times             | 0     |
|Rpl_semi_sync_master_no_tx                | 0     |
|Rpl_semi_sync_master_status               | ON    |
|Rpl_semi_sync_master_timefunc_failures    | 0     |
|Rpl_semi_sync_master_tx_avg_wait_time     | 715   |             
|Rpl_semi_sync_master_tx_wait_time         | 715   |
|Rpl_semi_sync_master_tx_waits             | 1     |
|Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
|Rpl_semi_sync_master_wait_sessions        | 0     |
|Rpl_semi_sync_master_yes_tx               | 1     |
+--------------------------------------------+-------+
mysql>INSERT INTO tb2 VALUES ('tom'),('jerry'),('jack');
mysql>SHOW GLOBAL STATUS LIKE '%semi%';
+--------------------------------------------+-------+
|Variable_name                             | Value |
+--------------------------------------------+-------+
|Rpl_semi_sync_master_clients              | 1     |
|Rpl_semi_sync_master_net_avg_wait_time    | 1518  |
|Rpl_semi_sync_master_net_wait_time        | 3037  |
|Rpl_semi_sync_master_net_waits            | 2     |
|Rpl_semi_sync_master_no_times             | 0     |
|Rpl_semi_sync_master_no_tx                | 0     |
|Rpl_semi_sync_master_status               | ON    |
|Rpl_semi_sync_master_timefunc_failures    | 0     |
|Rpl_semi_sync_master_tx_avg_wait_time     | 715   |
|Rpl_semi_sync_master_tx_wait_time          | 715  |
|Rpl_semi_sync_master_tx_waits             | 1     |
|Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
|Rpl_semi_sync_master_wait_sessions        | 0     |
|Rpl_semi_sync_master_yes_tx               | 2     |
+--------------------------------------------+-------+

 
ライブラリから
mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql>SHOW GLOBAL VARIABLES LIKE '%semi%';
+---------------------------------+-------+
|Variable_name                   | Value |
+---------------------------------+-------+
|rpl_semi_sync_slave_enabled     |OFF   |
|rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
mysql>SET GLOBAL rpl_semi_sync_slave_enabled=1;
mysql>STOP SLAVE;
mysql>START SLAVE;
mysql>SHOW GLOBAL STATUS LIKE '%semi%';
+----------------------------+-------+
|Variable_name              | Value |
+----------------------------+-------+
|Rpl_semi_sync_slave_status | ON    |
+----------------------------+-------+

 
マスターとSlaveのmyに永続的に配置されています.cnfで編集:
# OnMaster 
[root@master~]# vim /etc/my.cnf
[mysqld] 
rpl_semi_sync_master_enabled=1 
rpl_semi_sync_master_timeout=1000# 1 second 
  
mysql>SHOW GLOBAL VARIABLES LIKE '%semi%';
+------------------------------------+-------+
|Variable_name                      | Value |
+------------------------------------+-------+
|rpl_semi_sync_master_enabled       |ON    |
|rpl_semi_sync_master_timeout       |1000  |
|rpl_semi_sync_master_trace_level   |32    |
|rpl_semi_sync_master_wait_no_slave | ON   |
+------------------------------------+-------+
 
# OnSlave 
[root@slave~]# vim /etc/my.cnf
[mysqld] 
rpl_semi_sync_slave_enabled=1 
  
mysql>SHOW GLOBAL VARIABLES LIKE '%semi%';
+---------------------------------+-------+
|Variable_name                   | Value |
+---------------------------------+-------+
|rpl_semi_sync_slave_enabled     | ON    |
|rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+