mysql 读写分离、高可用方案

一、mysql的高可用架构

特性传统主从复制MGR (Group Replication)InnoDB Cluster
高可用 ❌ 依赖外部工具(如 MHA) ✅ 原生支持自动主选举 ✅ 自带高可用管理
读写分离 ✅ 需要手动或中间件实现 ✅ 支持(需要中间件) ✅ 支持自动读写路由
自动主备切换 ❌ 需要外部工具 ✅ 支持 ✅ 支持
一致性保证 异步或半同步,可能数据丢失 强一致性(基于 Paxos) 与 MGR 相同
部署复杂度 简单 中等偏高 高(含 MySQL Shell、Router)
成熟度 非常成熟、广泛使用 新一代方案,逐步成熟 相对新,依赖官方生态
管理工具 MHA、Orchestrator 等 无需额外工具 MySQL Shell 管理
节点数量限制 理论无限 推荐奇数节点,≥3,≤9 同上
官方支持 ✅(推荐方向)

1、 ✅ 传统主从复制

  • 特点一主多从,异步/半同步复制。

  • 优点

    • 架构简单,部署方便。

    • 社区资料丰富,成熟稳定。

    • 灵活支持读写分离架构。

  • 缺点

    • 不具备自动主备切换。

    • 主库宕机后需要手动干预(或借助 MHA、Orchestrator 等第三方工具)。

    • 数据一致性依赖于半同步,仍可能有延迟或数据丢失。

适用场景

  • 中小型系统、对一致性要求不高。

  • 成本敏感,追求部署简单的项目。

复制过程

步骤角色动作描述
1 Master 主库执行事务(INSERT/UPDATE/DELETE),写入 binlog(二进制日志)。
2 Master Binlog Dump 线程主动将 binlog 事件推送给从库的 I/O 线程。
3 Slave 从库的 I/O 线程 接收 binlog 事件,并写入本地 relay log(中继日志)。
4 Slave 从库的 SQL 线程 读取 relay log 中的事务,重放(Replay)到从库数据库。
5 Slave 从库数据与主库同步完成。

2、 ✅ MySQL Group Replication(MGR)组复制

  • 特点:MySQL 官方提供的原生多主/单主复制方案,基于 Paxos 实现强一致性。

  • 模式

    • 单主模式(Single-Primary):1 写多读。

    • 多主模式(Multi-Primary):所有节点可写(不推荐,冲突处理麻烦)。

  • 优点

    • 高可用,自动主选举。

    • 数据强一致性,适合金融/核心业务。

    • 与 ProxySQL、MySQL Router 等兼容。

  • 缺点

    • 部署配置较复杂。

    • 不支持级联复制,要求节点之间网络稳定。

    • 吞吐受限于写一致性协议。

适用场景

  • 对一致性要求高(如金融、电商订单等)。

  • 架构希望减少人为操作,自动容灾。

  • 有能力维护高质量网络与部署环境。

3、 ✅ InnoDB Cluster

  • 特点是基于 MGR + MySQL Shell + MySQL Router 封装的官方完整 HA 解决方案。

  • 组件组成

    • MySQL Group Replication(核心复制协议)

    • MySQL Shell(管理集群)

    • MySQL Router(客户端读写路由)

  • 优点

    • 完全官方解决方案,生态闭环。

    • 自带故障恢复、自动重连、拓扑感知。

    • 管理操作便捷(Shell 自动化)。

  • 缺点

    • 依赖官方组件,不够灵活。

    • 部署略复杂,升级受限于版本兼容。

    • 不适合和非官方组件混合使用。

适用场景

  • 对官方支持依赖强(如云平台、金融、政务)。

  • 想要“一站式”高可用部署。

  • 不想用第三方中间件管理。

二、读写分离中间件

中间件语言优点适用场景
ProxySQL C++ 功能最全,灵活性高,性能强大,企业级首选 高并发、高可用生产环境
MySQL Router C++ MySQL 官方支持,自动路由,简单可靠 搭配 InnoDB Cluster、MGR
MaxScale(MariaDB) C++ 丰富插件机制,安全控制、读写分离、审计功能强 MariaDB/MariaDB Galera
Atlas(Qihoo 360) C 轻量级,支持分库分表,部署简单 中小型业务系统
Cobar(阿里早期) Java 分库分表读写分离,早期产品,已不再维护 历史系统或定制需求
MyCAT(国产开源) Java 分库分表+读写分离,支持 SQL 解析 中小项目、学习实验环境
ShardingSphere-Proxy Java 分布式数据库代理层,支持分库分表 + 读写分离 + 分布式事务 对分布式有需求的中大型业务
DBProxy(网易) C++ 高频业务优化、读写分离、负载均衡 私有业务系统内部使用

1、ProxySQL(强烈推荐)

  • 🔧 功能:读写分离、SQL 路由规则、自定义负载均衡、连接池、SQL 缓存、防火墙、监控等。

  • 🏷 优点:

    • 规则非常灵活(基于用户、SQL 类型、正则等)。

    • 配合 MGR/InnoDB Cluster 可实现自动主从切换。

    • 支持连接后端多个实例组(多租户架构)。

  • ❗ 缺点:学习曲线略高,需熟悉配置。

👉 [适合]:追求企业级高可用与性能的系统

2、MySQL Router

  • 🔧 功能:只提供自动连接转发和负载均衡(读/写路由)。

  • 🏷 优点:

    • 官方产品,完美支持 MySQL InnoDB Cluster。

    • 自动感知主从拓扑,应用透明切换。

  • ❗ 缺点:

    • 功能比较基础(不支持 SQL 路由规则、缓存、SQL 防火墙等)。

👉 [适合]:用官方方案做 HA 的项目,或对 ProxySQL 配置要求过高的用户

3、MaxScale

  • MariaDB 官方维护,支持 MySQL(兼容)和 MariaDB。

  • 支持读写分离、负载均衡、安全控制、查询重写、审计日志等。

  • 提供图形界面管理(GUI)。

👉 [适合]:使用 MariaDB 的项目

4、ShardingSphere-Proxy

  • Apache 顶级项目。

  • 读写分离 + 分库分表 + 分布式事务,Java 开发,插件化强。

  • 支持异构数据库、可编程规则。

👉 [适合]:复杂分布式架构、有微服务/中台需求的企业系统

5、MySQL Proxy(全称:MySQL Proxy by Oracle)

曾经是 MySQL 官方推出的 SQL 中间层代理工具,用于实现 简单的读写分离、SQL 过滤、监控 等功能。

但需要注意的是:

⚠️ MySQL Proxy 项目已基本停止维护,性能与稳定性远落后于现代主流中间件(如 ProxySQL、MySQL Router),不再推荐用于生产环境。

三、读写分离 + 高可用组合方案 

1、方案推荐

方案架构搭配
企业生产级读写分离 MySQL MGR + ProxySQL
官方全套解决方案 InnoDB Cluster + MySQL Router
分布式数据库方案 ShardingSphere-Proxy + MySQL 后端
教学/快速搭建 MyCAT + 主从复制

 

  

 

posted @ 2019-09-01 23:32  凡人半睁眼  阅读(509)  评论(0)    收藏  举报