如何在 Manjaro Linux 上实现高效的 Ceph 存储集群,提升大规模文件存储的冗余性与性能?

本文覆盖从硬件选型到网络架构、软件安装、配置实践、性能调优、评测数据及常见故障处理的完整流程,并提供详细代码示例与测试表格,旨在帮助读者在实际生产环境部署一个稳定、高效的 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 前置设置

  1. 启用多用户目标及必要模块:
bash 复制代码
sudo pacman -Syu
sudo pacman -S base-devel git
  1. 确保系统时间同步:
bash 复制代码
sudo pacman -S chrony
sudo systemctl enable --now chronyd
  1. 关闭 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 benchfio 做基准测试。

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 层级存储策略
相关推荐
打码人的日常分享12 分钟前
NLP和AI大模型应用方案
运维·人工智能·安全·系统安全·制造
爱讲故事的16 分钟前
操作系统第四讲:OS Interfaces and Syscalls(操作系统接口与系统调用)
linux·windows·ubuntu
「QT(C++)开发工程师」23 分钟前
免费在线 Ubuntu/Linux 运行环境
linux·运维·ubuntu
hhhh明28 分钟前
ubuntu22.04 桌面可视化(vncserver+novnc 方式)
linux·运维·服务器
Fcy64828 分钟前
Linux下 进程间通信详解(一)管道、进程池与简单的Linux 进程间聊天室
linux·服务器·管道·进程间通信·进程池
‎ദ്ദിᵔ.˛.ᵔ₎29 分钟前
Linux 权限
linux
拳里剑气29 分钟前
Linux:权限
linux·学习方法
十六年开源服务商31 分钟前
2026网站主题编辑实战指南
运维
ole ' ola37 分钟前
Linux DDR内存使用情况
linux·运维·服务器
CingSyuan38 分钟前
华为/长江计算 国产信创服务器:基于 BMC 远程 KVM 安装操作系统
运维·服务器·kylin