Mysql 8 group replication组复制集群单主配置图解
Posted ShenLiang2025
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql 8 group replication组复制集群单主配置图解相关的知识,希望对你有一定的参考价值。
mysql 8 MGR集群单主配置图解
声明与简介
本文的数据来自网络,部分代码也有所参照,这里做了注释和延伸,旨在技术交流,如有冒犯之处请联系博主及时处理。本文主要介绍mysql的MGR集群的配置。
MySQL Group Replication(MGR)是MySQL官方在5.7.17版本引进的一个数据库高可用与高扩展的解决方案,以插件形式提供,实现了分布式下数据的最终一致性。其特点如下:
- 高一致性:基于分布式paxos协议实现组复制,保证数据一致性;
- 高容错性:自动检测机制,只要不是大多数节点都宕机就可以继续工作,内置防脑裂保护机制;
- 高扩展性:节点的增加与移除会自动更新组成员信息,新节点加入后,自动从其他节点同步增量数据,直到与其他节点数据一致;
- 高灵活性:提供单主模式和多主模式,单主模式在主库宕机后能够自动选主,所有写入都在主节点进行,多主模式支持多节点写入
注:1 当前MGR集群验证环节在VVMware虚拟机内,真实环境可略过虚拟机复制环节。
2 当前虚拟机内mysql库运行在Centos 8内,版本号是 8.0.23、端口号3306。
3 MGR集群当前验证环境192.168.111.128(host_128)是单主节点,host_129、host_130是从节点。
虚拟机复制
Step 1:先选择一台虚拟机(鼠标点中),然后找到克隆按钮。
Step 2:克隆虚拟机当前状态
Step 3:选择创建完整克隆
Step4:配置虚拟机名字和存储位置
Step 5:耐心等待克隆完毕
Step 6:修改新克隆的虚拟机,修改IP
#修改网卡信息
vi /etc/sysconfig/network-scripts/ifcfg-ens33
Step 7:修改主机名,配置IP与主机名映射。
# 定义IP与主机名映射
vi /etc/hosts
Step 8:重启服务器
#重启虚拟机
reboot now
Step 9:同样的方式操作另外一台虚拟机。
准备环境
- 准备3台版本一致(一样)的mysql数据库的主机,当前主服务数据库服务的操作系统都是linux。详见虚拟机复制环节。
- 192.168.111.128(host_128)是单主节点,192.168.111.129(host_129)、192.168.111.130(host_130)是从节点。
配置MGR集群
安装MGR插件
-- 三台主机里都安装group_replication插件,可事先三台都执行该操作。
-- Step 1查看 MGR插件是否安装,如果已安装可忽略如下安装插件环节。
SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE, PLUGIN_LIBRARY, PLUGIN_LICENSE FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'group%' AND PLUGIN_STATUS='ACTIVE';
-- Step 2 安装MGR插件
install PLUGIN group_replication SONAME 'group_replication.so';
-- Step 3 验证MGR插件状态
SELECT PLUGIN_NAME, PLUGIN_STATUS, PLUGIN_TYPE, PLUGIN_LIBRARY, PLUGIN_LICENSE FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'group%' AND PLUGIN_STATUS='ACTIVE';
生成集群组名
-- Way1 :参照官网使用固定的值aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa,该值在三个节点都配置成一样。
-- Way2:通过uuid生成唯一的id。
select replace(uuid(),"-","") as uuid;
配置单主节点MGR参数
Step 1: 修改mysql配置文件/etc/my.cnf,追加引用外部文件参数
!include /etc/my.cnf.d/ mgr_auth.cnf
Step 2: /etc/my.cnf.d目录内新建MGR配置文件mgr_auth.cnf
Step 3 mgr_auth.cnf文件内配置如下内容:
[mysqld]
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
server_id=1 #其它节点相应修改,不能重复
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "host_128:33091" #修改成节点对应主机名
group_replication_group_seeds= "host_128:33091,host_129:33091,host_130:33091"
group_replication_bootstrap_group=off
注:1 这里的step 1外部引用MGR配置文件是为了mysql配置和MGR参数分离,如果不需要可以将MGR参数放置于mysql的配置文件内。
2 这里的group_replication_group_name来源于生成组名环节。
端口加入防火墙信任列表
#MGR集群组复制端口33091加入信任列表
firewall-cmd --add-port=33091/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
#注:如果防火墙关闭,可忽略此步骤。
重启单主mysql
#重启单主节点数据库
service mysqld restart
创建同步用户
--单主节点创建该用户并赋予从服务复制权限,从节点在配置其它节点环节会有相同的操作。
SET SQL_LOG_BIN=0;
create user rpl_user@'%' identified by 'Rpl_user123';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
启动MGR集群主节点
--在单主节点上启动MGR集群引导
SET GLOBAL group_replication_bootstrap_group=ON;
--用之前创建的用户rpl_user创建同步规则认证
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='Rpl_user123' FOR CHANNEL 'group_replication_recovery';
-- 启动MGR
start group_replication;
-- 查看MGR集群状态
SELECT * FROM performance_schema.replication_group_members;
--在主库上关闭MGR集群引导
SET GLOBAL group_replication_bootstrap_group=OFF;
配置其它从节点
#Step 1:scp分发mysql配置文件到129和130主机上去
scp -r /etc/my.cnf root@host_129:/etc/
scp -r /etc/my.cnf root@host_130:/etc/
#Step 2:分发MGR配置文件到129和130主机上去
scp -r /etc/my.cnf.d/mgr_auth.cnf root@host_129:/etc/my.cnf.d/
scp -r /etc/my.cnf.d/mgr_auth.cnf root@host_130:/etc/my.cnf.d/
#Step3: 分别修改129、130 里的MGR配置文件。
#host_129内mgr_auth.cnf文件里修改部分的参数有:
server-id = 2
group_replication_local_address= "host_129:33091"
#host_130内mgr_auth.cnf文件里修改部分的参数有:
server-id = 3
group_replication_local_address= "host_130:33091"
启动MGR集群从节点
-- 将节点host_129里接入组。
-- Step 1:重复创建同步用户环节在从节点里创建用户并赋权。
-- Step 2:添加用户认证
CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='Rpl_user123' FOR CHANNEL 'group_replication_recovery';
-- 注: mysql 8.0.23之前版本用以下命令:
/*
CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD=' Rpl_user123' FOR CHANNEL 'group_replication_recovery';
*/
-- Step 3:开始group_replication组复制,使得当前节点接入组。
START GROUP_REPLICATION;
-- Step 4:当前节点上查看MGR集群 成员与状态
SELECT * FROM performance_schema.replication_group_members;
以上同样的操作应用于host130,最终集群的状态都在线且一个是Primary,另外两个是SECONDARY。至此MGR单主模式搭建完毕。
验证
从节点数据库修改
从库里插入数据时报错,符合单主模式的特点(即仅主节点可写,从节点不可写)。
ERROR 1290 (HY000): The MySQL server is running with the --super-read-only option so it cannot execute this statement
延展阅读
查看插件系统路径
-- SQL命令查看插件的系统路径
show variables like 'plugin%';
查看MGR插件位置
#查看MGR插件系统路径
ll /usr/lib64/mysql/plugin/ | grep group*
查看plugin命令帮助手册
-- 查看SQL命令的使用说明
? show plugins;
重新初始化数据库
#Step 1初始化数据库
#赋予数据目录访问权限给mysql用户
chown -R mysql:mysql /data/mysql/
# 删除数据目录下文件
rm -rf /data/mysql/*
#初始化数据库
mysqld --initialize --user=mysql --basedir=/usr/ --datadir=/data/mysql/
# 找到生成的临时密码
grep 'temporary password' /var/log/mysqld.log
注:1 初始化数据库操作仅限于实验或者新环境。
2 初始化mysql时配置参数不能有错误。
# Step 2 启动服务修改数据库密码
# 启动mysql服务
service mysqld start
# 以初始密码登入数据库
mysql -uroot -p'czkik+j)y84A'
# 修改新的数据库密码(Mysql里操作)
alter user root@localhost identified by 'root1234';
以上是关于Mysql 8 group replication组复制集群单主配置图解的主要内容,如果未能解决你的问题,请参考以下文章
组复制安全 | 全方位认识 MySQL 8.0 Group Replication
组复制常见疑问 | 全方位认识 MySQL 8.0 Group Replication
Mysql 8 group replication组复制集群单主配置图解
组复制要求和限制 | 全方位认识 MySQL 8.0 Group Replication