mysql半同步復制的實現

jopen 10年前發布 | 17K 次閱讀 MySQL 數據庫服務器

mysql半同步復制的實現

mysql半同步復制和異步復制的差別如上述架構圖所示:在 mysql異步復制的情況下,Mysql Master Server將自己的Binary Log通過復制線程傳輸出去以后,Mysql Master Sever就自動返回數據給客戶端,而不管slave上是否接受到了這個二進制日志。在半同步復制的架構下,當master在將自己binlog發給 slave上的時候,要確保slave已經接受到了這個二進制日志以后,才會返回數據給客戶端。對比兩種架構:異步復制對于用戶來說,可以確保得到快速的響應結構,但是不能確保二進制日志確實到達了slave上;半同步復制對于客戶的請求響應稍微慢點,但是他可以保證二進制日志的完整性。


下面來配置一個半同步復制實現的主從架構:
192.168.1.141為mysql的主服務器
192.168.1.142為mysql的從服務器

1.為mysql主服務器提供配置
編輯/etc/my.cnf,提供以下的配置
log_bin=index
server_id=1
在主服務器上授權

mysql> grant replication slave,replication client on user@'192.168.1.142' identified by "123456";

mysql> flush privileges;



2.為mysql從服務提供配置
編輯/etc/my.cnf,提供以下的配置
server_id=10
relay_log=relay
read_only=on
skip-slave-start=1
進入mysql命令行接口

mysql > change master to MASTER_HOST="192.168.1.141",MASTER_USER="user",MASTER_PASSWORD="123456",MASTER_LOG_FILE="index.000004",MASTER_LOG_POS=429;

mysql > start slave;

如果能夠看到Slave_IO_Running: Yes和Slave_SQL_Running:Yes兩行信息的話,證明主從配置已經成功。

要使用mysql的半同步復制功能需要為mysql裝插件,mysql默認支持的插件在/usr/local/mysql/lib/plugin/,里面有兩個semisync_master.so和 semisync_slave.so的共享庫是我們實現mysql半同步復制的關鍵


3.設置半同步復制
在mysql主服務器的命令行接口下執行如下代碼:

mysql > install plugin rpl_semi_sync_master SONAME 'semisync_master.so';

mysql > show variables like "%semi%";(如果看到新增的semi變量的話證明安裝模塊成功)

| 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    | 沒有slave的時候是否也需要等待,默認為也需要等待

mysql > set global rpl_semi_sync_master_enabled = 1;

mysql > set global rpl_semi_sync_master_timeout = 1000;

在mysql從服務器的命令行接口下執行如下代碼:

mysql > install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';

mysql > show variables like "%semi%";(如果看到新增的semi變量的話證明安裝模塊成功)

mysql > set global rpl_semi_sync_slave_enabled = 1;

stop slave;

start slave;

最后把常用的配置參數寫如配置文件中:
192.168.1.141:
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000

192.168.1.142:
[mysqld]
rpl_semi_sync_slave_enabled=1


4.查看半同步復制的狀況信息
在192.168.1.141執行如下命令:
mysql> show status like "%semi%";
+-------------------------------------------------------------------+----------+
| Variable_name                                                                | Value |
+-------------------------------------------------------------------+----------+
| Rpl_semi_sync_master_clients                                    | 1     |   半同步復制客戶端的個數
| Rpl_semi_sync_master_net_avg_wait_time              | 555   |   平均等待時間(默認毫秒)
| Rpl_semi_sync_master_net_wait_time                      | 1665  |   總共等待時間
| Rpl_semi_sync_master_net_waits                              | 3     |   等待次數
| Rpl_semi_sync_master_no_times                              | 0     |   關閉半同步復制的次數
| Rpl_semi_sync_master_no_tx                                      | 0     |   表示沒有成功接收slave提交的次數
| Rpl_semi_sync_master_status                                   | ON    |   表示當前是異步模式還是半同步模式,on為半同步
| Rpl_semi_sync_master_timefunc_failures               | 0     |   調用時間函數失敗的次數
| Rpl_semi_sync_master_tx_avg_wait_time              | 575   |   事物的平均傳輸時間
| Rpl_semi_sync_master_tx_wait_time                      | 1725  |   事物的總共傳輸時間
| Rpl_semi_sync_master_tx_waits                                | 3     |   事物等待次數
| Rpl_semi_sync_master_wait_pos_backtraverse    | 0     |  
| Rpl_semi_sync_master_wait_sessions                    | 0     |   當前有多少個session因為slave的回復而造成等待
| Rpl_semi_sync_master_yes_tx                                   | 3     |   成功接受到slave事物回復的次數
+-------------------------------------------------------------------+---------+

5.取消半同步復制的插件
192.168.1.141上:

mysql > uninstall plugin rpl_semi_sync_master;

mysql > show status like "%semi%"


192.168.1.142上:

mysql > uninstall plugin rpl_semi_sync_slave;

mysql > show status like "%semi%"

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!