当前位置: 首页 > java >正文

MySQL集群高可用架构之组复制 (MGR)

MySQL集群高可用架构之组复制 (MGR)

MGR是MySQL官方推出的高可用与高扩展集群解决方案。

MGR提供单主和多主两种模式,不仅实现了数据同步,更通过组协调机制保证事务一致性:所有成员必须对事务的全局顺序达成共识,每个节点独立但一致地决定提交或回滚。该系统具备内置脑裂保护——一旦发生网络分区导致无法达成多数共识,集群将暂停服务直至网络恢复,避免数据冲突。

底层依赖组通信系统(GCS)实现故障检测、成员管理和可靠的消息传递,为MGR提供基础通信保障。

1、组复制流程
在这里插入图片描述
首先我们将多个节点共同组成一个复制组,在执行读写(RW)事务的时候,需要通过一致性协议层(Consensus 层)的同意,也就是读写事务想要进行提交,必须要经过组里“大多数人”(对应 Node 节点)的同意,大多数指的是同意的节点数量需要大于 (N/2+1),这样才可以进行提交,而不是原发起方一个说了算。而针对只读(RO)事务则不需要经过组内同意,直接 提交 即可 。
2、组复制单主和多主模式
single-primary mode(单写或单主模式)
单写模式 group 内只有一台节点可写可读,其他节点只可以读。当主服务器失败时,会自动选择新的主服务器。
在这里插入图片描述
multi-primary mode(多写或多主模式)
组内的所有机器都是 primary 节点,同时可以进行读写操作,并且数据是最终一致的。
在这里插入图片描述
3、实现mysql组复制-单主模式

3.1 环境说明

主机名ip操作系统版本mysql版本
master192.168.194.163rhel7.9mysql8.0.40
rep1192.168.194.164rhel7.9mysql8.0.40
rep2192.168.194.165rhel7.9mysql8.0.40

3.2 所有主机、库的设置

# 三个主机均需要配置hosts文件的解析,如果不配置域名解析则需要在/etc/my.cnf中加一条配置skip-name-resolve
[root@node1 ~]# vim /etc/hosts
192.168.194.163 master
192.168.194.164 rep1
192.168.194.165 rep2# 修改所有库的配置文件
[root@master ~]# vim  /etc/my.cnf.d/mysql-server.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log_timestamps=SYSTEM   
# 设置日志时间和本地时间保持一致server_id=163 
# 设置各自库的唯一标识disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"   
# 组复制,数据必须存储在 InnoDB 事务存储引擎中
gtid_mode=ON  
#组复制要开启gtid
enforce_gtid_consistency=ON
log_bin=binlog  
#默认开启
log_slave_updates=ON 
#默认开启
binlog_format=ROW  
#默认开启
transaction_write_set_extraction=XXHASH64  
#默认开启,组复制使用此信息在所有组成员上进行冲突检测
plugin_load_add='group_replication.so'  
#将组复制插件添加到服务器启动时加载的插件列表中
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"  
#告诉插件它正在加入或创建的组名为“aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaa”
group_replication_start_on_boot=off  
#插件在服务器启动时不自动启动操作,使用手动启动插件group_replication_local_address= "192.168.168.128:33061"
# 写各自库对应主机的IP
# 与其它主机通信时使用的网络地址和端口group_replication_group_seeds= "192.168.194.163:33061,192.168.194.164:33061,192.168.194.165:33061"  
#设置组成员的主机名和端口
group_replication_bootstrap_group=off  
#指示插件是否启动该组,在首次引导组时在一个服务器上启用
group_replication_ip_whitelist="192.168.194.0/24,127.0.0.1/8"  
#仅允许白名单内的 IP 加入复制组
group_replication_recovery_use_ssl=on 
#caching_sha2_password插件要求安全传输密码,开启主从之间的连接使用SSL/TLS # 重启服务
[root@master ~]#systemctl restart mysqld# 在所有的库中使用sql语句添加复制账号并授予权限
SET SQL_LOG_BIN=0;
CREATE USER rp@'%' IDENTIFIED BY '123';
GRANT REPLICATION SLAVE ON *.* TO rp@'%';
GRANT CONNECTION_ADMIN ON *.* TO rp@'%';
GRANT BACKUP_ADMIN ON *.* TO rp@'%';
GRANT GROUP_REPLICATION_STREAM ON *.* TO rp@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE REPLICATION SOURCE TO SOURCE_USER='rp', SOURCE_PASSWORD='123' FOR CHANNEL 'group_replication_recovery';

3.3 master的配置

# 查看是否有group_replication插件
mysql> show plugins;
| group_replication               | ACTIVE   | GROUP REPLICATION  | group_replication.so | GPL     |
# 启动MGR集群
# 使用当前服务器作为引导服务器启动一个新的群组复制过程或者恢复一个已经存在的群组
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION USER='rp',PASSWORD='123';
SET GLOBAL group_replication_bootstrap_group=OFF;
# 查看组信息
mysql> SELECT * FROM performance_schema.replication_group_members;

在这里插入图片描述
3.4 从上的配置

# 开启组复制
mysql> START GROUP_REPLICATION USER='rp', PASSWORD='123';
# 查看组信息
mysql> SELECT * FROM performance_schema.replication_group_members;

在这里插入图片描述
3.5 检测

#测试主节点宕机
mysql> stop  GROUP_REPLICATION;
#从库节点查看,发现仅剩2个节点,并且自动选举出主节点
mysql> SELECT * FROM performance_schema.replication_group_members;

在这里插入图片描述
4、实现mysql组复制-多主模式

修改所有库的配置文件,添加如下内容

[root@master ~]# vim  /etc/my.cnf.d/mysql-server.cnf
#关闭单master模式
loose-group_replication_single_primary_mode=off
#多主一致性检查
loose-group_replication_enforce_update_everywhere_checks=ON# 重启服务
[root@master ~]#systemctl restart mysqld
#在其中一台主机里面执行以下mysql命令
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
#在另外两台主机里面执行以下mysql命令,开启组复制
mysql> START GROUP_REPLICATION;
mysql> SELECT * FROM performance_schema.replication_group_members;

在这里插入图片描述

http://www.xdnf.cn/news/20464.html

相关文章:

  • 校园洒水车cad+三维图+设计说书
  • 金属也有“记忆力”?—聊聊二合一玛哈特矫平机如何“消除”金属的记忆
  • 修复存在坏块或05、C4、C5 S.M.A.R.T错误的硬盘
  • Spring Cloud Alibaba快速入门02-Nacos
  • FRCNet
  • Fab资源快速导入UE
  • Shell 脚本实现系统监控与告警
  • Spring Boot中MyBatis的定义与使用
  • IOC为什么交由spring容器管理?
  • 操作系统研发工作心得体会 - 于复杂性中构建秩序
  • 每日一题(2)
  • MySQL学习记录-索引
  • 携程社招前端面经
  • pthread_detach函数
  • 2025最新超详细FreeRTOS入门教程:第二章 FreeRTOS任务创建
  • 设计一个 AB 测试平台
  • 实例和对象的区别
  • 【目录-单选】鸿蒙HarmonyOS开发者基础
  • 自适应滤波器:Ch4 最小均方(LMS)算法
  • [光学原理与应用-433]:晶体光学 - 晶体光学是研究光在单晶体中传播规律及其伴随现象的分支学科,聚焦于各向异性光学媒质的光学特性
  • 上海“我店”模式:消费增值新玩法及其隐忧
  • 论文阅读:VGGT Visual Geometry Grounded Transformer
  • 【C++】引用的本质与高效应用
  • 【高等数学】第十一章 曲线积分与曲面积分——第三节 格林公式及其应用
  • javascript 国际化方法
  • AI 生成式艺术重塑动漫角色创作:从技术逻辑到多元可能性(一)
  • GPT-5发布:统一智能体时代的开启——从“工具”到“协作者”的范式跃迁
  • 详解MySQL环境变量配置及其在备份中的应用
  • 计算机内存的工作原理
  • 打工人日报#20250906