MySQL 的集群都是采用双主双从的经典模式,这也是部署高可用集群的基础。这次笔记我们就开始学习拉~
1.环境准备
上次我们搭建了mysql主备集群架构,如下所示
而这次,需要搭建的是主主(双master)从从
具体Mysql集群配置信息:
IP | 系统 | 端口 | MySQL版本 | 节点 | 读写 | 说明 |
---|---|---|---|---|---|---|
10.143.87.21 | 红帽7.4 | 3306 | 5.7.34 | Master | 读写 | 主节点 |
10.143.87.22 | 红帽7.4 | 3306 | 5.7.34 | Stanby | 只读,可切换为读写 | 备节点,允许升级为主节点 (当master故障) |
10.143.87.20 | 红帽7.4 | 3306 | 5.7.34 | Slave | 只读 | master-从节点 |
10.143.87.19 | 红帽7.4 | 3306 | 5.7.34 | Slave | 只读 | Stanby-从节点 |
参考配置
Master
Standby
master-Salve
Stanby-Salve
本次添加的配置解释
auto_increment_offset
自增字段起始值,设置为 1 表示自增字段从 1 开始算,这样Master的auto_increment字段产生的数值是:1, 3, 5, 7, …等奇数IDauto_increment_increment
控制主键自增的自增步长,用于防止Master与Master之间复制出现重复自增字段值,通常auto_increment_increment=n,有多少台主服务器,n 就设置为多少;log_slave_updates
将复制事件写入 binlog, 一台服务器既做主库又做从库此选项必须要开启, 这里在 Master 和 Standby 开启sync_binlog
表示每几次事务提交,MySQL把binlog缓存刷进日志文件中,默认是0,最安全的是设置为1;
说明一下,设置 auto_increment_offset
, auto_increment_increment
是为了防止两个节点双写时出现主键冲突
注意auto_increment_offset
的设置,不同的master设置不应该一样,否则就容易引起主键冲突,比如master1的offset=1,则master2的offset=2,master3的offset=3
2.搭建主主
2.1 重新配置文件,重启Mysql,使配置生效
service mysqld restart
2.2 双 Master 机上创建账号,并授权远程复制
我们创建一个用户名为 repl
的用户,授予 REPLICATION SLAVE
权限专门用来同步(如果按照上一篇的话,已经创建了)
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';
Query OK, 0 rows affected (0.00 sec)
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
或者:
grant replication slave on *.* TO 'repl'@'%' identified by 'repl';
2.3 查询Master和Stanby的状态
show master status;
Master:
Stanby:
分别记录下 File 和 Position 的值 ,执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。我的就是file内容一样吓死我了
2.4 双Slave机上执行 change master
change master 命令格式如下:
#复制主机的命令
change master to master_host='主机的IP地址',
master_user='repl',
master_password='repl',
master_log_file='mysql-bin.具体数字',
master_log_pos=762;
master-Salve:
-- 重置复制
reset slave;
#复制主机的命令
change master to master_host='10.143.87.21',
master_user='repl',
master_password='repl',
master_log_file='mysql-bin.000005',
master_log_pos=154;
-- 开启同步
start slave;
Stanby-Salve:
-- 重置复制
reset slave;
#复制主机的命令
change master to master_host='10.143.87.22',
master_user='repl',
master_password='repl',
master_log_file='mysql-bin.000005',
master_log_pos=154;
-- 开启同步
start slave;
2.5 查看从服务器状态的命令:
show slave status\G;
当 Slave_IO_Running
、Slave_SQL_Running
两个参数都是Yes,则说明主从配置成功!
从服务涉及到的命令:
1、停止从服务复制功能
2、重新配置主从 :
2.6 两个主机互相复制 change master
因为是双主双从,所以要配置 Stanby复制 Master, Master复制 Stanby。
在 Stanby上执行 的命令
相当于Stanby作为 从机,复制主机 Master上的数据。
#复制主机的命令
change master to master_host='10.143.87.21',
master_user='repl',
master_password='repl',
master_log_file='mysql-bin.000005',
master_log_pos=154;
在 Master上执行 的命令
相当于Master作为 从机,复制主机 Stanby上的数据。
#复制主机的命令
change master to master_host='10.143.87.22',
master_user='repl',
master_password='repl',
master_log_file='mysql-bin.000005',
master_log_pos=154;
启动Master和Stanby 服务器复制功能
start slave;
查看 Master和Stanby 服务的 Slave 服务器状态
show slave status\G;
当 Slave_IO_Running
、Slave_SQL_Running
两个参数都是Yes,则说明主从配置成功!
3. 双主从双 测试
在 Master主机新建库、新建表、 insert 记录, 然后在 Stanby 、slave1、slave2上查看复制 是否成功 。