MySQL MGR 单主高可用集群部署
目录一、什么是MGR二、MGR的工作原理三、为什么需要 MySQL MGR 架构四、MGR的模式4.1 单主模式4.2 多主模式五、MySQL MGR 架构作用六、MGR集群部署流程6.1 系统基础配置6.2 统一配置my.cnf6.3 创建复制账户所有节点都执行6.4 安装组复制插件6.5 引导第一个节点主节点6.5 加入其他节点6.6 验证数据同步七、MGR架构管理7.1 监控状态7.2 启动集群7.3 节点停止7.4 复制用户7.5 主从切换7.6 异常处理一、什么是MGRMGR 是 MySQL Group ReplicationMySQL 组复制的简称是 一种基于分布式一致性协议Paxos的高可用集群解决方案。二、MGR的工作原理它的核心工作原理是将多个 MySQL 节点组成一个复制组组内每个事务提交前都需要经过多数节点例如 3 个节点中的至少 2 个投票确认并达成一致后才会真正提交并应用从而保证整个集群的数据强一致性。三、为什么需要 MySQL MGR 架构采用 MySQL MGRGroup Replication组复制架构最核心、最直接的目的就是解决传统主从复制长期存在的三大痛点数据可能丢失、故障切换需人工干预、以及集群成员管理不灵活。四、MGR的模式4.1 单主模式1、核心特点集群中只有一个节点可读写Primary其余节点自动设为只读Super Read-Only发生故障时会自动触发选举选出新主节点。2、使用场景绝大多数生产环境特别是对数据一致性要求高的金融、支付等场景。4.2 多主模式1、核心特点集群中所有节点均可同时进行读写操作支持多点写入。2、使用场景对写入并发要求极高的特殊场景但需要应用层有能力处理可能的数据冲突。五、MySQL MGR 架构作用作用维度具体作用说明解决的问题 / 带来的价值数据一致性保障基于 Paxos 协议事务必须获得超过半数N/21的节点确认才能提交。从机制上杜绝了主库故障时的数据丢失风险确保提交的数据在多数节点上都有副本达到金融级的数据安全。自动化高可用HA内置自动故障检测、成员投票和主节点选举机制无需第三方工具。主库宕机后集群可在数十秒内自动完成故障转移大幅缩短业务不可用时间RTO降低运维人工介入成本。动态弹性扩缩容支持节点在线、动态地加入或移除集群成员视图会自动更新。简化了集群的扩缩容、版本升级等日常运维操作使集群管理更灵活、风险更低。防止脑裂依靠多数派投票机制来决定集群的有效成员和主节点。在网络分区等异常情况下能确保集群不会产生多个“主库”从算法层面保证了数据的一致性和集群的决策唯一性。灵活的部署模式支持 单主Single-Primary 和 多主Multi-Primary 两种模式。单主模式提供标准的高可用读写分离多主模式可扩展写入能力但生产环境强烈推荐单主模式以避免写冲突。六、MGR集群部署流程6.1 系统基础配置主机名IP地址角色mysql110.8.0.100primarymysql210.8.0.105secondarymysql310.8.0.106secondary三台服务器都配置vim /etc/hosts 10.8.0.100 mysql1 10.8.0.105 mysql2 10.8.0.106 mysql36.2 统一配置my.cnf任意节点执行 uuidgen 查看uuid# 在主服务器配置 [mysqld] # 基础设置server_id不同的机器配置不一样 server-id1 port3306 usermysql datadir/var/lib/mysql socket/var/lib/mysql/mysql.sock log-error/var/log/mysqld.log pid-file/var/run/mysqld/mysqld.pid validate_password.policyLOW validate_password.length6 # 字符集 character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci # 关闭全局ssl ssl0 skip-ssl require_secure_transportOFF # GTID 与二进制日志MGR 必需 gtid_modeON enforce_gtid_consistencyON binlog_formatROW log_binbinlog log_slave_updatesON master_info_repositoryTABLE relay_log_info_repositoryTABLE transaction_write_set_extractionXXHASH64 binlog_transaction_dependency_trackingWRITESET binlog_checksumNONE # 组复制基本参数 #其中三台机器的group_replication_group_name参数必须一致可以通过在任意一台机器执行uuidgen命令获取该参数 # group_replication_local_address参数每台机器不一致需要根据该机器的IP设置 plugin_load_addgroup_replication.so group_replication_group_name16343e89-54ee-4fc5-a370-f474b77647bd group_replication_start_on_bootOFF group_replication_local_address10.8.0.100:33061 group_replication_group_seeds10.8.0.100:33061,10.8.0.100:33061,10.8.0.102:33061 group_replication_bootstrap_groupOFF group_replication_single_primary_modeON group_replication_enforce_update_everywhere_checksOFF # MGR 通信禁用 SSL因全局已关闭 SSL必须显式设置 group_replication_ssl_modeDISABLED group_replication_recovery_use_sslOFF # 网络与成员管理每台机器的report_host不一样 report_host10.8.0.1001、10.8.0.110节点2、10.8.0.100节点差异server-id2 group_replication_local_address10.8.0.105:33061 report_host10.8.0.1053、10.8.0.102节点差异server-id3 group_replication_local_address10.8.0.106:33061 report_host10.8.0.1064、重启mysql5、验证SSL已禁用6.3 创建复制账户所有节点都执行登录到每个节点的MySQL,执行6.4 安装组复制插件由于my.cnf中已配置plugin_load_addgroup_replication.so通常已自动安装。可在每个节点确认若提示Function group_replication already exists则忽略。6.5 引导第一个节点主节点在mysql10.8.0.100节点上执行检查集群成员6.5 加入其他节点依次在mysql2 (105)和mysql3 (106)上执行完成后再次使用SELECT * FROM performance_schema.replication_group_members;命令检查集群成员可在任意节点执行6.6 验证数据同步在PRIMARY节点当前为mysql1上执行登录任意SECONDARY节点查询七、MGR架构管理7.1监控状态SELECT MEMBER_ID, MEMBER_HOST, MEMBER_ROLE, MEMBER_STATEFROM performance_schema.replication_group_members;正常状态ONLINE主节点角色PRIMARY7.2启动集群SET GLOBAL group_replication_bootstrap_group ON;START GROUP_REPLICATION;SET GLOBAL group_replication_bootstrap_group OFF;其他节点加入直接START GROUP_REPLICATION;7.3 节点停止STOP GROUP_REPLICATION;7.4 复制用户CREATE USER repl% IDENTIFIED BY 密码;GRANT REPLICATION SLAVE, GROUP_REPLICATION_STREAM ON *.* TO repl%;节点加入时指定凭据START GROUP_REPLICATION USERrepl, PASSWORD密码7.5 主从切换切单主SELECT group_replication_switch_to_single_primary_mode(节点UUID);切多主SELECT group_replication_switch_to_multi_primary_mode();7.6 异常处理卡在 RECOVERING检查复制用户权限、网络连通性、防火墙集群完全宕机找到数据最新的节点先引导启动再逐一加入其他节点网络分区脑裂少数派节点会自动拒绝写入恢复后重新加入即可