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/24 | 10.0.10.1 | vmbr0 |
| 集群 | 10.0.11.0/24 | 10.0.11.1 | vmbr1 |
| 存储 | 10.0.12.0/24 | 10.0.12.1 | vmbr2 |
预期 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_name、nodeid、quorum_votes等其他字段保持不变。
2. 对比并检查候选配置
# 确认差异只有 ring0_addr 和 config_version
diff -u "$CONFIG" "$CANDIDATE"
# 检查 Corosync 配置语法;返回成功后才允许继续
corosync -t -c "$CANDIDATE"本次语法检查成功时,最后显示:
Corosync Cluster Engine exiting normally3. 应用配置
# 将已检查的候选配置写入 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)2. 检查 Corosync Link 0
corosync-cfgtool -s修正后的关键结果为:
Local node ID 1, transport knet
LINK ID 0 udp
addr = 10.0.11.1
status:
nodeid: 1: localhost3. 检查近期错误
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-01 | 10.0.10.1 | 10.0.11.1 |
| PVE-02 | 10.0.10.2 | 10.0.11.2 |
| PVE-03 | 10.0.10.3 | 10.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 链路。