PVE踩坑笔记:集群脑裂,节点互相失联导致业务异常

举报
Auunes 发表于 2026/10/13 11:35:25 2026/10/13
【摘要】 很多人搭建PVE集群,想着多节点做高可用,以为装好集群就能自动容灾。实际使用时很容易遇到脑裂问题。节点之间网络短暂波动,集群分裂成多个独立部分,各自认为自己是正常集群,虚拟机在两边尝试同时启动,最终出现磁盘锁冲突、服务异常。一、脑裂出现后的典型现象集群面板里部分节点显示离线,但服务器本身系统正常运行同一台虚拟机在多个节点同时被尝试启动,报磁盘被占用节点之间ping偶尔丢包,恢复后集群状态依旧...

很多人搭建PVE集群,想着多节点做高可用,以为装好集群就能自动容灾。实际使用时很容易遇到脑裂问题。节点之间网络短暂波动,集群分裂成多个独立部分,各自认为自己是正常集群,虚拟机在两边尝试同时启动,最终出现磁盘锁冲突、服务异常。

一、脑裂出现后的典型现象

  • 集群面板里部分节点显示离线,但服务器本身系统正常运行
  • 同一台虚拟机在多个节点同时被尝试启动,报磁盘被占用
  • 节点之间ping偶尔丢包,恢复后集群状态依旧错乱
  • HA资源在节点间反复漂移,业务不断重启
  • 存储报锁冲突,LVM或者Ceph出现元数据异常

很多人第一反应怀疑硬件故障,反复检查硬盘和内存,忽略集群内部的仲裁机制。

二、脑裂产生的根本原因

PVE集群依靠Corosync实现节点之间通信与仲裁。当节点间通信中断,各个节点无法确认其他节点状态。每个节点会单独判断自己是集群唯一存活成员,独立接管虚拟机与存储资源。

普通两节点集群风险最高。两个节点断开网络,双方都认为对方宕机,都会尝试启动HA虚拟机。共享存储没有办法区分谁才是合法持有者,就会出现多节点争抢磁盘。

三、容易诱发脑裂的场景

  1. 节点之间使用普通业务网卡作为集群通信网卡,跑流量时出现延迟丢包
  2. 两节点集群没有配置第三方仲裁设备,缺少投票仲裁
  3. 交换机端口不稳,网线老化,短暂断连几秒就触发分裂
  4. 防火墙规则拦截Corosync通信端口,节点之间心跳包丢失
  5. 单节点负载过高,CPU占用爆满,心跳包发送延迟超时

四、排查方法

先确认节点之间心跳网络连通性,在各个节点执行。

corosync-cfgtool -s

查看本地节点状态与心跳链路。

查看集群Quorum仲裁信息。

pvecm status

重点观察Quorum栏,判断集群是否达成仲裁。

查看corosync日志,定位断开时间点。

journalctl -u corosync -f

检查防火墙,确认corosync需要的端口没有被拦截。Corosync使用UDP 5404、5405端口。

五、故障紧急处理步骤

出现脑裂之后不要直接强制启动虚拟机,优先恢复集群仲裁。

  1. 确认业务数据安全,暂停所有HA自动迁移策略。
  2. 选择保留其中一个节点作为有效集群,其余节点关机。不要在分裂的两边同时运行虚拟机。
  3. 在保留的正常节点执行集群强制仲裁。
pvecm expected 1
  1. 其他节点恢复网络连通后,重新加入集群,检查虚拟机锁状态。
  2. 全部节点状态正常后,恢复HA配置。

强制仲裁属于应急操作,操作前做好备份,错误操作可能损坏共享存储数据。

六、长期预防方案

1. 拆分网络,独立心跳网卡

集群心跳不要和虚拟机业务网络共用网卡。单独用网卡或者VLAN承载Corosync通信。降低业务流量挤占心跳通道的概率。

2. 两节点集群必须增加仲裁设备

两节点原生集群风险很高。建议添加QDevice仲裁服务,部署在独立机器上。

pvecm qdevice setup 仲裁服务器IP

引入第三方投票,网络断开时避免两边各自争夺资源。

3. 优化心跳超时参数

根据网络质量调整corosync超时,网络不稳定环境适当调高超时,避免瞬时抖动判定节点离线。修改配置文件/etc/corosync/corosync.conf,修改后重启corosync服务。

4. 网络层面加固

使用稳定交换机,定期检查网线。开启端口错误计数监控。节点之间心跳链路做链路聚合,降低单链路故障概率。

5. HA资源约束

配置HA资源时增加节点限制,禁止同一虚拟机同时在多节点调度。不要在不稳定集群上大量开启HA自动迁移。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。