HOME

Proxmox VE 9.2 创建集群后修改 Corosync 集群网络

文章目录14 节

现象

在 Proxmox VE 9.2 中创建集群时,没有在“创建集群”窗口选择专用集群网络。创建完成后执行 pvecm status,发现 Corosync 使用了管理地址:

Membership information
----------------------
    Nodeid      Votes Name
0x00000001          1 10.0.10.1 (local)

实验环境原本规划了三套网络:

用途网段PVE-01 地址Linux Bridge
管理10.0.10.0/2410.0.10.1vmbr0
集群10.0.11.0/2410.0.11.1vmbr1
存储10.0.12.0/2410.0.12.1vmbr2

预期 Corosync 使用 10.0.11.1,而不是管理地址 10.0.10.1

进入 PVE 管理界面后,可以看到集群已经创建,但找不到“修改集群网络”或“删除集群”按钮。节点的“系统 → 网络”页面只能配置网卡、Linux Bridge 和 IP 地址,也不能修改 Corosync 的通信地址。

原因

创建集群时,PVE 会把选中的集群网络地址写入:

/etc/pve/corosync.conf

如果没有选择专用集群网络,PVE 通常会使用节点当前解析到的管理地址。本例中配置内容为:

nodelist {
  node {
    name: pve-01
    nodeid: 1
    quorum_votes: 1
    ring0_addr: 10.0.10.1
  }
}

ring0_addr 是 Corosync Link 0 的通信地址。集群创建完成后,PVE 9.2 的管理界面没有提供修改该字段的入口,因此需要在后台调整 corosync.conf

这不等于必须删除集群。Proxmox VE Cluster Manager 官方文档支持在已创建的集群中切换 Corosync 网络;相比解除节点并重新创建集群,直接修正地址的影响范围更小。

操作前检查

本文处理的是刚创建的单节点空集群,环境状态如下:

  • Proxmox VE:9.2.2
  • 当前集群节点:只有 pve-01
  • 虚拟机和容器:无
  • 当前 Corosync 地址:10.0.10.1
  • 目标 Corosync 地址:10.0.11.1
  • vmbr1 已配置并处于 UP 状态

先检查实际状态:

# 确认 PVE 版本
pveversion

# 确认当前只有一个集群节点并且具有法定票数
pvecm status
pvecm nodes

# 确认没有需要保护或迁移的虚拟机、容器
qm list
pct list

# 确认目标集群地址已经配置并生效
ip -br -4 addr show

# 查看当前 Corosync 配置
cat /etc/pve/corosync.conf

如果已经有其他节点加入集群,不要直接照搬本文步骤。多节点集群切换 Corosync 网络会短暂影响节点通信,必须按照官方流程逐节点规划并持续确认 quorum。

修改 Corosync 集群网络

1. 创建备份和候选配置

以下地址是本文实验环境的值,其他环境必须替换为自己的管理地址和集群地址:

# Corosync 正式配置
CONFIG="/etc/pve/corosync.conf"

# 时间戳用于区分多次操作产生的文件
STAMP="$(date +%Y%m%d-%H%M%S)"

# 备份文件和待验证的候选配置
BACKUP="/root/corosync.conf.before-ring0-${STAMP}"
CANDIDATE="/root/corosync.conf.new-ring0-${STAMP}"

cp -a "$CONFIG" "$BACKUP"
cp -a "$CONFIG" "$CANDIDATE"

echo "备份文件:$BACKUP"
echo "候选配置:$CANDIDATE"

不要直接对正式配置执行未经检查的批量替换。先编辑 /root 下的候选文件:

nano "$CANDIDATE"

只修改两项:

 nodelist {
   node {
     name: pve-01
     nodeid: 1
     quorum_votes: 1
-    ring0_addr: 10.0.10.1
+    ring0_addr: 10.0.11.1
   }
 }

 totem {
   cluster_name: PVE-Cluster
-  config_version: 1
+  config_version: 2
 }
  • ring0_addr:改为本节点的专用集群地址。
  • config_version:每次修改都必须在原值基础上递增,不能固定照抄示例中的 2
  • cluster_namenodeidquorum_votes 等其他字段保持不变。

2. 对比并检查候选配置

# 确认差异只有 ring0_addr 和 config_version
diff -u "$CONFIG" "$CANDIDATE"

# 检查 Corosync 配置语法;返回成功后才允许继续
corosync -t -c "$CANDIDATE"

本次语法检查成功时,最后显示:

Corosync Cluster Engine exiting normally

3. 应用配置

# 将已检查的候选配置写入 pmxcfs
cp "$CANDIDATE" "$CONFIG"
sync

# 单节点空集群可以直接重启 Corosync
systemctl restart corosync.service

/etc/pve 由 Proxmox Cluster File System(pmxcfs)管理。多节点环境中的配置会被集群同步,因此不能把这里当成普通本地文件随意修改。

验证结果

1. 检查服务和 quorum

systemctl is-active corosync.service pve-cluster.service
pvecm status

两个服务都应该返回 active,并且集群仍显示:

Nodes:            1
Quorate:          Yes

Membership information
----------------------
    Nodeid      Votes Name
0x00000001          1 10.0.11.1 (local)
corosync-cfgtool -s

修正后的关键结果为:

Local node ID 1, transport knet
LINK ID 0 udp
    addr = 10.0.11.1
    status:
        nodeid: 1: localhost

3. 检查近期错误

journalctl -u corosync.service -n 100 --no-pager \
  | grep -Ei 'error|fail|crit' || true

本次修改后没有发现 Corosync 错误,集群保持法定票数,Link 0 已从管理网切换到集群网。

回滚方法

如果 Corosync 无法正常启动,从前面输出的备份路径恢复。将下面的文件名替换为实际备份文件:

cp /root/corosync.conf.before-ring0-YYYYMMDD-HHMMSS \
  /etc/pve/corosync.conf

systemctl restart corosync.service
pvecm status

后续节点加入要求

修正 PVE-01 后,其他节点加入集群时也要为 Link 0 选择各自的集群地址:

节点管理地址Corosync Link 0
PVE-0110.0.10.110.0.11.1
PVE-0210.0.10.210.0.11.2
PVE-0310.0.10.310.0.11.3

管理地址用于访问 PVE 管理界面和节点管理,10.0.11.0/24 专门承载 Corosync 通信,10.0.12.0/24 留给 Ceph 存储网络。不要因为三套网络可以互相 Ping 通,就让 Corosync 继续使用管理地址。

经验总结

  • “系统 → 网络”只管理网卡、Bridge 和 IP,不负责修改 Corosync。
  • 创建集群后找不到修改或删除按钮属于正常现象,不代表只能重新安装。
  • 创建集群时应主动选择专用集群网络,避免 Corosync 默认使用管理地址。
  • 已创建的单节点空集群可以通过修改 /etc/pve/corosync.conf 切换网络。
  • 修改 corosync.conf 时必须备份、递增 config_version、先检查候选配置,再验证 quorum 和 Link 状态。
  • 多节点生产集群不能直接照搬单节点步骤,必须优先保证 quorum,避免同时中断所有 Corosync 链路。
故障排查 Proxmox VE Corosync 集群网络