mysql5.6配置semi_sync


測試環境:
Red Hat Enterprise Linux Server release 6.3 (Santiago)
Server version: 5.6.22-log MySQL Community Server (GPL)

mysql的replication協議是異步的,雖然異步效率、性能很好,但是卻無法保證主從數據一致性,
如果master crash,已經commit的事務不會被傳送到任何的slave上,
從mysql5.5之后,mysql為了保證主從庫數據一致性,引進了semi-sync功能,
semi-sync意思是MASTER只需要接收到其中一台SLAVE的返回信息,就會commit;否則需等待直至切換成異步再提交。

優點:
當事務返回客戶端成功后,則日志一定在至少兩台主機上存在。
MySQL的Semi-sync適合小事務,且兩台主機的延遲又較小,則Semi-sync可以實現在性能很小損失的情況下的零數據丟失。

缺點:
完成單個事務增加了額外的等待延遲,延遲的大小取決於網絡的好壞。

配置方法:
在主庫安裝semisync_master插件:
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; //linux
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.dll'; //windows

在備庫安裝semisync_slave插件
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; //linux
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';//windows


主庫上,新增如下參數:
$vi /etc/my.cnf

[mysqld]
...
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
...

備庫上新增:

$vi /etc/my.cnf

[mysqld]
...
rpl_semi_sync_slave_enabled=1

重啟master和slave,semi_sync插件會自動加載

重啟后,master顯示如下:
mysql> show variables like '%rpl_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 | #表示即使沒有SLAVE也會等待過期時間結束,是默認值
+------------------------------------+-------+
4 rows in set (0.00 sec)

mysql> show status like '%semi%';
+--------------------------------------------+----------+
| Variable_name | Value |
+--------------------------------------------+----------+
| Rpl_semi_sync_master_clients | 3 | #有多少個Semi-sync的備庫,我配置了3個
| Rpl_semi_sync_master_net_avg_wait_time | 2525 | #事務提交后,等待備庫響應的平均時間
| Rpl_semi_sync_master_net_wait_time | 45892342 | #總的網絡等待時間
| Rpl_semi_sync_master_net_waits | 18174 | #等待網絡響應的總次數
| Rpl_semi_sync_master_no_times | 0 | #一共有幾次從Semi-sync跌回普通狀態
| Rpl_semi_sync_master_no_tx | 0 | #備庫未及時響應的事務數
| Rpl_semi_sync_master_status | ON | #主庫上Semi-sync是否正常開啟
| Rpl_semi_sync_master_timefunc_failures | 0 | #時間函數未正常工作的次數
| Rpl_semi_sync_master_tx_avg_wait_time | 1196 | #開啟Semi-sync,事務返回需要等待的平均時間
| Rpl_semi_sync_master_tx_wait_time | 7918635 | #事務等待備庫響應的總時間
| Rpl_semi_sync_master_tx_waits | 6620 | #事務等待備庫響應的總次數
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 | #改變當前等待最小二進制日志的次數
| Rpl_semi_sync_master_wait_sessions | 0 | #當前有幾個線程在等備庫響應
| Rpl_semi_sync_master_yes_tx | 6549 | #Semi-sync模式下,成功的事務數
+--------------------------------------------+----------+
14 rows in set (0.00 sec)

slave上顯示如下:
mysql> show variables like '%rpl_semi%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
2 rows in set (0.01 sec)

mysql> show status like '%semi%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.00 sec)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM