如何在香港服务器上利用Ceph配置分布式存储,提升大规模数据管理与灾备能力?

如何在香港服务器上利用Ceph配置分布式存储,提升大规模数据管理与灾备能力?

我们公司业务快速扩张之后,单机NFS与传统RAID阵列逐渐无法满足高可用性与数据灾备的需求。特别是面对每日数TB的数据增长和跨IDC的实时访问请求,传统方案在性能与可扩展性方面都频频踩雷。

于是我决定在香港服务器集群上部署Ceph,构建一套支持弹性扩容、高可靠性与高性能的数据平台,同时结合远程异地灾备机制,支撑我们的视频内容分发、归档存储与备份系统。

本文将完整记录我如何从零构建这套基于Ceph的分布式存储系统,包括部署架构、性能调优、故障容灾设计等细节。

一、部署前的架构规划

1.1 需求评估

  • 每日数据增长:2-3 TB
  • 访问模式:95%为顺序读写,5%为高并发小文件访问
  • 灾备目标:RPO < 15 分钟,RTO < 10 分钟
  • 数据中心:香港沙田主机房 + 异地金钟容灾点

1.2 架构设计

我采用了 Ceph Octopus(15.2)版本构建三副本的分布式对象存储,结合 RADOS Gateway 提供 S3 兼容接口,同时配合异地同步进行灾备。架构如下:

   [Clients]──►[HAProxy + RGW x2]
                │
          ┌─────┴─────┐
          │  MON x3   │
          │  MGR x2   │
          └────┬──────┘
               │
        ┌──────┴───────┐
        │   OSD Node x6│
        │ NVMe + HDD混布│
        └──────────────┘
               │
        [远程同步到金钟备份集群]

二、部署实操步骤

2.1 安装前准备(以Ubuntu 22.04为例)

sudo apt update
sudo apt install ntp chrony lvm2 cephadm -y
sudo cephadm bootstrap --mon-ip 192.168.100.11 --cluster-network 10.10.10.0/24

将部署节点标记为管理节点后添加其他主机:

ceph orch host add osd-node1 192.168.100.21
ceph orch host add osd-node2 192.168.100.22
...

2.2 OSD配置

采用 lvm batch 批量部署,NVMe作DB,HDD作数据盘:

ceph orch daemon add osd osd-node1:/dev/nvme0n1 --block-db /dev/sda

优化journal、filestore参数(针对机械盘):

ceph config set osd osd_mkfs_type xfs
ceph config set osd osd_mkfs_options_xfs "-f -i size=2048"

2.3 RGW部署(作为S3接口层)

ceph orch apply rgw myrealm.myzone --placement="2 osd-node1 osd-node2"

并配置反向代理(HAProxy)做流量入口:

frontend s3_front
    bind *:80
    default_backend s3_backend

backend s3_backend
    server rgw1 192.168.100.21:7480 check
    server rgw2 192.168.100.22:7480 check

三、性能优化与配置细节

3.1 网络层优化

  • 启用 Jumbo Frame:MTU 调至 9000
  • Bonding 模式使用 LACP 802.3ad

开启内核参数调优:

sysctl -w net.core.rmem_max=268435456
sysctl -w net.core.wmem_max=268435456

3.2 Ceph 参数优化

ceph config set global osd_pool_default_pg_num 512
ceph config set global osd_pool_default_pgp_num 512
ceph config set global mon_osd_down_out_interval 600
ceph config set global mon_osd_min_down_reporters 2

3.3 数据分层策略(HDD + NVMe)

通过 ceph-volume 分层:

  • NVMe 用于 writeback 缓存(block.db)
  • HDD 存储冷数据
  • 使用 ceph balancer 动态平衡 I/O 分布

四、容灾机制:异地集群 + 异步同步

我在金钟IDC部署了一套轻量级 Ceph 集群,仅包含 MON + MGR + OSD(2副本)。通过 rclone + radosgw-admin 脚本定时同步:

rclone sync s3://prod-bucket s3://backup-bucket \
  --s3-endpoint=https://backup.rgw.hk \
  --s3-access-key=XXX --s3-secret-key=YYY

配合 Prometheus + Alertmanager 检测同步延迟,一旦RPO > 10min即报警。

五、监控与日常维护

使用 ceph dashboard、Prometheus 结合 Grafana:

  • 关键指标:OSD利用率、PG状态、客户端读写延迟
  • 关键告警规则示例(Prometheus):
- alert: CephOSDDown
  expr: ceph_osd_up == 0
  for: 5m
  labels:
    severity: critical

我还定期执行如下检查脚本:

ceph health detail
ceph osd df tree
ceph pg dump | grep inactive

六、经验教训

Ceph虽然部署曲线陡峭,但它真正解决了我们以往存储扩展受限、节点单点风险和异地备份难以自动化的问题。以下是我踩过的坑与建议:

  • OSD混部要小心:不同磁盘性能差距大时需设置 bluestore_cache_autotune=false 进行手动调节;
  • RGW 性能瓶颈:避免将多个RGW服务绑定在单个OSD节点上,避免IO争抢;
  • 灾备延迟监控:千万别依赖“看起来正常”,需要量化 RPO、RTO 与可用性指标。
  • 目前我们在香港Ceph集群上存储超过2PB数据,月度成本比ECS+OSS方案节省近40%,且稳定性显著提升。未来我们还计划引入 CephFS 进行高性能视频转码中间缓存。

如你也在香港机房构建大规模分布式存储,Ceph 绝对是值得投入时间深入研究的方案。希望本文能为你节省一些踩坑时间。

七、典型故障案例排查

在Ceph集群运行过程中,我遇到过数个典型的故障场景,如果未能及时定位,将直接影响存储的可用性甚至造成服务中断。以下列出我实际遇到的三类关键问题及排查过程。

案例一:OSD频繁掉线,数据写入卡顿

现象:

集群状态从 HEALTH_OK 变为 HEALTH_WARN;

某些 OSD 显示为 down 状态,客户端写入请求明显变慢。

排查步骤:

登录 MON 节点查看详细健康信息:

ceph health detail

输出中提示:

1 osds down
Reduced data availability: 100 pgs degraded

查看 OSD 守护进程日志:

journalctl -u ceph-osd@15

日志中发现有如下错误:

heartbeat_no_reply from osd.15 since ... marked down

登录 OSD 节点,发现网络异常:

ping -I bond0 192.168.100.11

丢包率 > 30%,排查发现是 bond0 配置未启用 LACP,链路抖动。

解决方案:

修改网卡 bonding 模式为 802.3ad;

优化 switch 与服务器的 LACP 配置;

重启网络后恢复 OSD 状态:

ceph osd in 15

案例二:RADOS Gateway S3接口频繁超时

现象:

  • 使用 S3 接口上传大文件失败;
  • 客户端日志提示超时或连接重置;
  • RGW 日志中无明显异常。

排查步骤:

检查RGW节点的系统负载:

top
iotop -ao

发现 RGW 所在节点 CPU/IO使用率飙升,尤其是磁盘延迟明显。

查看RGW与OSD部署分布:

ceph orch ps | grep rgw

原来 RGW 与多个高IO OSD混布在同一台物理机上。

检查radosgw日志:

tail -f /var/log/ceph/ceph-rgw.*

并未出现内部错误,但处理请求耗时较长。

解决方案:

  • 将 RGW 与 OSD 进行物理隔离;
  • 增加 RGW 节点,并使用 HAProxy 做负载均衡;

针对大文件上传开启 multipart 配置:

rgw_s3_chunked_upload = true
rgw_max_chunk_size = 100MB

案例三:集群PG状态异常,部分数据无法读取

现象:

ceph health detail 报告有 PG 处于 stuck degraded 或 incomplete;

某些对象无法读取,提示 error -2 (No such file or directory)。

排查步骤:

查找异常 PG 编号:

ceph pg dump | grep incomplete

查看 PG 的详细状态:

ceph pg 5.23 query

显示其中一副本的 OSD 永久丢失,且没有足够副本完成恢复。

结合日志排查丢失对象:

ceph pg 5.23 list_missing

显示若干对象处于 lost 状态。

解决方案:

手动标记对象为丢失(如果确实无副本):

ceph pg 5.23 mark_unfound_lost revert

或者,如果业务可以容忍数据缺失,标记为删除:

ceph pg 5.23 mark_unfound_lost delete

后续增强措施:开启 EC(Erasure Coding)池和对象多副本校验,提升容错能力。

Ceph 的复杂性在于其分布式架构中,网络、存储、服务进程三者之间高度耦合,任何一个环节的小抖动都可能放大为业务故障。我的经验是:

  • 第一时间看 ceph health detail;
  • 善用 ceph pg query、ceph osd tree、ceph orch ps等命令定位状态;
  • 日志优先查/var/log/ceph与systemd journal;
  • RGW类问题一般先查IO与混布问题。

保持监控告警的实时性、日志归档完整性以及节点角色分离,是确保Ceph在香港业务场景中长期稳定运行的核心策略。

未经允许不得转载:A5数据 » 如何在香港服务器上利用Ceph配置分布式存储,提升大规模数据管理与灾备能力?

相关文章

contact