从0到3PB:我如何在香港服务器上用Ceph重构分布式存储,彻底解决跨机房带宽瓶颈

从0到3PB:我如何在香港服务器上用Ceph重构分布式存储,彻底解决跨机房带宽瓶颈

上月底,我们的视频点播平台在香港将军澳机房新上了三套 GPU 编码节点,素材库瞬间从 800 TB 膨胀到 3 PB。原有 NFS 孤岛不但 IOPS 打满,而且跨机房复制一度让 40 GbE 干路飙到 98 %。老板一句“再卡就砍预算”,我硬着头皮在 14 天里把存储栈全面替换成 Ceph Reef 18.2.0。下面就是我的实操全过程——没有神秘黑盒,只有实实在在的踩坑笔记。

1. 环境与需求拆解

角色 规格 数量 关键备注
OSD 节点 2 × Intel Xeon 4314、256 GB RAM、6 × 18 TB HDD + 2 × 1.92 TB NVMe(DB/WAL) 12 HDD 做数据盘,NVMe 做 BlueStore DB/WAL;双 25 GbE
MON/MGR 同上但无 HDD 3 独立节点,避免 OSD 抢占 CPU
RGW 前端 AMD EPYC 7313P、128 GB、2 × 960 GB NVMe 4 负责 S3 入口,双 25 GbE
交换机 25 GbE TOR × 2,100 GbE 核心 2+2 TOR 端口聚合,核心骨干
机房 TKO-E, TKO-W, MEGA-I 3 机架级冗余,跨园区延迟 < 0.8 ms

硬指标

  • 写入 ≥ 8 GB/s 聚合带宽
  • 小对象 (< 1 MB) 每节点 ≥ 15 k IOPS
  • 跨机房异步复制 RPO < 15 min
  • 未来两年线性扩展到 10 PB

2. 拓扑与 CRUSH 规则设计

                     ┌─────────2025-06-16─────────┐
     [Public 25 GbE]─┤ RGW Front-end (HAProxy)    │
                     └─────────┬──────────────────┘
                               │
      ┌──────────── 25 GbE TOR Bond0 ────────────┐
      │                                          │
┌─────┴─────┐                               ┌────┴─────┐
│   MON/MGR │                               │   MON/MGR│
└─────┬─────┘                               └────┬─────┘
      │                                          │
  ┌───▼──────────────────────────────────────────▼───┐
  │                   OSD Pool                       │
  └───▲──────────────────────────────────────────▲───┘
      │                100 GbE Spine               │
┌─────┴─────┐                               ┌────┴─────┐
│   MON/MGR │                               │   MON/MGR│
└───────────┘                               └───────────┘

分层要点

  • root = {dc} → rack → host 三层,保证机房级副本。
  • replicated_ruleset:副本 3;写主副本优先本机房,读允许跨机房。
  • erasure_coding:冷归档池采用 4 + 2 EC,降低 35 % 磁盘占用。

3. 部署步骤

3.1 前置操作

# 关闭 SELinux & 防火墙,仅保留 UFW inbound 6789/3300
setenforce 0 && sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
systemctl disable --now firewalld
ufw allow 6789/tcp && ufw allow 3300/tcp

# 调大内核网络缓冲区
cat >> /etc/sysctl.d/99-ceph.conf <<'EOF'
net.core.rmem_max = 536870912
net.core.wmem_max = 536870912
net.ipv4.tcp_rmem = 4096 87380 536870912
net.ipv4.tcp_wmem = 4096 65536 536870912
EOF
sysctl -p /etc/sysctl.d/99-ceph.conf
  • 时钟同步:所有节点走内部 PTP,万一核心交换时钟漂移,用 chrony 联动。
  • 巨页:echo never > /sys/kernel/mm/transparent_hugepage/enabled 避免 write latency 扰动。

3.2 安装 cephadm

curl --silent --remote-name https://download.ceph.com/keys/release.asc
gpg --no-default-keyring --keyring ~/ceph-release.gpg --import release.asc
dnf install -y cephadm ceph-common podman
cephadm add-repo --release reef
cephadm install cephadm

3.3 引导集群

cephadm bootstrap \
  --mon-ip 10.0.100.11 \
  --cluster-network 172.16.0.0/16 \
  --fsid $(uuidgen) \
  --initial-dashboard-user admin --initial-dashboard-password 'Str0ng!Pass'

3.4 扩容 Monitor & Manager

for h in mon2 mon3; do
  ceph orch host add $h
  ceph orch apply mon $h
  ceph orch apply mgr $h
done

3.5 部署 OSD(NVMe-DB/WAL + HDD-Data)

ceph orch apply osd --all-available-devices --db-devices '/dev/nvme0n1 /dev/nvme1n1' \
  --filter-by-label 'rack=tko-e'

3.6 业务池创建

# 高性能池
ceph osd pool create vdo_hot 256 256 replicated
ceph osd pool set vdo_hot size 3
ceph osd pool set vdo_hot pg_autoscale_mode on

# 冷数据 EC 池
ceph osd pool create vdo_cold 512 512 erasure erasure-profile=ec42

3.7 为应用暴露接口

# S3 网关
ceph orch apply rgw vdo-rgw --placement="count:4" --port=80 --dashboard-port=8443
# CephFS
ceph fs volume create vdo_fs --placement="count:2"

4. 性能瓶颈定位与优化

症状 根因 调优手段
小文件写 99 th > 25 ms bluestore_min_alloc_size_hdd 默认 64 k 降至 16 k,兼顾碎片
Backfill 漫长 HDD 顺序写饱和 osd_max_backfills=1 + 提前扩容 pgs
RGW 吞吐抖动 CPU 软中断 rps_cpus, xps_cpus 绑到 NUMA 节点 0
跨机房写慢 TCP Cubic 拥塞 bbr2 + net.ipv4.tcp_adv_win_scale=1

PG 公式

从0到3PB:我如何在香港服务器上用Ceph重构分布式存储,彻底解决跨机房带宽瓶颈

我按 12 * 200 / 3 ≈ 800,为热池设置 768,冷池 512;升级 OSD 后用 ceph osd pool set <pool> pg_num 在线调整。

5. 监控与运维

Prometheus-Ceph Exporter:ceph orch apply mgr prometheus 一键拉起。

自定义告警:

- alert: CephDiskAlmostFull
  expr: ceph_cluster_df{type="total_used_raw"} / ceph_cluster_df{type="total_bytes"} > 0.80
  for: 10m
  labels:
    severity: critical

每周演练:ceph osd out <id> + 断网 10 min,验证副本重平衡 ≤ 20 min。

6. 滚动升级与扩展策略

  • ceph orch upgrade start –image quay.io/ceph/ceph:v18.2.1
  • ceph orch host maintenance enter <host> → OSD drain → upgrade → exit
  • 新机房上线直接 orch host add + orch apply osd,PG 自动重平衡。

两周从零到三副本 + EC 冷池,集群写入带宽从 2 GB/s 飙到稳态 9.7 GB/s,小文件 p99 延迟砍半;跨机房复制窗口从 3 h 缩到 11 min。更重要的是,后续扩容只需上架硬盘、执行一条 orch apply osd,完全不影响线上业务。

如果你也在香港机房被存储拖慢,不妨照着我的流程先搭一套 PoC——Ceph 最大的门槛在概念而非命令。踩过的坑已经铺成路,剩下的是把集群跑顺、把老板的预算花在刀刃上。祝各位早日告别“带宽见底恐惧症”。

未经允许不得转载:A5数据 » 从0到3PB:我如何在香港服务器上用Ceph重构分布式存储,彻底解决跨机房带宽瓶颈

相关文章

contact