如何在 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 层级存储策略
相关推荐
xuhe23 分钟前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
Lsir10110_20 分钟前
【Linux】进程信号(下半)
linux·运维·服务器
skywalk816336 分钟前
unbound dns解析出现问题,寻求解决之道
运维·服务器·dns·unbound
酉鬼女又兒38 分钟前
零基础入门Linux指南:每天一个Linux命令_pwd
linux·运维·服务器
云飞云共享云桌面40 分钟前
高性能图形工作站的资源如何共享给10个SolidWorks研发设计用
linux·运维·服务器·前端·网络·数据库·人工智能
skywalk816341 分钟前
走近科学:unbound dns域名服务器自己本地解析出现问题,寻求解决之道
运维·服务器·dns·unbound
zl_dfq41 分钟前
Linux 之 【多线程】(pthread_xxx、轻量级进程、原生线程库、线程ID、__thread、线程栈、线程与信号、线程与程序替换)
linux
choke23342 分钟前
Python 基础语法精讲:数据类型、运算符与输入输出
java·linux·服务器
袁煦丞 cpolar内网穿透实验室1 小时前
远程调试内网 Kafka 不再求运维!cpolar 内网穿透实验室第 791 个成功挑战
运维·分布式·kafka·远程工作·内网穿透·cpolar
AZ996ZA1 小时前
自学linux的第二十一天【DHCP 服务从入门到实战】
linux·运维·服务器·php