MySQL5.7配置半同步複製實現雙向 數據同步/主主複製 達到雙機負載均衡的方案

 

一、說明

這裏準備了兩臺機器。機器1:192.168.224.128,機器2:192.168.224.129

MySQL版本:5.7.30,這裏不提供安裝教程,理論上只要版本對,以下步驟能適用任何安裝方式。

這裏不提供原理的相關資料,有需要請自行查找資料。

二、目的

同步複製耗時長,異步複製存在數據不一致的風險,由於業務追求高效,又不能容忍數據風險,於是乎,只能上半同步複製。

三、完整支持UTF-8字符集的配置

在my.ini文件中,在合適的位置添加如下配置,這不是必要的配置,可按需選擇。兩臺機器下做同樣的配置。

[client]
#完整支持UTF-8字符集的配置
default-character-set=utf8mb4
[mysql]
#完整支持UTF-8字符集的配置
default-character-set=utf8mb4
[mysqld]
#完整支持UTF-8字符集的配置
init_connect='SET collation_connection = utf8mb4_unicode_ci'
init_connect='SET NAMES utf8mb4'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake

四、基本配置

配置半同步複製前,需要先配置好基本複製配置。

1、機器1的my.ini文件的基本配置

#主從基礎配置
#配置bin log位置,會在MySQL的目錄下保存,如下,請先創建bin-log文件夾,否則服務無法啓動
log-bin=../bin-log/bin-log-128
#一般做成IP地址最後一段
server-id=128 

#配置需要複製的庫
binlog-do-db=test_db
binlog-do-db=test

2、機器2的my.ini文件的基本配置

#主從基礎配置
#配置bin log位置,會在MySQL的目錄下保存,如下,請先創建bin-log文件夾,否則服務無法啓動
log-bin=../bin-log/bin-log-129
#一般做成IP地址最後一段
server-id=129

#配置需要複製的庫
binlog-do-db=test_db
binlog-do-db=test

3、重啓MySQL服務

兩臺機器都要重啓。如果沒意外,可在bin-log文件夾下看到log文件。

五、Slave用戶的創建

打開MySQL命令行界面,用root登錄執行如下命令。機器1和機器2都執行。可替換自己需要的賬號和密碼。

CREATE USER 'test'@'192.168.%' IDENTIFIED BY '123456';#創建用戶, 用戶名:test,允許內部IP上登錄
GRANT REPLICATION SLAVE ON *.* TO 'test'@'192.168.%';#分配權限
flush privileges;   #刷新緩存

六、主從雙向關聯

1、機器2做Slave,機器1做Master

在機器1上用root登錄並執行如下腳本,獲取Master相關信息。

show master status;

在機器2上用root登錄並執行如下腳本,配置機器1爲Master。

change master to master_host='192.168.224.128';
change master to master_user='test';
change master to master_password='123456';
change master to master_log_file='bin-log-128.000001'; #替換爲上圖對應的值
change master to master_log_pos=154; #替換爲上圖對應的值
start slave;

2、機器1做Slave,機器2做Master

在機器2上用root登錄並執行如下腳本,獲取Master相關信息。

show master status;

在機器1上用root登錄並執行如下腳本,配置機器2爲Master。

change master to master_host='192.168.224.129';
change master to master_user='test';
change master to master_password='123456';
change master to master_log_file='bin-log-129.000001'; #替換爲上圖對應的值
change master to master_log_pos=763; #替換爲上圖對應的值
start slave;

 3、驗證配置是否成功

在機器1和機器2上執行如下命令,看打印出來的內容。

show slave status \G;

如果Slave_IO_Running和Slave_SQL_Running都爲Yes,證明配置成功。

5、驗證雙向複製是否成功

在機器1和機器2上創建數據庫,表,新增數據,驗證數據是否能成功複製到另一臺機器上。

七、半同步複製配置

1、插件安裝

分別在機器1和機器2上執行如下腳本。

#安裝半同步複製的插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.dll'; #Linux系統請將.dll改爲.so
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.dll'; #Linux系統請將.dll改爲.so

執行完後可以查詢插件列表是否安裝成功。

#查詢插件
SELECT PLUGIN_NAME, PLUGIN_STATUS
       FROM INFORMATION_SCHEMA.PLUGINS
       WHERE PLUGIN_NAME LIKE '%semi%';

2、插件配置

分別在機器1和機器2的my.ini文件上追加如下配置。

#半同步複製的配置
plugin-load="rpl_semi_sync_master=semisync_master.dll;rpl_semi_sync_slave=semisync_slave.dll;" #MySQL啓動時加載插件
rpl-semi-sync-master-enabled = 1 #啓用Master半同步複製插件
rpl_semi_sync_master_timeout=5000 #超時時間:5秒
rpl-semi-sync-slave-enabled = 1 #啓用Slave半同步複製插件

然後分別重啓MySQL服務。

3、驗證插件安裝是否成功

重啓完後可以查看插件配置:

#查詢變量
show variables like '%semi%';

看到ON和AFTER_SYNC,表示達到目的。

查看插件狀態:

#查詢狀態
show status like '%semi%';

親切的ON。

八、負載均衡

既然數據能雙向複製,那麼可以在機器1和機器2上部署相同的業務工程,用本機上的MySQL服務,然後對業務工程做負載均衡即可。不過只限兩臺機器的情況,多了還是得上Group Replication或InnoDB Cluster。

參考文檔:https://dev.mysql.com/doc/refman/5.7/en/replication-semisync-installation.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章