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

十七、MYSQL MGR高可用

十七、MYSQL MGR高可用1.MGR概念1.1 MGR 定义MGR 全称MySQL Group Replication它是 MySQL 提供的一种基于组通信和事务一致性机制的高可用复制方案。1.2 核心特征多节点组成复制组支持故障自动检测支持成员自动加入和退出支持自动选举主节点支持单主模式和多主模式1.3 MGR 架构组成MGR 典型由以下部分组成主节点Primary处理写请求向组内广播事务从节点Secondary接收并应用事务通常只提供只读服务组通信层用于节点之间交换状态维护组成员视图实现事务分发与确认一致性控制机制检测事务冲突保证事务有序提交1.4 MGR 模式介绍1. 单主模式Single-Primary Mode⭐组内只有一个主节点可写其他节点只读最常见结构清晰冲突少2. 多主模式Multi-Primary Mode多个节点都可写可能发生冲突管理复杂对业务要求高1.5 事务执行流程在单主模式下事务执行过程如下客户端把写请求发送给主节点主节点接收事务并生成写集信息主节点把事务广播给组内其他成员其他成员进行冲突检测和确认达到组内确认条件后事务提交成功事务再被应用到其他节点核心主节点不是“自己写完就算成功”提交前需要组内成员参与确认这提高了一致性也增强了故障切换时的数据可靠性2.高可用机制与生产架构2.1 故障检测与自动切换如果主节点异常组内检测到主节点失联更新成员视图在剩余可用节点中重新选举主节点新主节点接管写服务2.2 多数派机制1.多数派定义MGR 集群要继续正常工作必须满足多数节点在线。例如3 个节点时至少 2 个节点在线5 个节点时至少 3 个节点在线2. 为什么需要多数派为了避免脑裂问题。3. 脑裂解释如果网络分区后两个子集群都认为自己是“合法主集群” 就可能产生双主写入导致数据严重不一致。4. 多数派的价值保证集群中只有一边能继续提供写服务防止多个节点同时对外写入提高一致性安全性2.3 MGR 高可用原理总结多节点组成复制组节点间持续交换状态事务在组内传播并确认主节点故障后自动重新选主多数派保证集群一致性和防脑裂2.4 MGR 与传统主从复制对比对比项传统主从复制MGR节点关系主从结构组成员结构故障切换通常依赖人工或外部工具支持自动选主一致性保障较弱常为异步更强组内确认防脑裂能力较弱有多数派机制高可用能力需要额外组件原生支持较强2.5 MGR 与代理层的关系MGR负责的是数据复制主节点选举高可用机制但 MGR不负责读写分离SQL 路由客户端连接切换这些通常由ProxySQLHAProxyMySQL RouterKeepalived VIP来完成。3.具体实验案例3.1 环境准备三台机器分别为192.168.202.135 mysql1192.168.202.136 mysql2192.168.202.137 mysql3MGR 端口MySQL 端口3306Group Replication 端口33061# 三台都执行关闭防火墙并永久关闭 systemctl stop firewalld systemctl disable firewalld # 关闭 SELinux setenforce 0 # 修改主机名并互相解析 hostnamectl set-hostname mysql1 hostnamectl set-hostname mysql2 hostnamectl set-hostname mysql3 ​ vi /etc/hosts 192.168.202.135 mysql1 192.168.202.136 mysql2 192.168.202.137 mysql3# 下载依赖工具 yum install -y yum-utils ​ # 上传并解压mysql5.7 依赖环境的rpm包: yum install -y unzip unzip mysql5720_rpms.zip ​ # 切换到存放所有 MySQL 及依赖 RPM 包的文件夹 cd mysql5720_rpms # yum 会自动识别当前目录下所有 .rpm 文件并处理依赖关系若本地包已包含所有依赖会直接安装若缺依赖会提示 yum localinstall -y *.rpm3.2 修改配置文件和初始密码# 启动数据库 systemctl start mysqld ​ # 修改配置文件 vim /etc/my.cnf [mysqld] # 其他原有配置如datadir、socket等保持不变新增以下两行 validate_password_policyLOW # 降低强度策略仅检查长度 validate_password_length6 # 最小密码长度设为6位 skip-ssl # 关闭ssl访问 # 重启mysqld并设置开机自启动 systemctl restart mysqld systemctl enable mysqld # 查看mysql数据库初始密码 grep password /var/log/mysqld.logPS如果密码内容有特殊字符需要转义 \ # 进入数据库 mysql -uroot -p # 修改密码 alter user rootlocalhost identified by abc123; # 验证 show databases; # 验证2: exit 退出 mysql -uroot -pabc1233.3 修改 MySQL 配置mysql1 配置server-id1 log-binmysql-bin binlog_formatROW gtid_modeON enforce_gtid_consistencyON log_slave_updatesON master_info_repositoryTABLE relay_log_info_repositoryTABLE transaction_write_set_extractionXXHASH64 binlog_checksumNONE loose-group_replication_group_nameaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee loose-group_replication_start_on_bootoff loose-group_replication_local_address192.168.202.135:33061 loose-group_replication_group_seeds192.168.202.135:33061,192.168.202.136:33061,192.168.202.137:33061 loose-group_replication_bootstrap_groupoff loose-group_replication_single_primary_modeON loose-group_replication_enforce_update_everywhere_checksOFFmysql2 配置server-id2 log-binmysql-bin binlog_formatROW gtid_modeON enforce_gtid_consistencyON log_slave_updatesON master_info_repositoryTABLE relay_log_info_repositoryTABLE transaction_write_set_extractionXXHASH64 binlog_checksumNONE loose-group_replication_group_nameaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee loose-group_replication_start_on_bootoff loose-group_replication_local_address192.168.202.136:33061 loose-group_replication_group_seeds192.168.202.135:33061,192.168.202.136:33061,192.168.202.137:33061 loose-group_replication_bootstrap_groupoff loose-group_replication_single_primary_modeON loose-group_replication_enforce_update_everywhere_checksOFFmysql3 配置server-id3 log-binmysql-bin binlog_formatROW gtid_modeON enforce_gtid_consistencyON log_slave_updatesON master_info_repositoryTABLE relay_log_info_repositoryTABLE transaction_write_set_extractionXXHASH64 binlog_checksumNONE loose-group_replication_group_nameaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee loose-group_replication_start_on_bootoff loose-group_replication_local_address192.168.202.137:33061 loose-group_replication_group_seeds192.168.202.135:33061,192.168.202.136:33061,192.168.202.137:33061 loose-group_replication_bootstrap_groupoff loose-group_replication_single_primary_modeON loose-group_replication_enforce_update_everywhere_checksOFF# 配置完后重启 systemctl restart mysqld3.4 创建 MGR 用户# 先在 主节点 执行后同步到其他节点,登录 MySQL mysql -uroot -p # 创建复制用户 create user repl% identified by Repl123456; # 给后面安装的插件授权 grant replication slave on *.* to repl%; # 刷新 flush privileges;安装 Group Replication 插件3.5 安装 Group Replication 插件# 三台都执行 install plugin group_replication soname group_replication.so; # 确认状态是 ACTIVE。 show plugins;3.6 配置复制通道# 三台都执行 change master to master_userrepl,master_passwordRepl123456 for channel group_replication_recovery;3.7 启动节点# 启动第一个节点,先在 mysql1 上执行 set global group_replication_bootstrap_groupON; start group_replication; set global group_replication_bootstrap_groupOFF; # 查看状态 select * from performance_schema.replication_group_members; # 此时应该只有 mysql1 一个节点状态是 ONLINE。# 启动另外两个节点 # 在 mysql2 上执行 start group_replication; # 在 mysql3 上执行 start group_replication; # 然后回到任意节点查看 select * from performance_schema.replication_group_members; # 应该看到 3 个节点都在状态都是 ONLINE。3.8 测试主节点写入# 查看当前主节点 select variable_value from performance_schema.global_status where variable_namegroup_replication_primary_member;测试主节点写入单主模式下只有一个节点可以写入# 插入测试表 create database testmgr; use testmgr; ​ create table t1 ( id int primary key auto_increment, name varchar(50) ); ​ insert into t1(name) values(abc); ​ # 然后到另外两个节点查询 select * from testmgr.t1;如果都能查到说明同步正常。3.9 测试高可用切换一模拟主节点故障# 当前主节点是 mysql1你执行 systemctl stop mysqld # 在另外两个节点执行 select * from performance_schema.replication_group_members;# 查看当前主节点 select variable_value from performance_schema.global_status where variable_namegroup_replication_primary_member;(二验证写入# 在新的主节点上执行 insert into testmgr.t1(name) values(def);# 然后其他节点查询看数据是否同步。 select * from testmgr.t1;4.常见问题1. 节点启动失败重点检查server-id是否唯一gtid_modeONbinlog_formatROWtransaction_write_set_extractionXXHASH6433061 端口是否放行hostname / hosts 是否解析正常2. 节点进不来组看日志tail -f /var/log/mysqld.log3. 不能写入单主模式下只有主节点能写其他节点默认只读这是正常的。
http://www.gsyq.cn/news/1356060.html

相关文章:

  • Dark Reader动态主题修复:三步解决网站深色适配难题
  • Path of Building PoE2:终极流放之路2角色构建指南与实战教程
  • 黄金回收白银回收铂金回收彩金回收店铺推荐株洲县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • 黄金回收白银回收铂金回收彩金回收店铺推荐中江县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • 如何在5分钟内免费下载B站大会员4K视频?完整B站视频下载指南
  • 戴森球计划工厂蓝图库:让复杂生产线变得简单有趣
  • UWB自动跟随技术深度解析:高尔夫球包车的“智能随行“是如何实现的
  • 戴森球计划工厂蓝图库:从零到终极自动化生产的完整指南
  • 洛雪音乐音源聚合系统:构建全网音乐资源一体化解决方案
  • 原神游戏性能优化终极方案:内存调控技术实现帧率突破完整指南
  • EasyHook终极指南:3个简单步骤实现64位系统下的32位程序API钩子
  • GEO分析系统建设:解构大模型搜索的“黑盒”——AI推荐的底层检索与交叉验证机制
  • 字符缓冲流与字节缓冲流的实战对比
  • WorkshopDL终极指南:3分钟掌握跨平台Steam模组下载的完整解决方案
  • Windows系统res-downloader HTTPS证书配置实战:从原理到高级优化的专业指南
  • 3个步骤实现浏览器中魔兽争霸与星际争霸模型渲染的完整指南
  • 黄金回收白银回收铂金回收彩金回收店铺推荐竹溪县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • 黄金回收白银回收铂金回收彩金回收店铺推荐忠县2026最新五家靠谱回收门店TOP5排行榜及联系方式推荐 - 前途无量YY
  • Bifrost三星固件下载工具:5分钟掌握跨平台固件管理终极方案
  • 我为什么会把 555电影 当成“工具站”来看
  • 【2】基于 Docker + YOLOv8 环境实现模型蒸馏实战(GTX1660S + Ubuntu22.04)
  • 边缘计算加大模型:低延迟场景方案
  • 如何解决跨平台资源下载难题:res-downloader的完整使用指南
  • 洛雪音乐音源配置完全指南:免费搭建个人音乐库的终极方案
  • 用LangChain搭一个Agent:框架实战入门详解
  • VutronMusic:跨平台音乐播放器的终极解决方案 - 高效管理本地与在线音乐
  • Spring-Ai-Alibaba [03] multiple-llm-client-demo
  • 抖音无水印视频下载终极指南:免费快速获取高清素材
  • CANN 异步推理:隐藏推理延迟提升吞吐量的完整方案
  • Python EXE逆向工程实战指南:3步高效提取源代码的完整教程