MySQL8.0轻松搞定GTID组复制
前言
之前文章介绍了MySQL8.0主从复制,以及衍生出来的主主复制(可点如下链接查看)。
MySQL8.0轻松搞定GTID主从复制
MySQL8.0轻松搞定GTID主主复制
今天来聊一聊MySQL8.0的组复制。
主从复制技术仅解决了数据同步的问题,如果主服务器宕机,意味着数据库管理员需要介入,应用系统可能需要修改数据库连接地址或者重启才能实现。
组复制只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理。比如,3台服务器的集群,允许其中1台宕机。
组复制工作模式:
单主模式,其中只有一个服务器接受更新,单主是系统自动选举出来的。
多主模式,其中所有服务器都可以接受更新。
昆仑数据库存储节点的单个分片,采用的是单主模式的组复制。
在单主模式下,当主节点宕机时,将自动选择新的主节点,选举方法如下图所示:
在多主模式下,每个节点都可以写数据,因此不存在节点选举,如果组成员发生故障,业务切换节点即可。如下图所示:
下面介绍在安装好MySQL8的centos8虚拟机上,实现单主模式组复制,以及多主模式组复制的过程:
虚拟机列表:
G1: 192.168.25.150
G2: 192.168.25.151
G3: 192.168.25.152
一、G1配置
1.1. 修改主机名,并重启生效
vim /etc/hosts
192.168.25.150 centos8-0
192.168.25.151 centos8-1
192.168.25.152 centos8-2
1.2. 关闭防火墙并设置开机不启动
systemctl stop firewalld.service
systemctl disable firewalld.service
1.3. 关闭Selinux并设置开机不启动
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
1.4. 删除auto.cnf,重启自动生成server-uuid
rm -f /var/lib/mysql/auto.cnf
1.5. 设置配置文件
vim /etc/my.cnf
# 添加
[mysqld]
#binlog默认已经打开,不用设置
#服务器ID,每台机器不能重复
server_id=1
#全局事物标识GTID开关
gtid_mode=on
enforce_gtid_consistency=true
#组复制不支持binlog校验
binlog_checksum=none
#事务写集算法,默认就是
transaction_write_set_extraction=xxhash64
#组复制插件
plugin_load_add='group_replication.so'
#组复制UUID,组内机器相同
group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
group_replication_start_on_boot=off
group_replication_bootstrap_group=off
group_replication_local_address="192.168.25.150:13306"
group_replication_group_seeds="192.168.25.150:13306,192.168.25.151:13306,192.168.25.152:13306"
1.6. 重启MySQL
systemctl restart mysqld.service
1.7. 登录mysql,添加用于同步的数据库账号
mysql> set sql_log_bin=0; #不记录二进制日志
mysql> create user 'kunlun'@'%' identified by '123456';
mysql> grant replication slave on *.* to 'kunlun'@'%';
mysql> flush privileges;
mysql> set sql_log_bin=1;
mysql> change master to master_user='kunlun', master_password='123456' for channel 'group_replication_recovery';
1.8. 启动组复制功能
## 个主需要打开bootstrap_group,启动复制服务后,再关闭
mysql> set global group_replication_bootstrap_group=on;
mysql> start group_replication;
mysql> set global group_replication_bootstrap_group=off;
mysql> select * from performance_schema.replication_group_members;
+-------------+-------------+--------------+-------------+
| MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE |
+-------------+-------------+--------------+-------------+
| centos8- | 3306 | ONLINE | PRIMARY |
+-------------+-------------+--------------+-------------+
二、G2,G3配置
步骤1.5配置文件, G2,G3分别修改如下
server_id=2
group_replication_local_address="192.168.25.151:13306"
server_id=3
group_replication_local_address="192.168.25.152:13306"
步骤1.8只需启动复制服务
mysql>start group_replication;
mysql> select * from performance_schema.replication_group_members;
+-------------+-------------+--------------+-------------+
| MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE |
+-------------+-------------+--------------+-------------+
| centos8- | 3306 | ONLINE | PRIMARY |
| centos8-1 | 3306 | ONLINE | SECONDARY |
| centos8-2 | 3306 | ONLINE | SECONDARY |
+-------------+-------------+--------------+-------------+
三、多主模式配置
3.1. 设置配置文件,G1,G2,G3增加两项配置
vim /etc/my.cnf
group_replication_single_primary_mode=off
group_replication_enforce_update_everywhere_checks=on
3.2. 重启MySQL
systemctl restartmysqld.service
## 个主需要打开bootstrap_group,启动复制服务后,再关闭
mysql> set global group_replication_bootstrap_group=on;
mysql> start group_replication;
mysql> set global group_replication_bootstrap_group=off;
3.4. G2,G3只需启动复制服务
mysql>start group_replication;
mysql> select * from performance_schema.replication_group_members;
+-------------+-------------+--------------+-------------+
| MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE |
+-------------+-------------+--------------+-------------+
| centos8- | 3306 | ONLINE | PRIMARY |
| centos8-1 | 3306 | ONLINE | PRIMARY |
| centos8-2 | 3306 | ONLINE | PRIMARY |
+-------------+-------------+--------------+-------------+
至此,多主模式的组复制已经搭建成功。
THE END
相关文章