ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

从零搭建生产级PVE超融合集群:架构设计与踩坑实践

从零搭建生产级PVE超融合集群:架构设计与踩坑实践 简介一份记录 Proxmox VE 超融合项目完整落地过程的技术方案文档面向虚拟化运维人员、系统架构师以及有互联网数据中心整合需求的团队。文档从业务量萎缩、成本压力增大的实际背景出发讲述如何挑选几台大容量服务器构建超融合集群并将存量业务迁移到集群之上以同时实现降低成本、提升可用性、统一管控、去中心化、在线扩容等目标。实施部分详细记录了真实的机房部署经历从制作 Proxmox VE 5.4 安装启动盘、排查动态主机配置协议DHCP问题到创建去中心化的 Ceph 分布式存储、验证强制关机后虚拟机自动漂移等关键环节并给出了可复现的经验与排错思路。整套内容以一个 docx 文档交付文件大小约 3.17MB。目前已有 269 人学习下载适合具备一定虚拟化基础、正在评估超融合方案或准备开展相关项目的读者直接参考。 最近把手里那套 Proxmox VE 超融合集群从测试环境一路折腾到了生产业务承载整个过程走了不少弯路也把 Ceph、HA、备份、网络规划这些关键环节挨个摸了一遍。Proxmox VE后面统一叫 PVE这套东西说到底就是用开源方案把计算、存储、网络揉到一个集群里用软件定义的方式干掉传统架构里“服务器是一台一台的、存储是一台专门的机器”这种割裂状态。如果你也在考虑用 PVE 做超融合或者已经装好了 PVE 但不知道怎么设计存储和网络这篇实践记录应该能帮你省掉不少试错时间。1. 项目背景与方案选型思路1.1 为什么在自己的机房折腾超融合先说需求来源。我们这边机房里有十几台老旧的物理服务器每台上面跑着不同时期的业务有的是 Windows 虚拟机有的是 Linux 容器还有两台物理机直接承载数据库。时间一长问题就暴露了单台服务器故障就要停机维护资源利用率低得可怜有的机器 CPU 长期 5% 以下有的磁盘却快满了想迁移业务还得考虑兼容性完全动弹不得。超融合解决的就是这个核心矛盾把多台通用 x86 服务器的计算和存储资源通过软件统一池化上层通过虚拟化平台动态分配资源下层通过分布式存储保证数据冗余和自动重建。用大白话说以前存储是存储、计算是计算超融合让一台台普通服务器既提供 CPU 内存又贡献磁盘容量故障了数据自动在其他节点恢复业务继续跑不需要专门搬数据。选择 PVE 超融合的另一个关键原因是它把虚拟化和分布式存储的管理整合在同一个 Web 界面里业内叫超融合基础设施本质上是把 Ceph 这个软件定义存储和 KVM/LXC 虚拟化做了深度集成。你不需要单独去学一套商业超融合的复杂管理平台也不需要额外购买商业授权一套开源方案就能把虚拟化和存储统一纳管这对预算有限但又想获得企业级能力的团队来说非常友好。1.2 为什么选 Proxmox VE 而不是其他方案市面上做超融合的路径不少商业方案有深信服超融合平台、VMware vSAN、Nutanix 这类开源方案里 PVE、oVirt、OpenStack 也各有拥趸。我之前也专门对比过简单说说选型逻辑。商业超融合平台的优势是开箱即用和厂商兜底但劣势也很明显授权费用高硬件兼容性锁定想扩容节点还得看厂商脸色。我们的场景是机房自管、业务不太复杂、希望保留硬件选型自由度商业方案显然不太合适。OpenStack 功能全但部署运维成本极高我们这种小团队根本养不起。oVirt 在虚拟化层面不错但存储这块还是习惯依赖外部存储或者 GlusterFS超融合的“融合”程度不如 PVECeph 来得纯粹。PVE 最打动我的几个点第一基于 Debian 系统底层稳社区活跃遇到问题几乎都能搜到解决方案第二虚拟化内核 KVM 的性能表现和成熟度经过大规模验证生产环境完全可信第三Ceph 集成深度好图形界面直接管理 OSD、存储池、PG不需要像裸 Ceph 那样全命令行操作第四许可证是 GNU AGPL开源免费只需要为商业订阅付费但你不订阅也完全不影响使用。综合下来PVE 成了性价比和功能之间的最优解。2. 整体架构设计与硬件规划2.1 超融合架构的核心逻辑超融合最核心的设计理念就是把“计算”和“存储”从物理设备中解耦再通过软件重新聚合。想象一下传统架构里存储是一口大锅所有服务器都从锅里舀水锅坏了全员没水喝而超融合架构里每台服务器既是厨房又是储水罐多个储水罐之间通过管道实时互相备份任何一个罐子破了其他罐子自动把水补上。落到 PVE 这个项目里架构分三层。最底层是硬件节点负责提供 CPU、内存、磁盘和网卡资源中间层是虚拟化层PVE 跑在 Debian 系统上通过 QEMU/KVM 提供虚拟机运行环境通过 LXC 提供轻量级容器最上层是存储层Ceph 作为分布式存储横跨所有节点把每台节点上的磁盘汇聚成统一的存储池再通过 RBD 协议提供给虚拟机作为块设备。这样虚拟机数据可以根据策略分布在多个节点上单节点宕机不影响数据可用性。这里要特别强调一下 PVE 集群和 Ceph 集群的关系。PVE 集群负责虚拟机的调度和高可用判断Ceph 集群负责数据分布和冗余两者独立运作又相互协作。你把一台 PVE 节点的 corosync 集群服务停了虚拟机可能因为群集配额丢失而被标记为不可用但 Ceph 数据还在其他节点上只要恢复集群通信业务马上回来。理解这个分离的逻辑排障时就不会手忙脚乱。2.2 网络规划是超融合的第一生命线如果让我排一个超融合项目的关键度优先级网络绝对排第一超过 CPU 和内存。原因很简单超融合的每一次 I/O 写入都涉及网络传输虚拟机的每次迁移也依赖网络Ceph 副本的实时同步更是完全靠网络支撑。网络规划不好后面所有性能调优都是白搭。我在这个项目里规划了三套独立的物理网络。管理网络用于访问 PVE Web 界面和 SSH跑普通千兆就够Ceph public 网络承载虚拟机存储 I/O建议至少万兆起步Ceph cluster 网络用于副本同步和 OSD 心跳同样万兆。如果条件允许cluster 网络最好再独立物理隔离因为 OSD 之间的数据同步量非常大一旦和业务网络混跑互相争抢带宽会让存储延迟直接飙升。实际部署时我用了每个节点双万兆网口加双千兆网口万兆口分别接两个不同的交换机做冗余千兆口各接一台管理交换机。VLAN 划分上Ceph public 和 cluster 分在不同 VLAN配合交换机的链路聚合配置相当于给存储流量修了一条双向八车道。这样做的好处是某台交换机故障或者某根网线松动流量自动切换业务几乎无感知。2.3 存储层Ceph 还是 ZFSPVE 官方支持的存储方案里ZFS 和 Ceph 是两条主力路线。ZFS 是本地文件系统加软 RAID 的思路单机性能强、配置简单适合两三个节点的小规模场景Ceph 是分布式存储的思路数据跨节点冗余适合真正需要横向扩展和多节点高可用的场景。我这个项目一共凑了三台服务器每台配置两颗 E5-2680 v4 CPU、256GB 内存、两块 480GB SSD 做系统盘和虚拟机热数据缓存、四块 8TB 企业级 HDD 做 Ceph OSD。这个规模不上不下用 ZFS 的话数据只能在本机冗余节点挂了虚拟机恢复要手动处理用 Ceph 的话三节点可以容忍任意一台宕机业务自动切换到其他节点。我最终选了 Ceph因为超融合追求的就是节点级的故障自愈Ceph 的原生机制和我想要的效果完全吻合。Ceph 的另一个优势是它支持不同的数据冗余策略。副本模式replicated简单可靠三副本意味着每份数据存三份磁盘利用率是 1/3纠删码模式erasure coded空间利用率高但 CPU 开销大、维修重建复杂。作为入门实践我用了默认的三副本模式三节点每节点一个 OSD 对应一份副本任何一种节点故障数据都不会丢失。等后期扩容到五节点、六节点再逐步引入纠删码池给冷数据用。3. 落地实施安装配置与参数调优3.1 基础环境安装与集群初始化安装 PVE 本身不复杂官方 ISO 写盘启动按提示选磁盘、配网络就完成了。但有几个细节会影响后面集群的稳定性值得单独拎出来说。第一安装时磁盘建议用 RAID 1 镜像做系统盘避免系统盘单点故障导致节点无法启动第二主机名和网络配置一定要提前规划好PVE 对主机名解析很敏感尽量不要用 DHCP直接配置静态 IP 并写入 /etc/hosts第三时区统一设置为 UTC 或同一时区避免时间偏差引发集群通信问题。三台节点装好系统后创建集群。在第一台节点上执行pvecm create pve-cluster其他节点加进来pvecm add 192.168.10.11加入集群后检查状态pvecm status pvecm nodes这里有个容易踩的坑如果节点时间不同步corosync 集群会反复抖动节点状态时好时坏。我当时就遇到第二台节点的时钟慢了 30 秒集群里总是出现“Expected downtime”的告警。解决方法是所有节点统一配置 NTP 服务我这里用的是系统自带的 chrony指向内网时间服务器并写进 crontab 里定期同步校准。PVE 的 Web 界面里可以直接看各个节点的时间差建议部署完成后多观察几天。3.2 Ceph 存储集群配置实操PVE 7 以上版本集成了 Ceph Pacific 和 Quincy图形界面操作很顺畅。我的步骤是先确认所有节点的 Ceph 网络配置无误然后逐个节点执行 pveceph 命令安装 Ceph 相关包。pveceph install --version quincy等待安装完成后创建 Monitor 服务。Monitor 是 Ceph 的大脑至少需要三个才能保证高可用我这里三个节点各自部署一个pveceph init --network 192.168.20.0/24 --cluster-network 192.168.30.0/24 pveceph createmon这里重点看一下这两个网段参数。--network 指定的是 Ceph public 网络也就是虚拟机数据读写走的网段--cluster-network 指定的是 OSD 之间同步数据的专用网段。如果你的环境没有独立 cluster 网络后面 OSD 之间的复制流量会和虚拟机 I/O 抢带宽性能会明显下降所以务必在规划设计阶段就把这两个网段区分开。接下来创建 OSD。每个节点四块 HDD一共 12 块 HDD全部做成 OSD。磁盘在创建前可以先用擦除工具清理分区表避免旧的文件系统数据干扰 Ceph 初始化。我的操作是在 Web 界面选中节点 - Ceph - OSD - Create逐块添加磁盘类型选 HDD。如果你有 NVMe 盘建议把 WAL/DB 分离到 NVMe 上这对随机写性能提升非常明显但当时我手上的机器没有多余的 NVMe 盘位只能先把 HDD 用起来。创建完 OSD 后再创建一个存储池。PVE 里存储池Pool对应 Ceph 的 Pool是虚拟机镜像存放的地方。我创建了一个名为 vm-storage 的池大小设置为 3 副本PG 数按公式计算。Ceph PG 数量的经验公式是PG 数量 (OSD 总数 × 100) / 副本数 取最接近的 2 的幂次方我这边 OSD 总数是 12副本数是 3计算结果是 12 × 100 / 3 400取接近的 2 的幂是 512。PG 数量不能太大也不能太小太小会导致单个 PG 数据量过大故障恢复慢太大则占用大量内存影响 Ceph 性能。512 对于 12 个 OSD 的三副本池已经是很合理的配置。创建完成后在 Web 界面的数据中心 - 存储里添加 Ceph 存储类型选 RBD命名和池对应即可。3.3 关键性能参数与优化存储池建好只是开始让虚拟机真正跑得流畅还需要调几个参数。第一虚拟机磁盘缓存模式。在 PVE 里创建虚拟机时磁盘总线建议选 VirtIO Block 或 SCSI缓存模式选 Write Back 或 None。Ceph RBD 本身有缓存机制虚拟机侧再用 Write Back 会导致两层写缓存叠加意外断电时数据一致性风险增加。我的经验是生产虚拟机用 VirtIO SCSI 加 IO Thread 开启缓存模式设为 None让 Ceph 端统一处理刷盘逻辑。第二内存和 CPU 的 NUMA 绑定。超融合节点上虚拟机多内存带宽和 CPU 亲和性直接影响性能。PVE 里每台虚拟机可以手动指定 CPU 类型为 host让虚拟机直接使用宿主机 CPU 指令集避免因 CPU 型号差异导致性能损失。同时打开 NUMA 选项确保虚拟机的内存分配尽量在本节点物理内存范围内减少跨 NUMA 节点的访问延迟。第三Ceph 的 OSD 内存和线程参数调优。每个 OSD 进程默认会占用一定内存如果节点内存不够OSD 频繁换页会拖垮性能。我的节点 256GB 内存分了 4GB 给系统缓存其余大部分交给 Ceph 使用。通过修改 /etc/ceph/ceph.conf可以设置 osd_memory_target 和 osd_op_threads 等参数但这些属于进阶玩法初期保持默认值就能获得不错的性能。第四定期做 Ceph 健康检查和性能监控。Web 界面的 Ceph 状态页会显示整个集群的健康状态、PG 分布、OSD 使用率等。我习惯每周看一次重点关注 PG 状态是不是都 activecleanOSD 使用率是否均衡网络流量是否有异常波动。数据分布越均衡集群性能越稳定。4. 踩坑日志与故障排查记录4.1 时钟不同步引发的集群抖动这是我最开始遇到的第一个大坑。三节点集群建好后PVE Web 界面偶尔提示“corosync quorum lost”虚拟机无法在线迁移Ceph 的监控服务也时好时坏。排查了一圈最后发现是第二台节点的时间超前了将近 40 秒导致 corosync 心跳包被当成无效数据丢弃集群反复重新选举。解决方法是配置统一的 NTP 服务器并确认所有节点时间差保持在 100ms 以内。测试机环境没有内网时间服务器的话用公网 NTP 服务也可以但机房生产环境建议搭建本地时间源因为公网 NTP 有时不稳定。配置完 ntpdate 手动同步一次再开启 chrony 做定期校准。这个坑提醒我任何分布式系统第一件事就是时间同步先后顺序别搞反了。4.2 网络抖动导致 OSD 被标记 down有一次机房交换机例行维护Ceph 集群的 cluster 网络短暂中断了大概两三分钟。恢复后我登录 Web 界面发现好几个 OSD 状态是 downPG 变成 degradedCeph 开始自动发起数据重建。表面上看问题不大数据会自动恢复但问题在于重建过程会消耗大量的网络带宽和磁盘 I/O导致正在运行的虚拟机存储延迟明显升高。后来我在 ceph.conf 里调整了 OSD 心跳相关的参数把 osd_heartbeat_grace 从默认的 20 秒适当调大避免短时间网络抖动就触发 OSD 标记 down。另外重要的一点是尽量使用 bonding 或者多路径方式增强 cluster 网络的可靠性毕竟存储网络抖动一次整个集群都要跟着颤抖。Ceph 自身有网络异常后的自动恢复机制但作为运维者减少不必要的触发才是更优解。4.3 误删存储池后的数据恢复教训这个坑是纯粹的“手滑”事故。某次我在 Web 界面上清理测试用的存储池本来想删掉一个实验用的旧池结果点错了按钮把 vm-storage 池给删掉了。删除确认框弹出来的时候我想都没想就点了确认等反应过来整个池的配置已经没了。好在 Ceph 删除池后数据并未立即物理清除只是元数据被标记删除。如果池设置了 --yes-i-really-really-mean-it 参数新的写入会覆盖旧数据所以发现误删后第一时间应该停止所有写入操作然后通过 Ceph 的备份机制恢复。我这里因为之前对池做过 RBD 快照和导出算是捡回一条命但整个过程耗时巨大。从那以后我给自己立了规矩生产环境的任何删除操作都必须经过二次确认Web 界面里同样需要谨慎操作最好先在测试环境演练一遍删除流程。4.4 常见问题速查表问题现象可能原因排查思路与解决办法集群节点反复离线时间不同步统一配置 NTP检查 /etc/hosts 解析Ceph 状态不是 healthyOSD down 或 PG 卡住查看 OSD 日志确认网络连通性等待自动恢复虚拟机磁盘性能差缓存模式配置不当调整磁盘缓存为 None开启 IO ThreadCeph 数据分布不均衡OSD 权重设置不合理使用 reweight-by-utilization 命令调整PVE 无法创建虚拟机存储池未添加或权限错误检查池是否存在确认 VM 的存储 ID 配置在线迁移失败虚拟机磁盘类型不支持确认使用共享存储虚拟磁盘改为 RBD 或 CephFS节点重启后 OSD 不启动磁盘分区挂载异常检查 /etc/fstab确认磁盘 UUID 是否正确5. 使用体验与扩展建议这套 PVE 超融合集群从搭建到现在运行了快半年整体感受是稳定性和灵活性都超出预期。日常维护只需要在 Web 界面上点几下虚拟机创建、迁移、快照、备份这些操作非常顺手。Ceph 存储的健康状态一目了然磁盘故障只需要换盘后重新创建 OSDCeph 会自动把数据重新均衡回去整个过程不需要业务停机。三节点的小集群承载我们十几台虚拟机和若干容器CPU 和内存资源还有不少富余后续业务增长直接加节点和磁盘就能平滑扩容。如果让我给还没入坑的朋友几个实用建议第一是网络规划一定要舍得投入万兆网卡和万兆交换机是超融合的底线千兆环境跑 Ceph 会非常痛苦第二是不要一开始就追求复杂的纠删码、缓存分层这些高级功能先用默认的三副本模式跑稳定再说第三是养成做备份的习惯PVE 自带的 vzdump 备份、Ceph 的 RBD 快照都要定期演练恢复流程超融合不是数据安全的保险箱完善的备份才是。最后再分享一个小技巧多关注 PVE 官方论坛和 Ceph 社区很多别人踩过的坑、写过的经验文档都比你一个人摸索来得快。希望这篇实践记录能帮你在 PVE 超融合的路上少踩几个坑。本文还有配套的精品资源点击获取
返回列表