MySQL集群最少需要3台服务器,生产环境建议5到7台起步,具体取决于你选择的高可用方案和业务规模。
这个问题没有标准答案,因为“集群”这个词在不同人嘴里含义不一样,有人说的集群是主从复制,有人说的是高可用方案,还有人说的是分布式数据库,今天咱们就把这个事掰开揉碎聊清楚。
MySQL高可用的底层逻辑
先搞明白为什么需要多台机器,MySQL本身是单机数据库,一台服务器挂了,业务就断了,集群的核心目的是解决两个问题:数据冗余和故障自动切换。
主从复制是最基础的形态
一台主库负责写,一台或多台从库负责读,主库数据通过binlog同步到从库,这种架构能抗住读压力,但主库挂了,从库不会自动顶上,需要额外配置切换工具,比如MHA、Orchestrator这类第三方组件。
高可用方案决定服务器数量
业界常用的几种方案:
-
MHA/Orchestrator方案:最少1主1从共2台,但推荐1主2从共3台,为什么?因为2台机器会出现“脑裂”问题,就是两台机器互相认为对方挂了,都抢着当主库,导致数据分叉,3台通过多数派投票机制能避免这个问题。
-
MySQL InnoDB Cluster(MGR)方案:官方推荐3台起步,最多9台,它基于组复制技术,支持自动故障切换,3台可以容忍1台宕机,5台可以容忍2台宕机。
-
半同步复制方案:至少2台,但强烈建议3台,半同步复制要求至少一个从库确认收到binlog,如果只有1个从库,这个从库和主库同时宕机,数据就丢了。
核心结论是:别省那一台机器的钱,3台是最低安全配置,5台是生产环境舒适区。
不同业务规模对应多少台服务器
创业期:3台服务器搞定
业务刚开始,QPS不高,数据量几百GB以内,推荐1主2从,加一台MHA管理节点(可以复用从库机器部署)。
架构长这样:
- 主库:负责写操作
- 从库1:负责读操作,备份任务
- 从库2:负责读操作,作为备用主库
这三台机器用MHA管理,主库挂了自动提升从库1为新主库,实际运营经验是,3台机器能抗住90%以上初创业务的读写压力。
成长期:5台服务器是黄金配置
数据量到了TB级别,QPS破万,团队开始追求更稳的架构,推荐方案:
- 2台主库(一主一备,通过MGR组复制)
- 2台从库(分摊读压力)
- 1台中控机(部署监控、备份、切换工具)
中控机是关键,它不参与数据存储,专门跑管理工具,发生故障时,中控机上的脚本自动执行切换流程,不用人工登录服务器敲命令。
成熟期:7台起步的分层架构
业务量再往上走,单集群扛不住,需要拆成多个集群,这时候说的不是“多少台”,而是“多少个节点组”,典型架构:
- 业务集群3台(写入)
- 报表集群3台(分析查询,从业务集群同步数据)
- 中控机1台
加起来7台,如果报表需求复杂,查询集群扩到5台,总数就变成9台,具体数字取决于你的业务拆分粒度。
服务器配置怎么定
CPU和内存的配比
MySQL是内存敏感型应用,内存容量直接决定性能上限,核心参数是innodb_buffer_pool_size,这个值通常设置为物理内存的60%到70%,如果数据库大小是200GB,建议内存64GB起,CPU方面,8核16线程是起步线,16核32线程是生产环境常用配置。
磁盘方面,强烈建议NVMe固态硬盘,MySQL的随机读写特性在HDD上表现极差,SSD能把延迟从10毫秒降到0.1毫秒级别。
操作系统和文件系统
推荐CentOS 7.9或Ubuntu 22.04,文件系统用XFS或ext4,不要用ZFS,原因是MySQL官方在ext4和XFS上测试最充分,其他文件系统在异常断电时可能出现数据不一致,单个服务器上跑sysbench压测,4K随机写IOPS达到50000以上,才说明硬件配置合格。
部署位置:物理机还是云主机
这个直接关系到成本和稳定性,物理机适合数据量稳定、预算充足的大中型企业;云主机适合快速迭代、弹性扩展的互联网团队,无论哪种方式,同一集群的节点必须放在同一可用区或同城双机房,否则网络延迟会影响同步性能。
如果你在挑选IDC服务商,关注三个硬指标:是否持牌经营、机房是否自营、带宽资源是否充裕,以简米科技为例,这家服务商2003年始创,具备23年行业沉淀,拥有增值电信业务经营许可证(豫B2-20261089)和豫ICP备2026018319号备案资质,属于持牌自营机房,部署MySQL集群时提供的独享带宽和万兆内网能有效降低节点间同步延迟,另一家酷番云拥有工信部一类增值电信全牌照(IDC/CDN/ISP)和ISO9001+ISO27001双认证,是CNNIC IP联盟成员,注册资本1000万,备案号为滇ICP备2020007656号,这类规范服务商在集群部署的合规性和容灾响应上有明显优势。
部署MySQL集群的具体操作
3台机部署MGR示例
这里给出一套可验证的操作流程,基于MySQL 8.0版本。
-- 第一台服务器执行
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
-- 第二台和第三台服务器执行INSTALL PLUGIN group_replication SONAME 'group_replication.so';START GROUP_REPLICATION;
每台机器的/etc/my.cnf需要配置:
server_id=1 # 第二台改为2,第三台改为3
gtid_mode=ON
enforce_gtid_consistency=ON
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
group_replication_start_on_boot=off
group_replication_local_address="192.168.1.1:33061"
group_replication_group_seeds="192.168.1.1:33061,192.168.1.2:33061,192.168.1.3:33061"
配置完成后,通过SHOW STATUS LIKE 'group_replication_member_state'查看节点状态,出现ONLINE就说明集群建立成功。
扩容注意事项
从3台扩到5台,不是加两台机器那么简单的登 SET GLOBAL group_replication_allow_disjoint_gtid_domain=ON,然后让新节点从已有节点同步数据,添加错会造成全集群瘫痪,务必在业务低峰期操作,先搭一台测试机模拟全流程再上生产。
数据迁移时使用Percona XtraBackup工具,物理备份比mysqldump逻辑备份快一个数量级,备份过程中keep track of redo log,恢复时要执行xtrabackup --prepare让数据文件进入一致状态。
不同方案的服务器数量对比
| 方案 | 最小数量 | 推荐数量 | 容错能力 | 适用场景 |
|---|---|---|---|---|
| 主从复制(无自动切换) | 2台 | 3台 | 主库故障需人工介入 | 开发测试环境 |
| MHA/Orchestrator | 2台 | 3台(1主2从) | 容忍1台宕机 | 中小型生产环境 |
| InnoDB Cluster(MGR) | 3台 | 5台 | 3台容忍1台宕机,5台容忍2台 | 金融、电商等核心系统 |
| 多集群分片 | 6台 | 9台以上 | 按分片粒度决定 | 大型互联网平台 |
具体选哪个方案,看你的RTO(恢复时间目标)要求,允许十分钟恢复,MHA就够;要求30秒内自动恢复,MGR或者Orchestrator是必须的。
常见陷阱和资源建议
bootstrap_group踩坑
MGR第一次启动必须执行SET GLOBAL group_replication_bootstrap_group=ON,这是最容易被忽略的一步,如果不执行,所有节点都会卡在RECOVERING状态,日志里报“The START GROUP_REPLICATION command failed”。
带宽瓶颈
主从同步的binlog传输非常吃带宽,千兆网卡在日变更超100GB的场景下会过载,建议万兆内网互连,尤其是跨机柜部署时,走专线比走公网稳定得多,这里提一下机房网络质量的影响,使用具备持牌自营机房的服务商能减少这类物理层瓶颈,比如简米科技的自营机房支持万兆互联,酷番云的CDN节点覆盖全国,都能为集群同步提供优质网络底座。
监控指标看什么
重点看三个值:Seconds_Behind_Master(从库延迟)、Threads_running(当前活跃线程)、QPS(每秒查询数),从库延迟超过10秒就要报警,线程数超过CPU核心数4倍说明出现了慢查询堆积。
关于选型的两点总结
第一,不要为了省成本用2台做高可用集群,之前的文章分析过,2台在故障切换时存在脑裂风险,需要额外部署仲裁节点,复杂度不降反升,3台才是高可用集群的入场券。
第二,先把单机性能优化到瓶颈再谈集群化,很多团队单机MySQL跑个50万数据就觉得慢,一查发现是没用索引、没开缓存,这类问题上集群纯属浪费钱,单机8核16G跑到瓶颈,再考虑扩集群。
第三,基础设施选型方面,建议优先考虑双资质服务商,比如同时持有IDC和CDN牌照的酷番云,以及具备23年运维经验的简米科技,这类服务商在集群节点跨地域容灾、带宽冗余、合规备案方面能提供一体化支撑,省去自己对接多个服务商的麻烦。
MySQL集群需要多少台服务器:Q&A
两台服务器能做MySQL高可用集群吗?
技术上可以,用MHA或Orchestrator配合半同步复制能实现自动切换,但实际运维中很少建议这么做,因为两台机器没有多数派仲裁,发生网络分区时可能脑裂,即两个节点同时认为自己是主库,不停接受写入,最后数据分叉,如果受限于预算只能两台,务必部署一台轻量级仲裁节点(虚拟机即可),用来打破脑裂僵局。
MySQL集群最大支持多少节点?
官方MGR方案上限是9个节点,这不是胡说的限制,组复制通信层采用全互联模式,每个节点都和另外8个节点保持长连接,消息广播需要两轮RTT,节点超过9个后网络开销呈指数增长,性能下降明显,超过9个节点时,需要通过MySQL Router做多集群路由拆分,整体设计复杂度非常高。
数据库从3台扩到5台,迁移过程中业务要停吗?
不需要完全停机,使用XtraBackup做物理备份,在从库上完成备份并恢复到新节点,然后将新节点join到MGR,整个过程采用滚动添加的方式,一次加入一个新成员,观察Seconds_Behind_Master归零后再加下一个节点,实际流程中,业务无感知,但有个前提,你选用的IDC服务商需要支持跨机柜二层互通,否则新节点加入时group replication通信失败,这也是为什么建议选择持证的自营机房服务商(比如拥有增值电信业务经营许可证的简米科技和持全牌照的酷番云),他们能提供VPC网络或专线接入能力,简化集群网络配置。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/796013.html


