環(huán)境準(zhǔn)備
MySQL多主多從環(huán)境就是一個(gè)集群中有多個(gè)互為主從的節(jié)點(diǎn),同時(shí)每個(gè)互為主從的寫節(jié)點(diǎn)又掛載只讀的從節(jié)點(diǎn)。之前的章節(jié)已經(jīng)介紹過主從搭建、雙主搭建的方法,多主多從架構(gòu)也是在其基礎(chǔ)上進(jìn)行改造??偟膩碚f,MySQL的集群基本上是在主從架構(gòu)的基礎(chǔ)上進(jìn)行演化改進(jìn)的。所以下面我主要列出搭建的核心步驟和配置文件,不再一一細(xì)講。
分別在每個(gè)節(jié)點(diǎn)配置 /etc/hosts 主機(jī)域名映射。
#IP 域名|主機(jī)名
10.53.207.20 10.53.207.20 #master1
10.53.207.21 10.53.207.21 #master2
10.53.207.22 10.53.207.22 #slave1
10.53.207.23 10.53.207.23 #slave2
關(guān)閉防火墻:ufw disable
重啟網(wǎng)絡(luò)執(zhí)行:
sudo systemctl restart systemd-resolved;
bash /etc/hosts;
或者
sudo /etc/init.d/dns-clean start;
sudo /etc/init.d/networking restart;
#master節(jié)點(diǎn)配置
配置這兩個(gè)節(jié)點(diǎn):10.53.207.20,10.53.207.21
- my.cnf 文件(默認(rèn)在 /etc/mysql/ 下)配置,我只配置了關(guān)鍵核心屬性,其他屬性讀者可以自定義配置
10.53.207.20
[mysqld]
#集群中服務(wù)實(shí)例的唯一標(biāo)識(shí),兩個(gè)節(jié)點(diǎn)不能相同
server-id = 20
# 開啟gtid
gtid_mode = ON
enforce_gtid_consistency = 1
# 設(shè)置自增ID初始值為1,每次自增量為2。即都是奇數(shù)1,3,5,7,...
auto_increment_offset = 1
auto_increment_increment = 2
# 不需要寫binlog的庫(kù)
binlog_ignore_db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performance_schema
binlog_ignore_db = sys
# 從庫(kù)不進(jìn)行同步的庫(kù)
replicate_ignore_db = mysql
replicate_ignore_db = information_schema
replicate_ignore_db = performance_schema
replicate_ignore_db = sys
10.53.207.21
[mysqld]
server-id=21
# 開啟gtid
gtid_mode = ON
enforce_gtid_consistency = 1
# 設(shè)置自增ID初始值為2,每次自增量為2。即都是偶數(shù)2,4,6,8,...
auto_increment_offset = 2
auto_increment_increment = 2
# 不需要寫binlog的庫(kù)
binlog_ignore_db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performance_schema
binlog_ignore_db = sys
# 從庫(kù)不進(jìn)行同步的庫(kù)
replicate_ignore_db = mysql
replicate_ignore_db = information_schema
replicate_ignore_db = performance_schema
replicate_ignore_db = sys
配置完成后分別重啟兩個(gè)服務(wù):service mysql restart
2、然后分別在兩個(gè)節(jié)點(diǎn)中創(chuàng)建數(shù)據(jù)同步賬戶:
use mysql;
create user 'repl'@'10.53.207.%' identified by 'P@repl';
grant replication slave on *.* to 'repl'@'10.53.207.%';
flush privileges;
3、分別在兩個(gè)節(jié)點(diǎn)配置并開啟主從同步:
10.53.207.20
change master to
master_host='10.53.207.21',
master_port=3306,
master_user='repl',
master_password='P@repl',
master_auto_position=1,
get_master_public_key=1;
開啟主從同步:start slave
10.53.207.21
change master to
master_host='10.53.207.20',
master_port=3306,
master_user='repl',
master_password='P@repl',
master_auto_position=1,
get_master_public_key=1;
開啟主從同步:start slave
4、驗(yàn)證雙主架構(gòu)
可以在任意一個(gè)節(jié)點(diǎn)同時(shí)執(zhí)行 show master status 和 show replica status 來查看 主從同步信息。
分別在兩個(gè)服務(wù)上進(jìn)行數(shù)據(jù)的更新,發(fā)現(xiàn)數(shù)據(jù)都可以同步至另外的主節(jié)點(diǎn)。
#slave節(jié)點(diǎn)配置
配置這兩個(gè)節(jié)點(diǎn):10.53.207.22,10.53.207.23
1、my.cnf
文件配置
10.53.207.22
[mysqld]
server-id=22
read_only=1
gtid_mode=ON
enforce_gtid_consistency=1
replicate_ignore_db = mysql
replicate_ignore_db = information_schema
replicate_ignore_db = performance_schema
replicate_ignore_db = sys
10.53.207.23
[mysqld]
server-id=23
read_only=1
gtid_mode=ON
enforce_gtid_consistency=1
replicate_ignore_db = mysql
replicate_ignore_db = information_schema
replicate_ignore_db = performance_schema
replicate_ignore_db = sys
配置完成后分別重啟兩個(gè)服務(wù):service mysql restart
2、配置主從同步信息并開啟同步服務(wù)。
10.53.207.22
change master to
master_host='10.53.207.20',
master_port=3306,
master_user='repl',
master_password='P@repl',
master_auto_position=1,
get_master_public_key=1;
開啟主從同步:start slave
10.53.207.23
change master to
master_host='10.53.207.21',
master_port=3306,
master_user='repl',
master_password='P@repl',
master_auto_position=1,
get_master_public_key=1;
開啟主從同步:start slave
#集群驗(yàn)證
可以在每個(gè)節(jié)點(diǎn)通過 show slave status 或者 show replica status 查看主從同步狀態(tài),通過 show master status 查看主節(jié)點(diǎn)狀態(tài)。
可以在主節(jié)點(diǎn)(10.53.207.20,10.53.207.21)上進(jìn)行插入數(shù)據(jù),發(fā)現(xiàn)數(shù)據(jù)都能同步至其他節(jié)點(diǎn)(包括另一個(gè)主節(jié)點(diǎn)和其他從節(jié)點(diǎn))。
在從節(jié)點(diǎn)無法進(jìn)行數(shù)據(jù)更新( super 和 connection_admin 權(quán)限的用戶不受只讀屬性限制),只能進(jìn)行查詢,并且可以同步主節(jié)點(diǎn)的數(shù)據(jù)。