PVE集群要求所有节点时间同步、UDP 5404/5405端口互通、TCP 22端口SSH可达;还需同版本PVE、主机名与IP唯一、集群网络延迟低于2ms,且加入后禁止修改主机名、IP及集群名。

物理节点必须满足哪些基础条件才能加入PVE集群
不是所有能装PVE的机器都能进集群。核心限制有三个:pve-cluster 服务依赖 corosync,要求所有节点时间偏差 chrony 必须同步到同一源)、主机名唯一且可被互相解析(/etc/hosts 或 DNS)、SSH 免密 root 登录已配置(ssh-copy-id root@node2)。常见错误是节点间 ping 通但 corosync 启动失败,大概率是防火墙没放行 UDP 5404/5405 端口,或 SELinux 处于 enforcing 模式(PVE 不支持 SELinux,需设为 disabled)。
初始化集群后如何安全添加新节点
主节点执行 pvecm add <ip></ip> 是最简方式,但实际中容易因网络延迟或证书不一致失败。建议分步操作:
- 在待加入节点上先运行
pvecm expected 1(避免 quorum 误判) - 主节点执行
pvecm add <ip></ip>前,确认/etc/pve/corosync.conf中totem.interface.bindnetaddr设置的是本机直连网段(不是 Docker 网桥或 NAT 地址) - 添加成功后,立刻在所有节点运行
pvecm status验证quorum为1且nodes列出全部主机名 - 不要用
pvecm delnode删除离线节点,应先关机再执行,否则残留锁可能阻塞后续操作
Ceph OSD 节点与 PVE 计算节点是否要分离
生产环境强烈建议分离。Ceph OSD 进程对磁盘 I/O 和 CPU 调度敏感,和 KVM/QEMU 共享同一物理节点时,容易出现存储延迟毛刺、rbd map 超时、甚至 ceph health WARN 报 OSD_DOWN。若资源受限必须复用,至少做到:
- OSD 使用独立 NVMe/SATA SSD,绝不与系统盘或 VM 磁盘混用同一块物理盘
- 在 Ceph 配置中启用
osd_cpu_threads = 2(默认为 0,即不限制),避免 OSD 吃光 CPU - PVE 中创建虚拟机时,磁盘总线选
virtio-scsi+ 启用cache=none和io=native,绕过 host page cache 干扰 Ceph 的 direct I/O
如何让 PVE GUI 正确识别并挂载 CephFS 或 RBD 池
Web 界面里看不到 Ceph 存储?不是配置漏了,而是 PVE 默认只自动发现名为 rbd 的池。其他池名(如 vm-data)必须手动注册:
- 登录主节点终端,运行
pvesm add rbd <pool-name> --pool <pool-name> --username admin --monhost '10.10.10.1,10.10.10.2,10.10.10.3'</pool-name></pool-name> -
--monhost必须填 Ceph monitor IP 列表(逗号分隔,无空格),不能写域名(除非所有节点 /etc/hosts 都配齐) - 如果 Ceph 启用了 CRUSH rule 或自定义 PG 数,PVE 创建镜像时可能报
pg_num 128 not suitable—— 此时需在 Ceph 侧先运行ceph osd pool set <pool> pg_num 256</pool>(必须是 2 的幂) - RBD 存储类型无法直接挂载 CephFS,如需文件系统语义,得额外部署 CephFS 客户端并用
pvesm add cephfs注册,但该类型仅支持模板上传/下载,不能作为 VM 磁盘后端
真正麻烦的不是配置步骤,而是 Ceph monitor 与 PVE corosync 对网络稳定性的双重苛刻要求——一个丢包,就可能同时触发 corosync timeout 和 ceph mon election,导致集群反复震荡。上线前务必用 mtr -r -c 100 <mon-ip></mon-ip> 和 mtr -r -c 100 <other-node-ip></other-node-ip> 同时压测双路径。

















