金融级高可用必须显式配置group_replication_consistency='after'(单主模式)、sync_binlog=1和innodb_flush_log_at_trx_commit=1,禁用多主,严格校验member_state=online后路由读请求,避免脑裂与读空。

金融级高可用不能只靠“多节点”或“自动选主”,必须显式控制事务提交时机和读写可见性。MGR 的 group_replication_consistency 参数才是强一致性的开关,不是默认就开的。
单主模式 + AFTER 模式是金融场景最稳妥的选择
金融系统对“写后即读”有硬性要求,比如转账后立刻查余额。单主模式天然避免写冲突,而 AFTER 级别强制事务在所有节点应用完成后才返回成功,确保任意节点读到的数据都已全局生效。
-
group_replication_consistency = 'AFTER'必须在写节点(即当前 primary)上设为 SESSION 级,否则应用层发来的事务可能绕过该约束 - 不要设为 GLOBAL,否则所有只读查询也会被阻塞等待回放完成,严重拖慢报表类查询
- 配合
sync_binlog = 1和innodb_flush_log_at_trx_commit = 1,防止主节点宕机时未刷盘事务丢失 - 实测显示:3 节点跨机房部署下,
AFTER模式会使平均写延迟从 8ms 升至 25ms 左右,但这是可接受的代价
多主模式下 ER_GROUP_REPLICATION_CONFLICTING_TRANSACTION 错误无法避免
多主模式允许并发写,但 MySQL 不会“合并”冲突更新,而是直接回滚后到的事务并报错 ER_GROUP_REPLICATION_CONFLICTING_TRANSACTION。这对金融核心链路是不可控风险。
- 即使业务层做了幂等或重试,也无法规避“两次扣款成功一次失败”的中间态问题
- 冲突率在 3% 左右(实测数据),但金融系统要求的是 0% 可观测冲突
- 若坚持用多主,必须搭配应用层全局锁或分库分表路由规则,把同一账户的所有操作固定到一个节点——这实质上退化为逻辑单主
-
BEFORE_AND_AFTER虽然更强,但性能损耗比AFTER还高 20%,且仍不解决冲突本质
group_replication_member_expel_timeout 不是越小越好
这个参数控制节点被踢出集群的超时时间,默认 5 秒。金融系统常误以为“快速剔除故障节点=更快恢复”,实际会引发脑裂或频繁切换。
- 网络抖动超过
group_replication_member_expel_timeout就触发驱逐,若设为 2 秒,公网环境下极易误判 - 建议设为 10–15 秒,并配合监控
replication_group_member_stats表中的MEMBER_STATE和MEMBER_ROLE变化频率 - 真正影响 RTO 的是
group_replication_autorejoin_tries(自动重连次数)和选举耗时,不是驱逐阈值 - 曾有案例因该值设为 1 秒,导致短暂网络波动引发 3 次连续主切,下游应用连接池雪崩
读写分离必须绕过 super_read_only 的“假只读”陷阱
MGR 启动后自动设 super_read_only = ON,但这只是防止手动写入,不拦截应用层发来的 DML。更危险的是:当节点刚加入组、尚未完成数据追平(MEMBER_STATE = RECOVERING)时,super_read_only 仍是 OFF,此时读请求可能命中空数据或旧快照。
- 务必在应用层或代理层(如 ProxySQL、MySQL Router)检查
SELECT MEMBER_STATE FROM performance_schema.replication_group_members,只将流量导给ONLINE节点 - 不要依赖
read_only = ON判断是否可读,它在 MGR 中无意义;super_read_only在非 primary 节点上也可能是 OFF(如多主模式) - 金融系统建议关闭所有从节点的读能力,全部读请求走 primary,用缓存或异步订阅替代读扩展
- MySQL Router 自带
ro-pool,但它不校验数据同步位点,需额外配置group_replication_consistency = 'BEFORE'在读会话中兜底
真正难的不是配出“全绿”的集群状态,而是让每个事务在提交那一刻,就明确知道自己是否已被多数派确认、是否已被其他节点回放。这些细节藏在 group_replication_consistency 的取值组合、super_read_only 的作用边界、以及 MEMBER_STATE 的真实含义里——而不是文档里的“高可用”三个字里。











