標籤:
以下是配置和監控半同步複製:
1. 半同步複製功能以plugin的方式接入MySQL,需要在主庫與從庫兩端同時開啟半同步的支援,具體配置如下:
On the master
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000; # 1 second
On the slave
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
mysql> START SLAVE;
NOTE: SLAVE端需要先開啟半同步參數,然後啟動從庫複製,否則,Rpl_semi_sync_slave_status的狀態始終為:OFF。
2. 通過以下參數可以判斷半同步是否正常:
Rpl_semi_sync_master_status -- 判斷主庫當前模式為半同步還是非同步複製
Rpl_semi_sync_master_clients -- 當前處於半同步狀態的從庫個數
Rpl_semi_sync_master_yes_tx,Rpl_semi_sync_master_no_tx -- 主庫收到正常確認以及逾時未成功確認的事務個數
Rpl_semi_sync_slave_status -- 從庫半同步複製是否正常,當io_thread為NO時,狀態為OFF
查看半同步相關參數及狀態參數命令:
mysql> SHOW VARIABLES LIKE ‘rpl_semi_sync%’;
mysql> SHOW STATUS LIKE ‘Rpl_semi_sync%’;
-TAKE AWAY-
半同步複製使MHA更加完美
在之前的文章中曾和大家分享過MHA這種高可用的主從自動的failover方案,而這裡說的半同步複製對於MHA是一個很有利的支援。
半同步可以最大程度的保障主庫執行過的語句被成功複製到從庫relay log中;而當主庫發生故障時,使從庫的狀態更接近主庫,保持最小的資料差異。基於半同步這個特點,可以將其與MHA一起使用,當主庫故障,故障自動切換被觸發,在這個過程中MHA需要比較主庫與從庫日誌差異,由於半同步的特點,差異日誌會儘可能的少,那麼MHA在進行判斷比較、差異產生、拷貝直至最後的差異應用,這一系列的時間消耗都會得到縮減,這樣MHA的切換時間就相應減少,資料庫故障可以快速恢複。
正常情況下,主庫寫入binlog日誌的pos位置與從庫讀到的Read_Master_Log_Pos位置應該保持一致;測試中發現,當主庫被意外關掉,仍存在少量的跟新語句沒有被同步過去,這一點在手冊裡面有提及(If the master commits but a crash occurs while the master is waiting for acknowledgment from a slave, it is possible that the transaction may not have reached any slave.)
Mysql 半同步複製配置