1. 程式人生 > >mariadb互為主從,讀寫分離

mariadb互為主從,讀寫分離

       上一篇我寫了一篇主從同步的文章,主要是1主多從這種模式。但這種模式隨著訪問流量的過大,也會把從庫給拖垮,因此為了解決這個問題,又出現一種新的方法-----主主互備,互為主從。這樣的好處是做到了訪問量的壓力分流,同時也決絕單點故障的問題,任何一臺傳送故障,都還有另一臺可供使用。

這種設計的缺點是隻能適用於兩臺機器的場景。如果後期快速拓展業務的話,可以選擇將業務分離,建立多個主主互備的資料庫。

互為主從的設定其實很簡單,只要看過我之前寫的那篇主從同步的文章,你就想到互為主從的做法。

1.首先在A伺服器上開啟my.cnf,並輸入一下內容

server-id=1
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
log-bin=master-bin
relay-log=relay-bin
sync-binlog = 1

2.在B伺服器上開啟my.cnf
server-id=2
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
relay-log=relay-bin
log-bin=master-bin
sync-binlog = 1

3.重啟服務
systemctl restart mariadb.service

4.清空A,B伺服器的master和slave日誌(若之前有開啟過同步的,需要先停止同步:stop slave;)
reset master;
reset slave;

5.分別給AB伺服器建立授權的同步賬戶

A:給B建立一個使用者:127.0.0.2為B伺服器的地址(需要改成自己的伺服器地址)

grant replication slave on *.* to 'slaveuser'@'127.0.0.2' identified by 'slaveuser';  

B:給A建立一個使用者:127.0.0.1為A伺服器的地址(需要改成自己的伺服器地址)
grant replication slave on *.* to 'slaveuser'@'127.0.0.1' identified by 'slaveuser';  

6.分別給A,B資料庫鎖表(不能終止mysql程序)

FLUSH TABLES WITH READ LOCK;

7.分別檢視A,B伺服器的主機狀態。日誌記錄的二進位制檔案:
SHOW MASTER STATUS;


8.根據上面的圖來修改A,B伺服器的配置

A:Host為B伺服器地址

CHANGE MASTER TO MASTER_HOST='127.0.0.2',MASTER_USER='slaveuser', MASTER_PASSWORD='slaveuser',MASTER_LOG_FILE='master-bin.000002',MASTER_LOG_POS=245;
B:Host為A伺服器地址
CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_USER='slaveuser', MASTER_PASSWORD='slaveuser',MASTER_LOG_FILE='master-bin.000002',MASTER_LOG_POS=245;
9.A,B分別開啟同步
start slave;

10.分別檢視A,B的同步狀態是否正常,紅框兩個都為yes代表同步成功
SHOW SLAVE STATUS\G;


11.解鎖
UNLOCK TABLES;

12.可以自行測試了,這個時候同步是成功的了,我這裡設定的是出了mysql和information_schema不同步之外,其他資料庫都同步