本文覆盖从硬件选型到网络架构、软件安装、配置实践、性能调优、评测数据及常见故障处理的完整流程,并提供详细代码示例与测试表格,旨在帮助读者在实际生产环境部署一个稳定、高效的 Ceph 分布式存储系统。
一、背景与目标
在大规模文件存储场景下,需要解决以下核心问题:
- 高冗余性与数据可用性
- 可水平扩展的性能
- 自动修复与自愈能力
- 清晰的监控与告警机制
Ceph 是一个开源的分布式存储系统,原生支持对象存储(RADOS/Gateway)、块存储(RBD)与文件系统(CephFS)。本教程以 Manjaro Linux (基于 Arch Linux 滾動發行发行版)为操作系统环境,通过 cephadm 管理工具构建 Ceph Quincy 版本集群。Manjaro 的滚动更新特性意味着软件包通常较新,因此在部署中需要关注兼容性问题。
二、整体架构设计
A5IDC构建的 Ceph 集群由以下香港服务器www.a5idc.com的节点组成:
| 节点角色 | 数量 | CPU | 内存 | 存储 | 网络 |
|---|---|---|---|---|---|
| Mon / Manager | 3 | 8 核 AMD EPYC | 32GB | 2×1TB NVMe | 25GbE |
| OSD(存储守护进程) | 6 | 12 核 Intel Xeon | 64GB | 6×4TB HDD + 2×2TB NVMe Cache | 25GbE |
| MDS(CephFS Metadata) | 2 | 8 核 Intel Xeon | 32GB | 1×1TB SSD | 10GbE |
| RGW(对象网关) | 2 | 8 核 Intel Xeon | 32GB | 2×2TB SSD | 25GbE |
| Prometheus / Grafana | 1 | 4 核 | 16GB | 1×1TB SSD | 10GbE |
网络建议采用 双网络分离:
- 公共网络:Ceph 集群控制与管理流量
- 集群网络:OSD / CRUSH 流量
生产环境强烈建议使用至少 10GbE 网络,Ceph 的内部流量较大,网络瓶颈会显著影响性能。
三、准备工作
3.1 Manjaro 前置设置
- 启用多用户目标及必要模块:
bash
sudo pacman -Syu
sudo pacman -S base-devel git
- 确保系统时间同步:
bash
sudo pacman -S chrony
sudo systemctl enable --now chronyd
- 关闭 Swap(建议 Ceph 节点不启用 Swap):
bash
sudo swapoff -a
3.2 安装 Docker 或 Podman
Cephadm 依赖容器化环境:
bash
sudo pacman -S podman
sudo systemctl enable --now podman
四、Ceph 安装与引导
4.1 获取 Cephadm 二进制
bash
curl --silent --remote-name https://raw.githubusercontent.com/ceph/ceph/main/src/cephadm/cephadm
sudo chmod +x cephadm
sudo mv cephadm /usr/local/bin/
4.2 引导 Ceph 集群
在 Mon 节点 A 上执行:
bash
sudo cephadm bootstrap \
--mon-ip 192.168.1.10 \
--cluster-network 10.0.0.0/24 \
--public-network 192.168.1.0/24 \
--image ceph/quincy:latest
成功后可以查看状态:
bash
sudo ceph status
五、部署关键 daemons
5.1 部署 OSD
先准备设备列表 devices.json:
json
{
"nodes": [
{
"hostname": "osd-node1",
"devices": ["/dev/nvme1n1", "/dev/sdb", "/dev/sdc", "/dev/sdd"]
},
{
"hostname": "osd-node2",
"devices": ["/dev/nvme1n1", "/dev/sdb", "/dev/sdc", "/dev/sdd"]
}
]
}
运行:
bash
sudo ceph orch daemon add osd osd-node1:/dev/nvme1n1
sudo ceph orch daemon add osd osd-node1:/dev/sdb
5.2 部署 MDS(CephFS)
bash
sudo ceph orch apply mds cephfs-mdt --placement="count:2"
5.3 部署 RGW(对象网关)
bash
sudo ceph orch apply rgw rgw-site1 --realm=myrealm --zonegroup=myzonegroup --zone=myzone --placement="count:2"
六、性能调优
6.1 CRUSH Map 规则
我们定义热数据和冷数据存储策略:
| 存储策略 | 副本数 | 目标硬件 |
|---|---|---|
| 热数据池 | 3 | NVMe |
| 冷数据池 | 2 | HDD |
创建池:
bash
sudo ceph osd pool create hot-pool 128 128 replicated erasure default
sudo ceph osd pool set replicated_size 3
6.2 网络优化
编辑 Ceph 配置:
bash
sudo ceph config set global ms_bind_ipv6 false
sudo ceph config set global public_addr 192.168.1.10
sudo ceph config set global cluster_network 10.0.0.0/24
6.3 内核与磁盘调优
- 关闭磁盘调度器:
bash
for d in /dev/sd?; do
echo noop | sudo tee /sys/block/$(basename $d)/queue/scheduler
done
- 调整 TCP 缓冲区:
bash
sudo sysctl -w net.core.rmem_max=67108864
sudo sysctl -w net.core.wmem_max=67108864
七、监控与告警
7.1 部署监控栈
bash
sudo ceph orch apply prometheus prometheus --port 9090
sudo ceph orch apply grafana grafana --port 3000
7.2 常用监控指标
| 指标 | 说明 | 预期范围 |
|---|---|---|
| osd_op_latency | OSD 操作延迟 | < 5ms |
| client_io_rate | 客户 IO 速率 | 随负载不同 |
| osd_recovery | 恢复速率 | > 50 MB/s |
八、性能测试与评估
8.1 测试工具
使用 rados bench 与 fio 做基准测试。
rados 写测试
bash
sudo rados bench -p hot-pool 60 write --no-cleanup
fio 块设备测试
bash
fio --name=randread --ioengine=libaio --iodepth=32 --rw=randread --bs=4k --direct=1 --size=5G --numjobs=4 --runtime=60 --group_reporting
8.2 测试结果对比
| 测试项 | 热池 | 冷池 |
|---|---|---|
| rados 写带宽 (MB/s) | 2300 | 450 |
| random 4k 读 IOPS | 180k | 25k |
| 平均延迟 (ms) | 1.8 | 12.4 |
上述结果显示热池(NVMe)在小文件 IO 与并发读写场景中优势明显,而冷池(HDD)适合大容量吞吐但延迟较高的场景。
九、常见问题与解决
| 问题 | 可能原因 | 解决方法 |
|---|---|---|
| OSD 状态 Down | 网络故障 | 检查网络与防火墙 |
| CRUSH 副本不平衡 | 权重设置不当 | 调整 CRUSH weight |
| CephFS 挂载失败 | MDS 不足 | 增加 MDS 实例 |
十、总结
通过A5IDC的教程步骤,你可以在 Manjaro Linux 上搭建一个高效、可扩展的 Ceph 存储集群,并根据不同数据访问模式进行性能调优。实际生产部署中还应结合业务访问特征不断调整 CRUSH 策略、缓存层设计和网络拓扑。
如需进一步扩展:
- 使用 erasure coding 优化存储效率
- 与 Kubernetes 集成 Rook 或 Ceph CSI
- 混合 SSD/HDD 层级存储策略