您好,登錄后才能下訂單哦!
一.半同步復制
半同步復制特點
1. 與傳統的異步復制相比,半同步復制在多個Slave節點中會選取一個節點進行半同步復制。也就是說,當Master提交一個事務的時候,在這個半同步復制的Slave端返回一個同步完成的Ack包之后,服務器才會向用戶返回事務提交成功,而其他的節點則是采用傳統的異步復制方式進行同步。
2. 半同步是復制是基于異步復制之上進行的,也就是說配置半同步復制之前需要先配置到異步復制。
3. 半同步復制可以保證在主節點發生故障的時候,總有一個節點的數據與主節點一樣。這樣在進行切換的時候,可以更加快速地把這個Slave節點設置成主節點來使用。
5.7
5.6
半同步復制性能
- 半同步復制比異步復制性能低1/3
- 模式after_sync 比 after_commit性能要高
二.半同步復制安裝條件
1.必須是MySQL5.5或者以上
2.MySQL必須有自動加載功能,即have_dynamic_loading變量為YES
mysql> show variables like 'have_dynamic_loading';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| have_dynamic_loading | YES |
+----------------------+-------+
3.主從復制已經配置好(異步復制)
三.配置
1.設置半同步模式(主庫,5.7為默認值)
SET rpl_semi_sync_master_wait_point= AFTER_SYNC;
2.加載插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';(主庫)
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';(從庫)
show plugins;(確認查看)
3.啟動半同步復制
主庫
SET GLOBAL rpl_semi_sync_master_enabled = 1;
從庫
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
以上的啟動方式是在命令行操作,也可寫在配置文件中。
plugin_dir=/usr/local/mysql/lib/plugin
plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000
rpl_semi_sync_master_wait_point = AFTER_SYNC or AFTER_COMMIT
rpl_semi_sync_master_wait_for_slave_count = 1
重啟從服務器IO線程,手動將異步模式切換為半同步模式。重啟后,slave會在master上注冊為半同步復制的slave角色。
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
4.確認半同步復制運行狀態
主庫
mysql> show status like 'Rpl_semi_sync_master_status';
+-----------------------------+-------+
| Variable_name | Value |
+-----------------------------+-------+
| Rpl_semi_sync_master_status | ON |
+-----------------------------+-------+
從庫
mysql> show status like 'Rpl_semi_sync_slave_status';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
5.半同步復制相關參數
主庫
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_master_timeout=1000默認1000毫秒,即10秒超時,將切換為異步復制
從庫
Rpl_semi_sync_slave_status表示從服務器開啟半同步復制
6.測試
模擬半同步復制slave server宕機
- 關閉半同步slave server
- 關閉后主庫進行查看未發生變化
mysql> show status like '%semi%';
+--------------------------------------------+-------+
| 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 | 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 | 5754 |
| Rpl_semi_sync_master_tx_wait_time | 11509 |
| Rpl_semi_sync_master_tx_waits | 2 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 2 |
+--------------------------------------------+-------+
- 主庫執行事務,等待10秒
mysql> delete from wwj.t3 where idt3=2;
Query OK, 1 row affected (10.03 sec)
- 再次查看
mysql> show status like '%semi%';
+--------------------------------------------+-------+
| 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 | 3 |
| Rpl_semi_sync_master_no_times | 1 |
| Rpl_semi_sync_master_no_tx | 1 |
| Rpl_semi_sync_master_status | OFF |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 5754 |
| Rpl_semi_sync_master_tx_wait_time | 11509 |
| Rpl_semi_sync_master_tx_waits | 2 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 2 |
+--------------------------------------------+-------+
- 重新開啟semi slave,半同步重新開啟。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。