如何實現mysql主從服務器的半同步複製mysql
在mysql的主從架構和主主架構中,雖然這兩種架構實現了mysql服務器的負載均衡,但卻沒有提升讀寫速度,且在這構架複製時,因爲主服務器和從服務器都是獨立的,因此異步複製很難保證數據的完整一致性,對於此mysql添加了半同步複製,在mysql5.5的版本以後都是支持此功能的,但默認用的是異步複製。sql
半同步複製模式簡單介紹:根據名字能夠,它不能達到同步複製,但卻優於異步複製。主服務器有多個從服務器,主服務會等待其中一臺數據寫入成功,完成一致性以後,在執行其它數據寫入,。但主服務器也不能一直在等待,因此又規定了超時時間,當超過期間以後,半同步複製則切換到異步複製。直到至少有一臺從服務器於主服務的數據一致,纔再次進入半同步複製。服務器
下面就介紹如何實現半同步複製網絡
請你們在實現下面功能以前,請確保本身的mysql已是主從架構的服務器,若是不會配置主從服務器,請看我博客中的其它文章,裏面有講解的。session
1、確保mysql支持半同步複製架構
在mysql的安裝目錄下執行下面的操做負載均衡
[root@mail mysql]# ls lib/plugin/ 異步
semisync_master.so semisync_slave.so 如有這兩個文件則說明支持半同步複製ide
若是沒有則須要使用更高版本的mysql,5.5以上的都支持,spa
2、在主、從服務器上個安裝模塊,並設定其值
在主服務器上
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; 設定超時時間,默認單位是毫秒
在從服務器上
install plugin rpl_semi_sync_slave soname 'semisync_slave.so'; 安裝從服務器半同步模塊
mysql> set global rpl_semi_sync_slave_enabled=1; 啓動半同步模塊
mysql> stop slave; 關閉從服務器
mysql> start slave; 開啓從服務器
3、驗證半同步複製是否開啓
在從服務器上驗證
mysql> show global status like 'rpl_semi%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON | 當顯示是on時,則說明已經開啓半同步模式
+----------------------------+-------+
1 row in set (0.00 sec)
在主服務器上驗證
mysql> show global status like 'rpl_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 | on時是半同步模式,off是異步模式
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 0 | 事務因開啓Semi_sync平均須要額外等待的時間
| Rpl_semi_sync_master_tx_wait_time | 0 | 事務因開啓Semi_sync,須要額外等待的時間
| 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 | 顯示從服務器確認的成功提交數
+--------------------------------------------+-------+
14 rows in set (0.02 sec)
若是你也能看見上述內容,則恭喜你半同步複製已經配置完成。
爲了讓mysql在重啓以後還支持半同步複製,則須要在配置文件中寫入一下內容
在主、從服務器上的的my.cnf中編輯:
在主服務器上
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
在從服務器上
[mysqld]
rpl_semi_sync_slave_enabled=1