MySQL MGR集群部署
目录
MGR(全称 MySQL Group Replication 【MySQL 组复制】)是 Oracle MySQL 于 2016 年 12 月发布 MySQL 5.7.17 推出的一个全新高可用和高扩展的解决方案。具备以下特性:
高一致性,基于原生复制及 Paxos 协议的组复制技术,并以插件的方式提供,提供一致数据安全保证;
高容错性,只要不是大多数节点坏掉就可以继续工作,有自动检测机制,当不同节点产生资源争用冲突时,不会出现错误,按照先到者优先原则进行处理,并且内置了自动化脑裂防护机制;
高扩展性,节点的新增和移除都是自动的,新节点加入后,会自动从其他节点上同步状态,直到新节点和其他节点保持一致,如果某节点被移除了,其他节点自动更新组信息,自动维护新的组信息;
高灵活性,有单主模式(图 1)和多主模式(图 2),单主模式下,会自动选主,所有更新操作都在主上进行;多主模式下,所有 server 都可以同时处理更新操作。

单主模式(图 1)

多主模式(图 2)
1 环境准备
准备三个节点
192.168.79.128
192.168.79.129
192.168.79.130
2 安装 mysql
2.1 创建用户
groupadd --system mysql
useradd --system -g mysql -s /sbin/nologin -c "MySQL Server" mysql2.2 下载 mysql
wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.7-linux-glibc2.28-x86_64.tar.xz
tar -xf mysql-8.4.7-linux-glibc2.28-x86_64.tar.xz
mv mysql-8.4.7-linux-glibc2.28-x86_64 /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql
mkdir /var/log/mysql
chown -R mysql:mysql /var/log/mysql
mkdir -p /data/mysql/{data,log}
chown -R mysql:mysql /data/mysql
mkdir /var/run/mysqld
chown -R mysql:mysql /var/run/mysqld2.3 初始化 mysql
配置/etc/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /data/mysql/data
socket = /var/run/mysqld/mysqld.sock
log-error = /var/log/mysql/error.log
pid-file = /var/run/mysqld/mysqld.pid
user=mysql
skip-name-resolve
default-time-zone = '+08:00'
[client]
socket=/var/run/mysqld/mysqld.sock初始化
/usr/local/mysql/bin/mysqld --initialize在 log-error 中可以看到临时密码
grep 'temporary password' /var/log/mysql/error.log2.4 启动 mysql
vi /usr/lib/systemd/system/mysql.service
[Unit]
Description=MySQL Community Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network-online.target
Wants=network-online.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=notify
ExecStart=/usr/local/mysql/bin/mysqld
TimeoutSec=0
LimitNOFILE = 10000
Restart=on-failure
RestartPreventExitStatus=1
# Always restart when mysqld exits with exit code of 16. This special exit code
# is used by mysqld for RESTART SQL.
RestartForceExitStatus=16
# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1启动
systemctl start mysql.service初始密码无法使用必须修改
/usr/local/mysql/bin/mysql -u root -pALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPassword123!';3 配置MGR
3.1 修改配置
修改my.cnf,在[mysqld]块中添加
# 每个节点要求不一样
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_replica_updates=ON
log-bin = /data/mysql/log/binlog
innodb_buffer_pool_size=1g
# 启动加载组复制插件
plugin_load_add='group_replication.so'
# 集群唯一ID
group_replication_group_name="01d2cd9f-956a-46af-9db3-e862f9c5e6e3"
# 是否启动MySQL服务时启动组复制,建议值:off
group_replication_start_on_boot=off
# 本地IP后面端口33061可自定义,集群通信端口,建议统一端口
group_replication_local_address= "192.168.79.128:33061"
# 初始化集群成员列表,可动态修改
group_replication_group_seeds= "192.168.79.128:33061,192.168.79.129:33061,192.168.79.130:33061"
# 判断是否为引导组
group_replication_bootstrap_group=off
# 设置白名单,这里特别注意,如果是同网段可以不用设置,如果是不同网段则需要修改否则通信端口不可访问
group_replication_ip_allowlist="192.168.79.128,192.168.79.129,192.168.79.130"单主模式额外配置
group_replication_single_primary_mode=ON
group_replication_enforce_update_everywhere_checks=OFFserver_id 每台机器唯一
group_replication_local_address 必须是本机 ip
重启 mysql
3.2 创建 MGR 内部复制用户(所有节点)
-- 临时关闭二进制日志,避免创建用户的操作被复制
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
FLUSH PRIVILEGES;
-- 重新开启二进制日志
SET SQL_LOG_BIN=1;
-- 配置组复制的恢复通道
CHANGE REPLICATION SOURCE TO SOURCE_USER='rpl_user', SOURCE_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';3.3 安装 MGR 插件(所有节点)
SHOW PLUGINS;确认 group_replication 状态是 ACTIVE
未安装进行安装,my.cnf中配置的情况下会自动加载
INSTALL PLUGIN group_replication SONAME 'group_replication.so';3.4 启动引导节点
在第一个节点执行
-- 1. 临时告诉节点自己是 bootstrap
SET GLOBAL group_replication_bootstrap_group=ON;
-- 2. 启动 Group Replication
START GROUP_REPLICATION;
-- 3. 关闭 bootstrap 模式
SET GLOBAL group_replication_bootstrap_group=OFF;3.5 启动其他节点
在其他节点执行
START GROUP_REPLICATION;3.6 查看集群状态
SELECT * FROM performance_schema.replication_group_members;3.7 单主切换多主模式
修改my.cnf,多主模式额外配置
group_replication_single_primary_mode=OFF
group_replication_enforce_update_everywhere_checks=ON重启 mysql 后,执行
START GROUP_REPLICATION;