找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

458

积分

0

好友

66

主题
发表于 前天 00:05 | 查看: 5| 回复: 0

——一篇写给生产环境的 Ceph+RBD 实战笔记

目录

  1. 为什么要“分离”
  2. 分离架构的四个核心知识点 2.1 角色拆分:计算节点 vs 存储节点 2.2 网络平面:三网隔离与多路径 2.3 数据面:Ceph 的公共网与集群网 2.4 控制面:Proxmox 集群与 Ceph 集群的 Quorum 差异
  3. 最小可生产拓扑与硬件选型
  4. 部署全流程(带注释命令)
  5. 性能调优:全闪、BlueStore、压缩与 QoS
  6. 高可用与灾备策略
  7. 扩容与故障演练 checklist
  8. 常见坑 12 例
  9. 小结与参考链接

1. 为什么要“分离”

传统超融合架构(HCI)将计算和存储(OSD)部署在同一台服务器,其优点是架构简单、初始成本低;但缺点也同样明显:

  • 节点宕机 = 计算能力丢失 + 存储重平衡双重震荡;
  • 扩容时必须“CPU+磁盘”一起采购,容易造成资源浪费;
  • 无法针对高IO型和高计算型工作负载分别优化硬件。

分离式架构将存储角色集中到专用的“存储节点”,计算节点则专注运行QEMU/KVM虚拟机,通过RBD协议远程挂载存储节点提供的块设备。这种架构带来以下核心收益:

  1. 故障域隔离:计算节点离线不会触发Ceph数据重平衡(rebalance);
  2. 独立扩缩容:CPU资源不足则添加计算节点,IOPS/容量不足则添加存储节点;
  3. 硬件专项优化:计算节点可选用高频CPU,存储节点则配置全闪阵列与大内存缓存;
  4. 网络流量可预测:存储内部流量与虚拟机业务流量物理隔离,避免相互干扰。

2. 分离架构的四个核心知识点

2.1 角色拆分:计算节点 vs 存储节点

  • 计算节点(Compute Node) – 安装 pve-managerqemu-servercorosync 等核心组件。 – 不安装 ceph-monmgrosd。 – 本地磁盘仅用于ZFS L2ARC/SLOG或安装系统,不存放虚拟机镜像。 – 通过 librbd 挂载远端Ceph Pool提供的RBD块设备。
  • 存储节点(Storage Node) – 安装 ceph-monmgrosd(可选MDS/RGW)。 – 不运行用户虚拟机,可选用低频多核CPU。 – 内存建议 ≥ 8 GB/TB OSD容量,供BlueStore缓存使用。 – 磁盘采用全闪或多层混合方案,对外提供RBD、RGW、CephFS接口。

2.2 网络平面:三网隔离与多路径

为确保性能和稳定性,生产环境建议进行网络平面隔离:

名称 典型 VLAN 流量特征 交换机要求
管理网 10 Web/SSH、corosync、API 千兆即可,需冗余
存储公网 20 客户端读写、mon/mgr通信 10/25 GbE,建议LACP
存储私网 30 OSD 心跳、数据rebalance、recover 10/25/40 GbE,低延迟
业务网 40 VM 南北向/东西向流量 10/25 GbE,可Overlay

关键点:存储私网必须二层网络可达,公网可支持三层路由;多路径配置下,公网可采用双活bond,私网则建议使用单交换机MLAG或独立双网卡直连。

2.3 数据面:Ceph 的公共网与集群网

  • public network = 客户端(计算节点)访问MON和OSD的IP网络。
  • cluster network = OSD之间进行数据复制、心跳检测的内部IP网络。
  • 在分离架构中,数据重平衡(rebalance)流量仅走cluster network,而虚拟机的读写IO走public network,两者互不干扰,这是实现网络流量可预测的关键。
  • 建议在所有存储网络(公网和私网)上端到端启用mtu 9000(巨帧),可降低约5–8%的CPU开销。

2.4 控制面:Proxmox 集群与 Ceph 集群的 Quorum 差异

  • Proxmox集群:使用corosync,仲裁(quorum)规则为 ⌊n/2⌋+1,因此节点数最好为奇数。
  • Ceph Monitor集群:使用Paxos算法,仲裁规则同样为 ⌊n/2⌋+1,但其节点数可以与计算节点数不同。
  • 带来的灵活性:可以采用“3存储节点 + 2计算节点”的起步配置。存储侧有完整的仲裁能力,计算侧即使只有2个节点,也可通过外部仲裁磁盘(qdevice)来满足Proxmox集群的仲裁要求。对于希望构建稳定、可扩展的云原生基础设施的团队,理解这种分离控制面的设计至关重要。

3. 最小可生产拓扑与硬件选型

一个可投入生产的起步规模建议为:3个存储节点 + 2个计算节点,此配置可容忍任意1个存储节点整机离线。

节点类型 CPU 示例 内存 磁盘系统 网络
存储节点 1×Intel 4314(16C) 256 G 系统盘:2×1 TB SATA;数据盘:6×3.84 TB U.2 NVMe 2×25 GbE (公+私)
计算节点 2×E5-2680v4(28C) 256 G 系统盘:2×480 GB SATA;可选ZFS缓存盘 2×10 GbE (业+管)

说明

  • 每1 TB OSD容量建议配置4 GB内存,BlueStore默认缓存约1 GB/TB。
  • 全闪存场景下写放大较低,可开启在线压缩(如lz4),额外CPU开销通常<3%。
  • 计算节点本地磁盘仅建议存放ISO模板、备份缓存等,所有虚拟机磁盘应存放于远端RBD存储。

4. 部署全流程(带注释命令)

假设所有节点已安装Proxmox VE 9.x,内核版本≥ 6.5。

步骤 1:存储节点初始化(以 node-s1 为例)

# 1. 安装 Ceph 包,这里指定使用 squid (19.2) 版本
pveceph install --version squid

# 2. 创建第一个 MON,并指定公共网络和集群网络
pveceph mon create --public-network 10.10.20.0/24 \
                   --cluster-network 10.10.30.0/24

# 3. 创建 MGR (Manager)
pveceph mgr create

# 4. 批量创建 OSD(每块数据盘使用独立的WAL/DB设备,元数据存放在最快的NVMe盘上)
for d in nvme{0..5}n1; do
  pveceph osd create /dev/$d \
     --db-dev /dev/nvme6n1 --wal-dev /dev/nvme6n1
done

# 5. 新建存储池,设置副本数为3,pg_num根据官方公式计算(此处128为示例)
ceph osd pool create vm-ssd 128 128 replicated
ceph osd pool application enable vm-ssd rbd

步骤 2:剩余存储节点加入

node-s2node-s3 上执行:

# 加入Ceph Monitor集群
pveceph mon create
# 然后同样使用 `pveceph osd create ...` 命令添加本地OSD

步骤 3:计算节点加入 Proxmox 集群

在计算节点上执行(本地不安装Ceph):

pvecm add 10.10.10.11          # 填入任一存储节点的管理IP地址

步骤 4:在计算节点挂载外部 RBD 存储

通过Web UIDatacenterStorageAddRBD,配置如下:

  • ID: vm-ssd
  • Monitors: 10.10.20.11,10.10.20.12,10.10.20.13
  • Pool: vm-ssd
  • Content: Disk image, Container
  • KRBD: (推荐使用用户空间的librbd,性能更好且无需关心内核模块升级)

CLI 等价命令

pvesm add rbd vm-ssd \
  -monhost "10.10.20.11,10.10.20.12,10.10.20.13" \
  -pool vm-ssd -content images,rootdir -krbd 0

步骤 5:创建虚拟机验证

# 创建一台虚拟机
qm create 100 --memory 4096 --cores 2 --net0 virtio,bridge=vmbr40
# 将磁盘镜像导入到刚添加的RBD存储中
qm importdisk 100 debian-12.qcow2 vm-ssd
# 将虚拟磁盘挂载到虚拟机
qm set 100 --virtio0 vm-ssd:vm-100-disk-0
# 启动虚拟机
qm start 100

在任意存储节点执行 ceph -s,若看到 pgs: 128 active+clean,则表明部署成功。

5. 性能调优:全闪、BlueStore、压缩与 QoS

  1. BlueStore 缓存自动调优 bluestore_cache_autotune = 1 默认开启,当内存充足时,OSD会自动将更多热数据保留在内存中,提升读取性能。
  2. 在线压缩
    ceph osd pool set vm-ssd compression_algorithm lz4
    ceph osd pool set vm-ssd compression_mode aggressive

    实测对4KB随机写IOPS影响<3%,可获得约1.7倍的容量节省比。

  3. QoS(使用 mclock 调度器) Proxmox VE 9 已内置 osd_mclock_profile = high_client_ops 配置。该调度器可将后台数据恢复(recover)带宽限制在25%左右,从而让前端虚拟机的写延迟下降约30%。
  4. 启用巨帧(Jumbo Frame) 在存储公网和私网交换机、服务器网卡上统一启用 mtu 9000。实测单流4MB顺序写带宽可从1.8 GB/s提升至2.3 GB/s。实现高效的存储性能优化是保障业务稳定的关键一环。

6. 高可用与灾备策略

  • VM 级别高可用 (HA): 当计算节点≥3时,启用 pve-ha-manager。为虚拟机设置 ha: started 策略,节点失联约30秒后会自动在其他健康节点上启动。
  • Ceph 集群自愈
    • 设置 mon_osd_down_out_subtree_limit = host,防止单个主机离线导致整个集群触发大规模数据重平衡。
    • 设置 osd_max_backfills = 1,控制后台数据恢复的并发度,降低对前台IO的影响。
  • 跨机房双活: 可采用 Ceph Stretch Mode。部署2组各3个存储节点分属两个机房,将仲裁MON部署在第三个站点(如托管机房),可实现容忍一个可用区(AZ)级别的故障。
  • 备份与容灾: 异地部署 Proxmox Backup Server (PBS)。通过 pbs-offline 工具同步加密备份,可实现RPO(恢复点目标)约15分钟,RTO(恢复时间目标)小于30分钟。

7. 扩容与故障演练 checklist

场景 操作步骤
增加计算节点 安装PVE → pvecm add → 配置网络和存储 → 完成
增加存储节点 安装PVE → pveceph installmon createosd create → 调整存储池pg_num(如需)
增加OSD磁盘 直接执行 pveceph osd create,Ceph会自动进行数据重平衡
更换故障磁盘 ceph osd out {osd-id} → 等待数据迁移完毕 → ceph osd purge {osd-id} → 物理拔盘换新 → 创建新OSD
计算节点宕机 确认HA策略已生效 → 观察VM是否在其他节点自动启动 → 对故障节点进行检修
存储节点宕机 执行 ceph -s 确认状态为 HEALTH_WARN → 检查mon/osd状态 → 进行网络或磁盘故障排查

8. 常见坑 12 例

  1. 在计算节点误装了 ceph-osd 包,导致CPU资源被后台scrub等任务抢占。
  2. 配置Ceph时,将公网(public)和私网(cluster)的网段或掩码写反,导致OSD无法心跳,集群闪断。
  3. 使用千兆交换机承载存储流量,当发生数据恢复(recover)时,VM业务IOPS骤降,出现卡顿。
  4. 存储池的副本数(size)设置为2,误拔一块硬盘即可能导致数据丢失。
  5. 启用了KRBD(内核RBD),但内核升级后未同步更新或加载相应模块,导致VM无法启动。
  6. 计算节点本地使用ZFS,但未配置SLOG(同步写日志)设备,ZFS的写放大效应冲高了RBD的写入延迟。
  7. 存储池的PG数量(pg_num)设置过小,在集群扩容后触发PG分裂,此过程可能耗时数天,期间性能下降。
  8. 未关闭服务器swap,在内存压力大时OSD进程可能被OOM Killer终止。
  9. 只在一端(服务器或交换机)启用了Jumbo Frame,导致MTU不匹配,可能引起MON选举失败或网络性能不佳。
  10. 防火墙规则未放行Ceph所需的全端口(如6789, 6800-7300),导致OSD状态频繁up/down
  11. 虚拟机磁盘使用virtio-scsi控制器但未开启iothread,导致4KB随机写性能下降可达40%。
  12. 在Stretch Mode下,仲裁站点断电后,忘记预先设置 tiebreaker_mon,导致整个Ceph集群卡在只读状态。

9. 小结与参考链接

采用计算与存储分离的架构后,您将获得一个更清晰、更灵活的基础设施:

  • 故障域清晰,扩容不再被“绑定销售”所困扰。
  • 性能可预测,网络和磁盘IO各自运行在专属通道上。
  • 硬件迭代独立,CPU可能3-5年一换,而闪存硬盘可能5-7年一换,两者升级节奏互不影响。

如果您正计划从3节点的超融合架构升级到10+节点的生产私有云,分离式架构几乎是必然选择。遵循运维最佳实践,您可以先用本文的“3存储+2计算”模板搭建测试或小规模生产环境,验证流程,再根据业务需求横向扩展节点即可。

参考链接




上一篇:Spring Boot集成OpenTelemetry实战指南:5分钟实现微服务链路追踪
下一篇:Spring CacheManager源码深度解析:从缓存实例创建到避免缓存穿透
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区(YunPan.Plus) ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-7 02:28 , Processed in 0.077614 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 CloudStack.

快速回复 返回顶部 返回列表