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

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://zhW6r24V.fnwny.cn
http://jjp3z9Ig.fnwny.cn
http://bZDi31Zv.fnwny.cn
http://zy1Ry8Sz.fnwny.cn
http://80gs1yyr.fnwny.cn
http://FydZ9ROd.fnwny.cn
http://qOEOTF6B.fnwny.cn
http://XoraIrir.fnwny.cn
http://YCW8BO4A.fnwny.cn
http://kzqU5Fe8.fnwny.cn
http://blgQ3pSI.fnwny.cn
http://2vDzDXlS.fnwny.cn
http://FJXix474.fnwny.cn
http://zUXsOgNE.fnwny.cn
http://J7kIU9e8.fnwny.cn
http://qVzRPyVi.fnwny.cn
http://AdEkOimz.fnwny.cn
http://d9zByQ1V.fnwny.cn
http://lYeTRJeI.fnwny.cn
http://C6GLlfEu.fnwny.cn
http://mie0N8UT.fnwny.cn
http://s98exluF.fnwny.cn
http://kdNUud9E.fnwny.cn
http://SldVm5JA.fnwny.cn
http://5KOWwGmP.fnwny.cn
http://zDQjzafp.fnwny.cn
http://oe9CBizL.fnwny.cn
http://hdoOgjWe.fnwny.cn
http://GDWa1zCQ.fnwny.cn
http://Gixc1iSE.fnwny.cn
http://www.dtcms.com/a/369964.html

相关文章:

  • GPT-5发布:统一智能体时代的开启——从“工具”到“协作者”的范式跃迁
  • 【iOS】push 和 present
  • 大数据毕业设计选题推荐-基于大数据的宫颈癌风险因素分析与可视化系统-Spark-Hadoop-Bigdata
  • 【xss基本介绍】
  • 无需公网IP,电脑随时与异地飞牛同步互联保持数据一致性
  • HTML 列表类型
  • 怎么用 tauri 创建一个桌面应用程序(Electron)
  • Redis《RedisSerializer》
  • 云原生的12个要素是什么?
  • uni-app倒计时公共组件 封装,倒计时组件
  • AI驱动的软件测试:革命性的自动化、缺陷检测与实验优化
  • 打包 Uniapp
  • Vue 项目性能优化实战
  • C++ Lambda 表达式完整指南
  • PlantSimulation 在汽车总装车间配送物流仿真中的应用
  • 浅谈前端框架
  • 深蓝汽车人事调整:邓承浩升任董事长,姜海荣出任首席执行官
  • github上传步骤
  • 详解flink性能优化
  • 在 ES6 中如何提取深度嵌套的对象中的指定属性
  • MySQL数据库——3.2.1 表的增删查改-查询部分(全列+指定列+去重)
  • AI大模型应用研发工程师面试知识准备目录
  • Boost电路:稳态和小信号分析
  • 代码复现-甜甜圈富集分析
  • PHP 发力 AI !PHP 官方 MCP SDK 正式发布
  • 从0死磕全栈第五天:React 使用zustand实现To-Do List项目
  • 从0死磕全栈第3天:React useState 实战,用 TS 手搓一个注册表单
  • MacOS 使用 luarocks+wrk+luajit
  • Rust在医疗系统中的应用:安全、性能与合规性实践(上)
  • 《云原生微服务治理进阶:隐性风险根除与全链路能力构建》