在MySQL中搭建高可用集群,核心目标是避免单点故障,确保数据库服务持续可用。常用方案包括主从复制+故障转移、MySQL Group Replication、InnoDB Cluster 和使用中间件(如MHA、ProxySQL)配合传统复制。以下是几种主流方式的简要实现思路。
1. 基于主从复制 + MHA 实现高可用
这是较早但依然实用的方案,通过主从同步数据,MHA(Master High Availability)监控主库状态并在故障时自动切换。
步骤: 配置MySQL主从复制:一主多从,基于binlog进行异步或半同步复制。 部署MHA Manager和MHA Node:Manager运行在独立节点,Node安装在每个MySQL服务器上。 配置SSH免密登录:MHA需通过SSH管理各节点。 设置repl用户和mha用户权限。 配置MHA配置文件(如app1.cnf),指定主库、从库、候选主库等。 启动MHA Manager并测试故障转移。
MHA能实现秒级切换,但存在脑裂风险,且主从延迟可能造成数据丢失。
2. 使用 MySQL Group Replication(MGR)
MySQL官方提供的组复制技术,基于Paxos协议实现多节点数据一致性,支持单主或多主模式。
关键配置项: 启用binlog、gtid_mode=ON、enforce_gtid_consistency=ON。 设置log_slave_updates=ON、binlog_format=ROW。 配置server_id、loose-group_replication_group_name等参数。 创建复制用户并执行START GROUP_REPLICATION加入集群。
MGR提供强一致性保障,自动成员管理,节点宕机后可自动恢复。推荐用于对一致性要求高的场景。
3. 搭建 InnoDB Cluster(推荐新手使用)
InnoDB Cluster是Oracle官方推出的高可用解决方案,底层基于MGR,通过MySQL Shell简化部署。
操作流程: 安装MySQL Server、MySQL Shell、MySQL Router。 在各节点配置好基础参数(同MGR要求)。 使用MySQL Shell连接一个实例,执行:dba.createCluster('mycluster')添加其他节点:
cluster.addInstance('root@host2:3306')
部署MySQL Router,自动路由读写请求到主节点,读请求可负载到从节点。
整个过程自动化程度高,适合快速搭建生产级高可用环境。
4. 配合负载均衡与故障检测
无论哪种方案,建议结合以下组件提升可用性:
使用Keepalived实现虚拟IP漂移,客户端通过VIP访问主库。 部署Prometheus + Grafana监控复制延迟、节点状态。 用ProxySQL或MaxScale作为数据库代理,实现读写分离与故障自动切换。基本上就这些。选择哪种方式取决于你的业务需求、运维能力以及是否接受数据轻微丢失。InnoDB Cluster 对大多数用户来说是最简单可靠的起点。
