Mariadb互爲主從(雙主模式)配置

前言

這段時間 一直在Cloudera Manager集羣上配置高可用的Mariadb服務。今天花一點記錄一下自己的配置過程 希望後續的讀者看到後 在遇到相同業務需求時具有參考價值。

以往我們在配置MySQL卓倉複製時,一般而言 在配置到一主 一從 能夠實現MySQL的讀寫分離 就差不多了,因爲導師的要求 這裏要配置一個互爲主從的MySQL服務,也就是我們常說的雙主模式。
A B之間互相同步數據,A寫入的數據在B上能夠讀取 更新,B上寫入的數據在A上也鞥實現相同的操作。

因爲在網上看到的大多數資料 都是配置的一主一從,這裏 我就這段時間的配置過程 做一個大概的文檔總結。

配置過程詳解

我們在這裏選取主機ip尾號爲145 147的兩臺CentOS 7.1的主機來實現Mariadb的雙主模式。

1.安裝 mysql

yum install mariadb-embedded mariadb-libs mariadb-bench mariadb mariadb-server

2.mysql主從複製(互爲主從)

1.在兩臺機器上分別添加一個用於從機訪問的帳號, 賦予REPLICATION SLAVE權限.
GRANT REPLICATION SLAVE ON . TO ‘slave’@’%’ IDENTIFIED BY ‘000000’;
2.第一臺服務器(IP: 172.19.2.147)運行:
GRANT REPLICATION SLAVE ON . TO ‘slave’@‘172.19.2.145’ IDENTIFIED BY ‘000000’;
3.第二臺服務器(IP: 172.19.2.145)運行:
GRANT REPLICATION SLAVE ON . TO ‘slave’@‘172.19.2.147’ IDENTIFIED BY ‘000000’;

4 修改配置文件,配置服務器編號, 開啓bin-log
vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server-id=145 ##或者147不同主機的id唯一標識
log_bin =mysql-bin
#binlog_ignore_table=scm.CM_VERSION

relay-log = relay-mysql #開啓二進制日誌
relay-log-index =relay-mysql.index #開啓中繼日誌
log_slave_updates=on
auto-increment-increment = 2
auto-increment-offset = 1 #從1開始 或者2開始 爲避免id衝突 兩臺主機的起步要不同
打開這兩行的註釋, 注意這裏的server-id是服務器編號, 所以, 兩臺服務器上的值要設置的不一樣. 比如1和2,最好用IP地址最後一段標識。

如下圖所示:
在這裏插入圖片描述
5.重啓MySQL服務
Systemctl restart mariadb //重啓
Systemctl status mariadb //查看進程
在這裏插入圖片描述
6.這裏可以清空兩臺主機的master和slave日誌(若之前有開啓過同步的,需要先停止同步:stop slave;)
在mysql命令行中輸入:
reset master;
reset slave;
7.在mysql命令模式執行
SHOW MASTER STATUS; ##前面已經查看過了。
分別給145 147數據庫加讀鎖,防止配置同步時有數據寫入: flush tables with read lock;

8.此時請保證執行這兩條命令的mysql控制檯不要退出,【非常重要】.
然後進mysql控制檯,分別產看相關信息
在21服務器上:
show master status;
在25服務器上:
show master status;
在這裏插入圖片描述
分別重新打開一個mysql控臺臺(重要)
分別在新打開的兩個mysql>中執行如下:

change master to master_host='172.19.2.147',master_user='slave',master_password='000000',master_log_file='mysql-bin.000002',master_log_pos=586748096;
change master to master_host='172.19.2.145',master_user='slave',master_password='000000',master_log_file='mysql-bin.000002',master_log_pos=429515657;

參數說明:
CHANGE MASTER TO
MASTER_HOST = ‘host’, #另一臺機器的地址
MASTER_PORT = 3306, #另一臺機器的端口
MASTER_USER = ‘slave’,#另一臺機器上第一步分配的用戶名
MASTER_PASSWORD = ‘000000’, #另一臺機器上第一步分配的密碼
MASTER_LOG_FILE = ‘mysql-bin.000001’,#另一臺機器上執行SHOW MASTER STATUS得到的文件名(File)
MASTER_LOG_POS = 237; #另一臺機器上執行SHOW MASTER STATUS得到的偏移量(Position)

9.START SLAVE;
10.SHOW SLAVE STATUS \G;
在這裏插入圖片描述
在這裏插入圖片描述
注意看 這裏配置的是145 147的互爲主從模式,所以一定是兩個節點上的slave status上的Slave_IO_Running和Slave_SQL_Running都是Yes狀態,這樣才實現了 雙主模式。
11. 解鎖: unlock tables;
啓動兩個節點的slave 之後,我們隊兩個進行鎖解除,然後寫數據進行雙主模式的測試。
一般而言,企業裏面的數據庫 數據表較大,數據屬性多,這也是爲什麼 現在越來越多的商業應用中開始選用主從模式 甚至是雙主模式來開發,歸根結底 南國認爲 很重要的一個原因 擔心大量的讀寫操作 使得服務宕機。
所以在測試時,南國建議開發者可以在某個數據庫中自己創建的少數屬性的數據表,並在不同節點進行數據增刪查改 我們還可以繼續在MySQL命令行 查看兩個節點的slave狀態 是否還是雙Yes。

如果一直是雙Yes,而且數據可以實現互相讀寫同步,那麼恭喜你 MySQL的雙主模式你已經成功搭建好。

注意:
在配置MySQL互爲主從模式(雙主模式)時經常出現的坑是 兩個節點只能實現一邊主從,某一個節點上的slave status會顯示錯誤,錯誤一般是1032 某個數據庫中的信息不能更新,這是一般採用的方法是 將主庫中的數據備份 然後加載到從庫中,方可以得到解決。
也可以在從庫中: stop slave; set global sql_slave_skip_counter=1;#執行跳過錯誤操作,但這個治標不治本,下次 主庫更新數據 還會報錯 start slave;

還有一些常見的錯誤例如1032 1062的錯誤及參考的解決辦法,可以參考http://xstarcd.github.io/wiki/MySQL/online_mysqlrepl_error.html

小結:
南國配置MySQL雙主模式 主要是因爲最近部署CLoudera Manager HA模式所使用,在搭建的過程中 也是遇到了不少坑,好在最後還是成功了。 其實雙主模式 最重要的考慮是 避免單一節點宕機 造成數據丟失,而沒有將負載放在首要地位考慮。因爲 現有的節點資源 足夠大了,數據量遠沒有超過其負荷。
當然 不同應用場景 有不同考慮,更多認識 未完待續~

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