【Linux】重生之从零开始学习运维之主从MGR高可用

MGR集群部署

12、15、18主机环境准备

ssh免密码登录

复制代码
\rm -rf .ssh/*
ssh-keygen
ssh-copy-id 127.1
scp -r .ssh 10.0.0.12:/root/
ssh root@10.0.0.12

还原基础环境

复制代码
systemctl stop mysqld
\rm -rf /var/lib/mysql/*
id mysql
复制代码
vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid

初始化mysql

复制代码
mysqld --initialize-insecure --user=mysql --basedir=/usr --datadir=/var/lib/mysql
systemctl start mysqld

设定用户认证策略

复制代码
mysql -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';"

配置文件环境

12主机

生成uuid
复制代码
uuidgen
定制配置文件
复制代码
cat >> /etc/my.cnf.d/mysql-server.cnf <<- eof
# 为了版本兼容性,更改默认的用户认证插件
default_authentication_plugin=mysql_native_password
# 设置MySQL插件目录:MGR基于插件,必须设置插件路径
plugin_dir=/usr/lib64/mysql/plugin
# 复制框架
server_id=12
# 开启binlog的GTID模式(MGR强制要求)
gtid_mode=ON
# 开启后MySQL只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行
enforce_gtid_consistency=ON
# 关闭binlog校验(MGR强制要求)
binlog_checksum=NONE
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE

# 组复制设置
# server必须为每个事务收集写集合,并使用XXHASH64哈希算法将其编码为散列
transaction_write_set_extraction=XXHASH64
# 启用组复制模块
plugin_load_add='group_replication.so'
# 告知插件加入或创建组命名,UUID
group_replication_group_name="14b78170-6fff-43a9-bf74-ea40051ac164"
# server启动时不自启组复制,为了避免每次启动自动引导具有相同名称的第二个组,所以设置为OFF。
group_replication_start_on_boot=off
# 告诉插件使用IP地址,端口33061用于接收组中其他成员转入连接
# 注意:此处可以使用ip地址,也可以使用主机名方式
group_replication_local_address="10.0.0.12:33061"
# 启动组server,种子server,加入组应该连接这些的ip和端口;其他server要加入组得由组成员同意
# 注意:此处可以使用ip地址,也可以使用主机名方式
group_replication_group_seeds="10.0.0.12:33061,10.0.0.15:33061,10.0.0.18:33061"
# 配置此服务器为引导组,这个选项必须仅在一台服务器上设置,
# 并且仅当第一次启动组或者重新启动整个组时。成功引导组启动后,将此选项设置为关闭。
group_replication_bootstrap_group=off
# 指定当前节点向集群其他成员报告的自身的主机名或 IP 地址,用于成员间通信和连接
# 这是保证集群成员间正确通信的基础配置。
report_host=10.0.0.12
report_port=3306
eof
启动服务
复制代码
systemctl restart mysqld
ss -tunlp | grep mys

15主机

定制配置文件
复制代码
cat >> /etc/my.cnf.d/mysql-server.cnf <<- eof
# 为了版本兼容性,更改默认的用户认证插件
default_authentication_plugin=mysql_native_password
plugin_dir=/usr/lib64/mysql/plugin
# 复制框架
server_id=15
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="14b78170-6fff-43a9-bf74-ea40051ac164"
group_replication_start_on_boot=off
group_replication_local_address="10.0.0.15:33061"
group_replication_group_seeds="10.0.0.12:33061,10.0.0.15:33061,10.0.0.18:33061"
group_replication_bootstrap_group=off
report_host=10.0.0.15
report_port=3306
eof
启动服务

18主机

定制配置文件
复制代码
cat >> /etc/my.cnf.d/mysql-server.cnf <<- eof
# 为了版本兼容性,更改默认的用户认证插件
default_authentication_plugin=mysql_native_password
plugin_dir=/usr/lib64/mysql/plugin 
# 复制框架
server_id=18
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="14b78170-6fff-43a9-bf74-ea40051ac164"
group_replication_start_on_boot=off
group_replication_local_address="10.0.0.18:33061"
group_replication_group_seeds="10.0.0.12:33061,10.0.0.15:33061,10.0.0.18:33061"
group_replication_bootstrap_group=off
report_host=10.0.0.18
report_port=3306
eof
启动服务

集群认证配置

12主机设定脚本

复制代码
cat > cluster_auth_init.sql <<-eof
# 如下操作不记录二进制日志
SET SQL_LOG_BIN=0;
# 创建rpl_user账户,此账户用于实现主从数据同步
CREATE USER rpl_user@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
GRANT CONNECTION_ADMIN ON *.* TO rpl_user@'%';
GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user@'%';
# 创建一个远程连接用户,便于图形化管理工具使用
create user 'remote'@'%' identified with mysql_native_password by '123456';
grant all privileges on *.* to remote@'%';
FLUSH PRIVILEGES;
# 恢复二进制日志功能并且重置二进制日志
SET SQL_LOG_BIN=1;
RESET MASTER;
eof
执行脚本
复制代码
mysql -uroot -p'123456' < cluster_auth_init.sql

15主机设定脚本

复制代码
cat > cluster_auth_init.sql <<-eof
SET SQL_LOG_BIN=0;
CREATE USER rpl_user@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
GRANT CONNECTION_ADMIN ON *.* TO rpl_user@'%';
GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user@'%';
create user 'remote'@'%' identified with mysql_native_password by '123456';
grant all privileges on *.* to remote@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
RESET MASTER;
eof
执行脚本
复制代码
mysql -uroot -p'123456' < cluster_auth_init.sql

18主机设定脚本

复制代码
cat > cluster_auth_init.sql <<-eof
> SET SQL_LOG_BIN=0;
> CREATE USER rpl_user@'%' IDENTIFIED BY '123456';
> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
> GRANT CONNECTION_ADMIN ON *.* TO rpl_user@'%';
> GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
> GRANT GROUP_REPLICATION_STREAM ON *.* TO rpl_user@'%';
> create user'remote'@'%' identified with mysql_native_password by '123456';
> grant all privileges on *.* to remote@'%';
> FLUSH PRIVILEGES;
> SET SQL_LOG_BIN=1;
> RESET MASTER;
> eof
执行脚本
复制代码
mysql -uroot -p'123456' < cluster_auth_init.sql

查看集群插件

12主机

复制代码
mysql -uroot -p'123456' -e "show plugins;"

15主机

复制代码
mysql -uroot -p'123456' -e "show plugins;"

18主机

复制代码
mysql -uroot -p'123456' -e "show plugins;"

启动集群环境

复制代码
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION USER='rpl_user', PASSWORD='123456';
SET GLOBAL group_replication_bootstrap_group=OFF;
相关推荐
cqbzcsq12 小时前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息
YangYang9YangYan13 小时前
2026初入职场学习数据分析的价值
学习·数据挖掘·数据分析
guslegend14 小时前
理论学习:什么是 Coding Agent?
学习
自传.14 小时前
尚硅谷 Vibe Coding|第三章(1) Claude Code深度使用与进阶技巧 学习笔记
笔记·学习·尚硅谷·vibecoding
踏着七彩祥云的小丑14 小时前
Go学习第9天:并发编程 + 文件操作 + 正则表达式
学习·golang·正则表达式·go
有Li14 小时前
PTCMIL:基于提示 token 聚类的全切片图像多实例学习分析文献速递/多模态医学影像最新进展
论文阅读·学习·数据挖掘·聚类·文献·医学生
憧憬成为web高手14 小时前
l33t-hoster
学习·web安全·网络安全
Dick50714 小时前
ROS2 常用命令表
人工智能·学习·算法·机器人
qeen8714 小时前
【Linux】Linux简单介绍与基本指令(上)
linux·运维·服务器·学习
.千余15 小时前
【C++】模板进阶全解:非类型参数|全特化|偏特化|分离编译完全指南
开发语言·c++·笔记·学习·其他