Mysql叢集講解(五) 多主多從環境搭建
https://www.cnblogs.com/liudongdong666666/p/7818240.html
A:概述:
一主多從,可以緩解讀的壓力,但是一旦主宕機了,就不能寫了;
所以我們可以採用雙主雙從架構
架構規劃:
主master 3307 ---> 從slave 3309
主master 3308 ---> 從slave 3310
3307 <---> 3308 互為主從
2個寫節點,每個寫節點下又是2個讀節點;
B:檔案配置:
1、配置每一臺MySQL伺服器的配置檔案my.cnf
[client]
port = 3307
socket = /usr/local/mysql-5.7.18/data/3307/mysql.sock
default-character-set=utf8
[mysqld]
port = 3307
socket = /usr/local/mysql-5.7.18/data/3307/mysql.sock
datadir = /usr/local/mysql-5.7.18/data/3307
log-error = /usr/local/mysql-5.7.18/data/3307/error.log
pid-file = /usr/local/mysql-5.7.18/data/3307/mysql.pid
character-set-server=utf8
lower_case_table_names=1
autocommit = 1
其他的 3308 3309 3310 只需要修改埠號即可
2、與一主多從一樣,所有節點配置檔案加上binlog配置
3307配置:
log-bin=mysql-bin
server-id=3307
3308配置:
log-bin=mysql-bin
server-id=3308
3309配置:
server-id=3309
3310配置:
server-id=3310
注意:這裡我們是把3307 3308 互為主(主從)
log-bin=mysql-bin
server-id=例項的埠(server-id要唯一)
3、第一臺主伺服器3307的my.cnf檔案增加如下配置:(Master 3307)
auto_increment_increment=2
auto_increment_offset=1
log-slave-updates
sync_binlog=1
4、第二臺主伺服器3308的my.cnf檔案增加如下配置:(Master 3308)
auto_increment_increment=2
auto_increment_offset=2
log-slave-updates
sync_binlog=1
C:配置項說明:
auto_increment_increment,控制主鍵自增的自增步長,用於防止Master與Master之間複製出現重複自增欄位值,通常auto_increment_increment=n,有多少臺主伺服器,n 就設定為多少;
auto_increment_offset=1設定自增起始值,這裡設定為1,這樣Master的auto_increment欄位產生的數值是:1, 3, 5, 7, …等奇數ID
注意auto_increment_offset的設定,不同的master設定不應該一樣,否則就容易引起主鍵衝突,比如master1的offset=1,則master2的offset=2,master3的offset=3
在雙主模式中,log-slave-updates 配置項一定要配置,否則在master1(3307)上進行了更新資料,在master2(3308)和slave1(3309)上會更新,但是在slave2(3310)上不會更新
sync_binlog表示每幾次事務提交,MySQL把binlog快取刷進日誌檔案中,預設是0,最安全的是設定為1;
F:主從設定:
1:啟動服務:
進入/usr/local/mysql-5.7.18/bin目錄,重啟四個MySQL服務,啟動時指定配置檔案啟動:
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3307/my.cnf &
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3308/my.cnf &
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3309/my.cnf &
./mysqld_safe --defaults-file=/usr/local/mysql-5.7.18/data/3310/my.cnf &
2、在兩臺主伺服器上建立複製賬號並授權:(3307、3308)
使用埠、主機登入進入兩臺主MySQL:
./mysql -uroot -p -P3307 -h127.0.0.1
./mysql -uroot -p -P3308 -h127.0.0.1
在主伺服器上建立複製資料的賬號並授權:(copy為名字:建議先按教程寫:熟悉之後隨意更改 123456 是密碼)
grant replication slave on *.* to 'copy'@'%' identified by '123456';
3、在兩臺主伺服器上停止複製並重新整理binlog日誌:(3307、3308)
4、在從伺服器上停止複製:(3309、3310)
在MySQL命令列執行:
stop slave;
reset slave;
reset master;
5、在主伺服器上檢視二進位制日誌檔案和Position值:(3307、3308)
在MySQL命令列執行:
即在3307和3308上分別執行:show master status;
6、在Slave上設定Master(相當於是4臺都需要設定)
設定從伺服器3308、3309,他們的主均為3307,即在3308和3309上執行如下操作:
change master to master_host='192.168.91.135',
master_user='copy',
master_password='123456',
master_port=3307,
master_log_file='mysql-bin.000001',
master_log_pos=154;
設定從伺服器3307、3310,他們的主均為3308,即在3307和3310上執行如下操作:
change master to master_host='192.168.91.135',
master_user='copy',
master_password='123456',
master_port=3308,
master_log_file='mysql-bin.000001',
master_log_pos=154;
7、在四臺MySQL伺服器上執行:start slave; (MySQL命令列執行)
執行後即開始進入主從複製狀態
雙主雙從驗證:
檢查從伺服器複製功能狀態,執行命令:
mysql> show slave status \G
如果Slave_IO_Running和Slave_SQL_Running的值為Yes,即表示複製功能配置正常;
設定好雙主雙從複製後:
1. 一個主出現問題,可以切換到另外的主進行寫資料,新主同步資料給它的從;
2. 待問題舊主恢復服務後,新的主會同步資料給它,它再同步資料給自己的從,這樣不會出現資料的不同步和服務的不可用。