PVE踩坑笔记:集群节点网络能通,但集群投票异常、节点显示离线

举报
Auunes 发表于 2026/10/17 00:09:56 2026/10/17
【摘要】 一、故障表现节点之间互相ping IP正常,SSH可以登录,业务虚拟机网络无异常PVE Web管理界面,集群列表中该节点状态显示离线/红色集群提示:quorum lost(仲裁丢失),无法执行在线迁移、快照、部分存储操作虚拟机还能在故障节点上正常运行,业务不受影响重启pveproxy、pvedaemon无效;只有重启整个节点,集群状态短暂恢复,一段时间后复现典型特征:业务网络通 ≠ Coro...

一、故障表现

  • 节点之间互相ping IP正常,SSH可以登录,业务虚拟机网络无异常
  • PVE Web管理界面,集群列表中该节点状态显示离线/红色
  • 集群提示:quorum lost(仲裁丢失),无法执行在线迁移、快照、部分存储操作
  • 虚拟机还能在故障节点上正常运行,业务不受影响
  • 重启pveproxy、pvedaemon无效;只有重启整个节点,集群状态短暂恢复,一段时间后复现

典型特征:业务网络通 ≠ Corosync集群通信正常,这是PVE集群非常容易踩的认知误区。

二、原理简单说明

PVE集群依赖Corosync做节点状态检测、消息同步与仲裁投票。 业务流量(VM、LXC)走业务网卡;Corosync集群心跳、投票消息独立。 ping只是ICMP连通性测试,只能证明三层可达,无法验证Corosync UDP端口、多播/单播消息、时间同步、消息延迟、丢包。 哪怕ping全通,只要corosync数据包丢包、延迟过大、端口被拦截、时间不同步,集群就判定节点失联,标记离线。

三、排查顺序

  1. 在故障节点上,先查看corosync集群状态
# 查看集群仲裁状态
corosync-quorumtool
# 查看corosync服务状态
systemctl status corosync
  1. 检查corosync日志,重点看节点失联相关报错
# 实时跟踪corosync日志
journalctl -u corosync -f
  1. 验证corosync通信端口:Corosync默认使用UDP 5404、5405端口 在各个节点之间互相测试端口连通(使用socat或者nc)
# 在目标节点监听
nc -ul 5404
# 在本节点发送测试数据包
nc -u 节点IP 5404
  1. 检查节点时间同步(非常关键)
timedatectl
# 查看chrony时间同步状态
chronyc sources

节点之间时间偏差过大,会直接导致corosync消息校验失败,判定节点离线。

  1. 查看集群成员列表
pvecm status

四、分场景修复方案

场景1:节点时间不同步(最高发)

集群多个节点时钟不一致,时间差超过阈值,corosync消息校验失败,判定节点离线。

修复:

  1. 所有节点统一NTP服务器(国内推荐阿里云、腾讯云NTP)
  2. 安装并启用chrony
apt install chrony
systemctl enable --now chronyd
  1. 强制同步时间
chronyc -a makestep

集群节点时间差建议控制在1s以内。

场景2:防火墙拦截Corosync UDP端口

节点之间业务流量放行,但corosync的UDP 5404、5405被节点防火墙/中间交换机ACL丢弃。 ping使用ICMP不受影响,但是集群心跳包被拦截。

临时验证: 关闭节点本地防火墙systemctl stop pve-firewall,观察集群状态是否恢复。 如果恢复,则是防火墙策略缺失。

生产添加放行规则,放开corosync网段UDP 5404、5405。

场景3:心跳网络延迟高、偶发丢包

ping延迟看着不高,但UDP小包存在随机丢包(交换机拥塞、网卡队列、网线不稳)。 Corosync对小包抖动、丢包非常敏感,少量丢包就会触发节点失联判定。

处理方案:

  1. 独立心跳网卡:集群业务和corosync心跳网络分离,不要共用一张网卡;
  2. 调整corosync超时参数,适当加大超时阈值(不推荐调太大,会影响故障判定);
  3. 更换网线、交换机端口,检查网卡是否有报错:
ethtool -S eth0

查看rx_errors、rx_dropped等指标。

场景4:集群多播环境问题,单播配置错误

老版本集群使用多播,部分交换机不支持IGMP,导致多播心跳包无法跨节点传输。 新建集群推荐使用单播模式。

检查集群配置

cat /etc/corosync/corosync.conf

确认transport为udpu(单播)。如果是多播transport,建议重建集群改为单播。

场景5:pvecm数据库损坏,集群状态异常

corosync服务正常,但集群数据库损坏,节点状态识别异常。 日志会报cmap、cfgdb相关报错。

⚠️ 操作风险较高,操作前备份配置

cp -r /etc/corosync /etc/corosync.bak

根据日志修复,必要时移除节点重新加入集群(谨慎操作,不要在业务高峰执行)。

五、验证修复

修复后持续观察:

watch -n2 pvecm status

所有节点状态正常,Quorum达到预期投票数量,Web面板节点不再离线,虚拟机迁移功能恢复。

六、高频踩坑点

  1. 用ping判断集群是否正常。ping只代表ICMP通,不能代表corosync通信正常。
  2. 业务网卡和集群心跳网卡共用,业务流量大时抢占带宽,导致心跳包丢包。
  3. 集群节点没有配置NTP,服务器时间漂移,不定期出现节点离线。
  4. 新建集群没有改成单播,交换机不支持多播,间歇性集群失联。
  5. 遇到quorum丢失直接强行删除集群,没有先查看投票数,容易脑裂。

七、排坑总结

  1. PVE集群排查顺序:先pvecm status、corosync-quorumtool,不要先看业务网络。
  2. 集群故障优先排查三件套:时间同步 → 防火墙端口 → 心跳网络丢包/延迟。
  3. 生产集群建议独立心跳网卡,使用单播udpu模式,稳定性远高于多播。
  4. quorum仲裁丢失,优先保证投票数量,谨慎执行强制集群操作,防止集群脑裂。
  5. 业务网络和集群心跳是两套独立流量,业务通 ≠ 集群心跳正常。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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