环境准备
MySQL多主多从环境就是一个集群中有多个互为主从的节点,同时每个互为主从的写节点又挂载只读的从节点。之前的章节已经介绍过主从搭建、双主搭建的方法,多主多从架构也是在其基础上进行改造。总的来说,MySQL的集群基本上是在主从架构的基础上进行演化改进的。所以下面我主要列出搭建的核心步骤和配置文件,不再一一细讲。
分别在每个节点配置 /etc/hosts 主机域名映射。
#IP 域名|主机名
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
关闭防火墙:ufw disable
重启网络执行:
sudo systemctl restart systemd-resolved;
bash /etc/hosts;
或者
sudo /etc/init.d/dns-clean start;
sudo /etc/init.d/networking restart;
#master节点配置
配置这两个节点:10.53.207.20,10.53.207.21
- my.cnf 文件(默认在 /etc/mysql/ 下)配置,我只配置了关键核心属性,其他属性读者可以自定义配置
10.53.207.20
[mysqld]
#集群中服务实例的唯一标识,两个节点不能相同
server-id = 20
# 开启gtid
gtid_mode = ON
enforce_gtid_consistency = 1
# 设置自增ID初始值为1,每次自增量为2。即都是奇数1,3,5,7,...
auto_increment_offset = 1
auto_increment_increment = 2
# 不需要写binlog的库
binlog_ignore_db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performance_schema
binlog_ignore_db = sys
# 从库不进行同步的库
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
# 设置自增ID初始值为2,每次自增量为2。即都是偶数2,4,6,8,...
auto_increment_offset = 2
auto_increment_increment = 2
# 不需要写binlog的库
binlog_ignore_db = mysql
binlog_ignore_db = information_schema
binlog_ignore_db = performance_schema
binlog_ignore_db = sys
# 从库不进行同步的库
replicate_ignore_db = mysql
replicate_ignore_db = information_schema
replicate_ignore_db = performance_schema
replicate_ignore_db = sys
配置完成后分别重启两个服务:service mysql restart
2、然后分别在两个节点中创建数据同步账户:
use mysql;
create user 'repl'@'10.53.207.%' identified by 'P@repl';
grant replication slave on *.* to 'repl'@'10.53.207.%';
flush privileges;
3、分别在两个节点配置并开启主从同步:
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、验证双主架构
可以在任意一个节点同时执行 show master status 和 show replica status 来查看 主从同步信息。
分别在两个服务上进行数据的更新,发现数据都可以同步至另外的主节点。
#slave节点配置
配置这两个节点: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
配置完成后分别重启两个服务:service mysql restart
2、配置主从同步信息并开启同步服务。
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
#集群验证
可以在每个节点通过 show slave status 或者 show replica status 查看主从同步状态,通过 show master status 查看主节点状态。
可以在主节点(10.53.207.20,10.53.207.21)上进行插入数据,发现数据都能同步至其他节点(包括另一个主节点和其他从节点)。
在从节点无法进行数据更新( super 和 connection_admin 权限的用户不受只读属性限制),只能进行查询,并且可以同步主节点的数据。