如何在 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 层级存储策略
相关推荐
lihui_cbdd1 天前
AMBER 24 生产环境部署完全指南(5090可用)
linux·计算化学
绾樘1 天前
RHCE--基于Nginx的Web服务器配置
运维·服务器·nginx
生活很暖很治愈1 天前
Linux基础开发工具
linux·服务器·git·vim
打工的小王1 天前
docker(三)具体项目的部署
运维·docker·容器
似霰1 天前
Linux Shell 脚本编程——核心基础语法
linux·shell
一叶星殇1 天前
.NET WebAPI:用 Nginx 还是 IIS 更好
运维·nginx·.net
LUCIFER1 天前
[驱动进阶——MIPI摄像头驱动(五)]rk3588+OV13855摄像头驱动加载过程详细解析第四部分——ISP驱动
linux·驱动开发
暮云星影1 天前
四、linux系统 应用开发:UI开发环境配置概述 (一)
linux·ui·arm
a程序小傲1 天前
得物Java面试被问:RocketMQ的消息轨迹追踪实现
java·linux·spring·面试·职场和发展·rocketmq·java-rocketmq
Ghost Face...1 天前
i386 CPU页式存储管理深度解析
java·linux·服务器