Ceph 分布式存储完整实践指南

Ceph 分布式存储完整实践指南

一、Ceph 核心概述

1. 什么是 Ceph

Ceph 是一款开源、分布式、软件定义存储系统,旨在提供高可用性、无限扩展性和统一存储服务(对象、块、文件系统存储)。其核心设计理念是 "一切皆对象",所有数据最终以对象形式存储在底层 RADOS(Reliable Autonomic Distributed Object Store)系统中,摆脱传统存储的单点依赖。

核心特性:

  • 架构去中心化,无网关或元数据服务器瓶颈
  • 支持 x86/ARM 混合架构部署,兼容通用服务器硬件
  • 自动数据平衡与故障恢复,无需人工干预
  • 存储容量可从 TB 级扩展至 EB 级,性能随节点增加线性增长
  • 支持数据强一致性,确保多副本数据同步可靠
  • 与 Linux 内核、OpenStack、Kubernetes、CloudStack 等生态深度集成

2. 核心用户角色与应用场景

2.1 用户角色细分
角色 核心职责 适用场景
存储管理员 集群规划、安装配置、性能优化、灾难恢复方案设计、自动化集成、用户培训 企业级生产环境、大型云平台
存储操作员 日常监控(Dashboard/CLI)、警报响应、故障设备更换、日志分析 运维团队一线操作岗
应用开发人员 基于 librados/RBD/CephFS 开发应用,集成存储功能 云原生应用、大数据平台开发
云操作员 管理 OpenStack/OpenShift 等云平台与 Ceph 的集成 混合云 / 私有云环境
基础架构架构师 设计 Ceph 集群拓扑、资源规划、性能评估 集群建设初期规划阶段
数据中心操作员 底层硬件维护、存储资源供给 大型数据中心运维
2.2 典型应用场景
  • 高性能计算(HPC):支撑大规模并行数据处理
  • 虚拟化 / 云平台:为虚拟机、容器提供持久化存储(如 OpenStack Cinder、K8s PV)
  • 内容存储与分发:图片、视频、日志等非结构化数据存储
  • 大数据与人工智能:海量训练数据存储与访问
  • 备份与灾难恢复:跨集群数据复制、异地容灾
  • 智慧城市:物联网设备产生的海量时序数据存储

3. 版本演进与生命周期

3.1 版本命名与编号规则
  • 版本格式:x.y.z(x = 发行周期,y = 发行类型,z = 发行号)
    • x.0.z:开发版
    • x.1.z:候选版
    • x.2.z:稳定版 /bugfix 版
  • 历史版本:从 Dumpling(0.67.x)开始支持 LTS,最新稳定版为 Squid(19.2.X)
  • 发布周期:2017 年前每年 2 个稳定版,Nautilus(14.2.0)后每年 3 月发布 1 个 LTS 版本,支持周期 2 年
3.2 主流 LTS 版本生命周期
版本代号 版本号 发布日期 退役日期 核心改进
Reef 18.2.X 2023-08-07 2025-08-01 优化性能监控、增强多站点复制
Quincy 17.2.X 2022-04-19 2024-06-01 提升 RBD 镜像性能、改进 CephFS 稳定性
Pacific 16.2.X 2021-03-31 2023-06-01 引入 CephFS Mirror、增强 RGW 多租户支持
Nautilus 14.2.X 2019-03-01 2021-06-01 统一存储池管理、优化 OSD 性能

二、Ceph 架构深度解析

1. 核心组件详解

1.1 底层存储:RADOS

RADOS 是 Ceph 的核心存储引擎,由 OSD、MON、MGR 组成,提供:

  • 分布式对象存储:所有数据以对象形式存储,每个对象包含数据、元数据和唯一标识符
  • 自我修复:检测 OSD 故障,自动复制数据到健康 OSD
  • 自我管理:自动数据平衡、负载均衡
  • 无单点故障:多副本存储,MON 集群仲裁机制
1.2 核心守护进程
组件 核心功能 部署要求 关键配置
监视器(MON) 维护集群映射(Cluster Map),包括 MON/OSD/MDS 状态、配置信息;通过 Paxos 算法达成集群状态共识 奇数个节点(推荐 3/5 个),确保仲裁 监听端口 6789(v1)、3300(v2);数据目录 /var/lib/ceph/fsi**d /mon.host
对象存储设备(OSD) 存储数据对象,处理数据复制、恢复、再平衡;通过 CRUSH 算法定位数据 每个物理磁盘对应 1 个 OSD 守护进程;推荐配置 SSD 作为 OSD 日志 端口范围 6800-7300;支持 XFS 文件系统;日志建议独立 SSD 部署
管理器(MGR) 收集集群指标(CPU / 内存 / IO 等),提供 Web Dashboard 和 REST API;支持第三方监控集成(Zabbix/Prometheus) 至少部署 2 个,跨故障域部署 默认端口 8443(Dashboard);需启用相关模块(dashboard、prometheus)
元数据服务器(MDS) 仅为 CephFS 提供元数据服务(文件权限、目录结构、时间戳等),加速 POSIX 命令执行 至少 1 个活跃节点 + 1 个备用节点 内存建议 4G+;元数据存储在 RADOS 池中
1.3 集群映射(Cluster Map)

集群映射是 Ceph 集群的 "拓扑地图",由 MON 维护,包含 5 类核心映射:

  • 监视器映射(Monitor Map):集群 FSID、MON 节点地址与端口
  • OSD 映射(OSD Map):OSD 列表、状态、池配置、副本数
  • 放置组映射(PG Map):PG 状态、数据分布统计
  • CRUSH 映射(CRUSH Map):存储设备层次结构、数据放置规则
  • 元数据服务器映射(MDS Map):MDS 节点列表、状态

2. 数据存储原理

2.1 数据映射流程
  1. 客户端将数据封装为对象(包含对象 ID、数据、元数据)
  2. 通过公式 PG = hash(对象 ID) % PG 数量 计算对象所属的放置组(PG)
  3. CRUSH 算法根据 CRUSH Map 将 PG 映射到多个 OSD(主 OSD + 从 OSD)
  4. 客户端直接与主 OSD 通信,完成数据读写
2.2 数据读写流程
  • 读取流程:客户端 → MON 获取集群映射 → 计算 PG 与主 OSD → 主 OSD 返回数据
  • 写入流程:客户端 → MON 获取集群映射 → 计算 PG 与主 OSD → 主 OSD 写入数据并同步到从 OSD → 所有 OSD 确认后,主 OSD 向客户端返回成功
2.3 数据保护机制
  • 复本池(Replicated Pool):默认 3 副本,数据复制到多个 OSD,故障时从副本恢复,读写性能好,存储开销高(3 副本开销 3 倍)
  • 纠删码池(Erasure Code Pool):将数据分割为 k 个数据块 + m 个编码块,支持 k 个块故障时恢复,存储开销低(如 4+2 配置开销 1.5 倍),适合冷数据存储

3. 访问接口详解

3.1 原生 API:librados
  • 支持 C/C++、Java、Python、Ruby 等多语言
  • 直接操作 RADOS 对象,性能最优
  • 适用于需要深度定制存储逻辑的场景
3.2 块存储:RBD(RADOS Block Device)
  • 提供虚拟块设备,支持快照、克隆、镜像功能
  • 支持 QEMU/KVM 直接挂载,集成 OpenStack Cinder、Kubernetes PV
  • 核心特性:写时复制(COW)、读时复制(COR)、缓存优化(RBD Cache)
3.3 对象存储:RADOS Gateway(RGW)
  • 兼容 Amazon S3 和 OpenStack Swift API
  • 提供 RESTful 接口,支持 HTTP/HTTPS 访问
  • 支持多租户、配额管理、数据加密、多站点复制
3.4 文件系统:CephFS
  • 兼容 POSIX 标准,支持目录树结构、权限控制
  • 适用于需要共享文件系统的场景(如大数据分析、容器共享存储)
  • 依赖 MDS 服务管理元数据,支持快照、配额、ACL

三、Ceph 集群部署实战

1. 部署环境准备

1.1 硬件要求(生产环境)
组件 配置要求 备注
服务器 2U 机架式服务器 支持 12-24 块 SATA/SAS 硬盘 + 2-4 块 SSD
CPU 8 核 16 线程以上 推荐 Intel Xeon 或 AMD EPYC 系列
内存 每 OSD 4-8G 例如 12 个 OSD 节点建议 64G 内存
存储 数据盘:SATA/SAS 硬盘(4TB/8TB);缓存盘:SSD(400GB+) OSD 日志建议单独 SSD 部署
网络 10Gbps 以太网 推荐双网卡绑定,分离 Public 网络和 Cluster 网络
1.2 系统环境配置
bash 复制代码
# 1. 操作系统:CentOS Stream 8(最小化安装)
# 2. 关闭 SELinux
sed -ri 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

# 3. 关闭防火墙
systemctl disable firewalld --now

# 4. 配置 YUM 源(阿里云 Ceph 源)
cat > /etc/yum.repos.d/ceph.repo << 'EOF'
[Ceph]
name=Ceph
baseurl=https://mirrors.aliyun.com/centos-vault/8-stream/storage/x86_64/ceph-pacific
enabled=1
gpgcheck=0
EOF

# 5. 安装基础依赖
dnf install -y bash-completion vim lrzsz unzip rsync sshpass tar chrony

# 6. 时间同步
systemctl enable chronyd --now
chronyc sources

# 7. 配置主机名解析(所有节点)
cat >> /etc/hosts << EOF
192.168.108.11 ceph1.laogao.cloud ceph1
192.168.108.12 ceph2.laogao.cloud ceph2
192.168.108.13 ceph3.laogao.cloud ceph3
192.168.108.14 ceph4.laogao.cloud ceph4
192.168.108.15 ceph5.laogao.cloud ceph5
192.168.108.16 ceph6.laogao.cloud ceph6
192.168.108.10 client.laogao.cloud client
EOF

# 8. 配置免密登录(引导节点到其他节点)
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
for node in ceph2 ceph3 ceph4 ceph5 ceph6; do
  ssh-copy-id -o StrictHostKeyChecking=no root@$node
done

2. 部署方式详解(Cephadm)

2.1 安装 Cephadm
bash 复制代码
# 安装 cephadm(自动安装 podman 容器引擎)
dnf install -y cephadm

# 验证安装
cephadm --version
podman --version

# 提前拉取 Ceph 镜像(可选,加速部署)
podman pull quay.io/ceph/ceph:v16
podman pull quay.io/ceph/ceph-grafana:8.3.5
podman pull quay.io/prometheus/node-exporter:v1.3.1
2.2 引导集群
bash 复制代码
cephadm bootstrap \
  --mon-ip 192.168.108.11 \  # 引导节点 MON IP
  --allow-fqdn-hostname \    # 允许使用长主机名
  --initial-dashboard-user admin \  # Dashboard 管理员账户
  --initial-dashboard-password laogao@123 \  # Dashboard 密码
  --dashboard-password-noupdate  # 不自动更新密码

引导成功后输出关键信息:

2.3 扩展集群节点
bash 复制代码
# 1. 获取集群公钥
ceph cephadm get-pub-key > ~/ceph.pub

# 2. 推送公钥到新增节点(以 ceph2 为例)
ssh-copy-id -f -i ~/ceph.pub root@ceph2.laogao.cloud

# 3. 添加节点到集群
ceph orch host add ceph2.laogao.cloud
ceph orch host add ceph3.laogao.cloud
ceph orch host add ceph4.laogao.cloud

# 4. 查看节点状态
ceph orch host ls
2.4 部署核心服务
bash 复制代码
# 1. 部署 MON 服务(指定 _admin 标签节点)
ceph orch host label add ceph2.laogao.cloud _admin
ceph orch host label add ceph3.laogao.cloud _admin
ceph orch apply mon --placement="label:_admin"

# 2. 部署 MGR 服务(与 MON 同节点)
ceph orch apply mgr --placement="label:_admin"

# 3. 部署 OSD 服务(使用所有可用磁盘)
ceph orch apply osd --all-available-devices

# 4. 部署监控组件(Prometheus/Grafana)
ceph orch apply prometheus --placement="count:1"
ceph orch apply grafana --placement="count:1"
ceph orch apply alertmanager --placement="count:1"

# 5. 查看服务状态
ceph orch ls
ceph status
访问 dashboard



3. 集群验证与初始化

bash 复制代码
# 1. 查看集群健康状态
ceph health  # 正常状态为 HEALTH_OK

# 2. 查看 OSD 状态
ceph osd tree

# 3. 查看 MON 仲裁状态
ceph mon stat
ceph quorum_status -f json-pretty

# 4. 查看 Dashboard 状态
ceph mgr module enable dashboard
ceph dashboard status

# 5. 创建默认存储池(可选)
ceph osd pool create default_pool 128 128 replicated

集群中运行的主要组件:

mgr,ceph 管理程序

monitor,ceph 监视器

osd,ceph 对象存储进程

rgw,ceph 对象存储网关

4. 其他部署方式对比

部署方式 适用场景 优势 劣势
Cephadm 生产环境、独立集群 容器化部署、简化运维、支持 Dashboard 仅支持 Octopus+ 版本
Rook Kubernetes 环境 与 K8s 深度集成、支持动态扩缩容 依赖 K8s 生态
ceph-ansible 复杂定制化部署 高度灵活、支持批量配置 配置复杂、学习成本高
手动部署 测试 / 研究环境 完全可控、适合学习 运维复杂、易出错

四、核心功能操作指南

1. 集群配置管理

1.1 配置源优先级

Ceph 配置生效顺序(从高到低):

  1. 命令行参数
  2. 运行时覆盖(ceph tell/daemon 命令)
  3. 本地配置文件(/etc/ceph/ceph.conf)
  4. 集中配置数据库(MON 管理)
  5. 编译默认值
1.2 配置文件管理
bash 复制代码
# 配置文件路径(默认):/etc/ceph/ceph.conf
# 配置格式(INI 格式)
cat /etc/ceph/ceph.conf
[global]
fsid = 2faf683a-7cbf-11f0-b5ba-000c29e0ad0e
mon_host = 192.168.108.11,192.168.108.12,192.168.108.13

[mon]
public_network = 192.168.108.0/24

[osd]
osd_pool_default_size = 3
1.3 集中配置数据库操作
bash 复制代码
# 查看所有配置项
ceph config ls

# 禁用mon服务自动扩展
[root@ceph1 ~]# ceph orch apply mon --unmanaged=true
# 启用 mon 服务自动扩展
[root@ceph1 ~]# ceph orch apply mon --unmanaged=false

# 查看服务中实例
[root@ceph1 ~]# ceph orch ps | grep crash

# 删除特定实例
[root@ceph1 ~]# ceph orch daemon rm crash.ceph1
Removed crash.ceph1 from host 'ceph1.laogao.cloud

# 删除crach服务(得先禁用服务和删除特定实例)
[root@ceph1 ~]# ceph orch rm crash
Removed service crash

# 查看特定配置项帮助
ceph config help public_network

# 查看当前配置
ceph config dump

# 设置全局配置
ceph config set global osd_pool_default_size 3

# 设置特定组件配置(如 MON)
ceph config set mon mon_allow_pool_delete true

# 运行时临时配置(重启失效)
ceph tell osd.* config set osd_memory_target 4294967296
删除主机

从集群中删除主机流程:

  1. 禁用集群所有服务自动扩展
  2. 查看待删除主机上当前运行的服务
  3. 停止待删除主机上的所有服务
  4. 删除主机上的所有服务
  5. 删除osd在CRUSH中的映射
  6. 擦除osd盘中的数据
  7. 从集群中删除主机
bash 复制代码
示例:删除 ceph2
首先,禁用集群中所有ceph服务自动扩展,进制自动部署osd。
[root@ceph1 ~]# for service in $(ceph orch ls |grep -v -e NAME -e osd| awk
'{print $1}');do ceph orch apply $service --unmanaged=true;done
[root@ceph1 ~]# ceph orch apply osd --all-available-devices --unmanaged=true
其次,删除主机上运行的服务。
# 查看ceph2上运行的daemon
[root@ceph1 ~]# ceph orch ps |grep ceph2 |awk '{print $1}'
crash.ceph2
mgr.ceph2.oetbal
mon.ceph2
node-exporter.ceph2
osd.2
osd.4
osd.7
# 删除相应 daemon
[root@ceph1 ~]# for daemon in $(ceph orch ps |grep ceph2 |awk '{print $1}');do
ceph orch daemon rm $daemon --force;done
# 手动清理crush信息
[root@ceph1 ~]# ceph osd crush rm osd.2
[root@ceph1 ~]# ceph osd crush rm osd.4
[root@ceph1 ~]# ceph osd crush rm osd.7
[root@ceph1 ~]# ceph osd crush rm ceph2
[root@ceph1 ~]# ceph osd rm 2 4 7
# 清理磁盘数据
[root@ceph1 ~]# ceph orch device zap ceph2.laogao.cloud /dev/sdb --force
[root@ceph1 ~]# ceph orch device zap ceph2.laogao.cloud /dev/sdc --force
[root@ceph1 ~]# ceph orch device zap ceph2.laogao.cloud /dev/sdd --force
然后,删除主机。
[root@ceph1 ~]# ceph orch host rm ceph2
[root@ceph1 ~]# ceph orch host ls #查看现象ceph2被移除
HOST ADDR LABELS STATUS
ceph1.laogao.cloud 192.168.108.11 _admin
ceph3.laogao.cloud 192.168.108.13 _admin
2 hosts in cluster
最后,删除ceph2中相应ceph遗留文件。
[root@ceph2 ~]# rm -rf /var/lib/ceph
[root@ceph2 ~]# rm -rf /etc/ceph /etc/systemd/system/ceph*
[root@ceph2 ~]# rm -rf /var/log/ceph

2. 存储池(Pool)管理

2.1 池创建与删除
bash 复制代码
# 1. 创建复本池
ceph osd pool create <池名> <pg_num> <pgp_num> [replicated] [crush-rule-name]
# 示例:创建名为 rbd_pool 的复本池,PG 数 256
ceph osd pool create rbd_pool 256 256 replicated

# 2. 创建纠删码池
ceph osd pool create <池名> <pg_num> <pgp_num> erasure [erasure-code-profile]
# 示例:创建名为 ec_pool 的纠删码池,使用 default 配置文件
ceph osd pool create ec_pool 128 128 erasure default

# 3. 查看池列表
ceph osd pool ls
ceph osd pool ls detail

# 4. 删除池(需先开启删除权限)
ceph config set mon mon_allow_pool_delete true
ceph osd pool rm <池名> <池名> --yes-i-really-really-mean-it
2.2 池配置调整
bash 复制代码
# 1. 修改复本数
ceph osd pool set <池名> size <副本数>
ceph osd pool set rbd_pool size 3

# 2. 修改 PG 数(需与 PGP 数一致)
ceph osd pool set <池名> pg_num <新 PG 数>
ceph osd pool set <池名> pgp_num <新 PG 数>
ceph osd pool set rbd_pool pg_num 512
ceph osd pool set rbd_pool pgp_num 512

# 3. 设置配额(最大对象数/最大容量)
ceph osd pool set-quota <池名> max_objects <数量>
ceph osd pool set-quota <池名> max_bytes <容量>  # 单位:字节(10G=10737418240)

# 4. 查看配额
ceph osd pool get-quota <池名>

# 5. 启用/禁用池自动扩展 PG
ceph osd pool set <池名> pg_autoscale_mode on/off/warn
2.3 纠删码配置文件管理
bash 复制代码
# 1. 查看现有纠删码配置文件
ceph osd erasure-code-profile ls

# 2. 查看配置文件详情
ceph osd erasure-code-profile get default

# 3. 创建自定义纠删码配置文件(k=4 数据块,m=2 编码块)
ceph osd erasure-code-profile set my_ec_profile k=4 m=2 plugin=jerasure technique=reed_sol_van

# 4. 删除纠删码配置文件
ceph osd erasure-code-profile rm my_ec_profile

3. 块存储(RBD)深度操作

3.1 RBD 镜像管理
bash 复制代码
# 1. 初始化 RBD 池
rbd pool init <池名>
rbd pool init rbd_pool

# 2. 创建 RBD 镜像(100G 大小)
rbd create <池名>/<镜像名> --size <大小> [--order <阶数>]
rbd create rbd_pool/webapp_disk --size 100G --order 22  # order=22 对应 4MB 对象大小

# 3. 查看镜像列表
rbd ls <池名>
rbd ls rbd_pool

# 4. 查看镜像详情
rbd info <池名>/<镜像名>
rbd info rbd_pool/webapp_disk

# 5. 调整镜像大小(扩展/缩减)
rbd resize <池名>/<镜像名> --size <新大小>  # 扩展
rbd resize <池名>/<镜像名> --size <新大小> --allow-shrink  # 缩减(需先卸载文件系统)

# 6. 删除镜像(需先删除快照)
rbd rm <池名>/<镜像名>
3.2 快照与克隆
bash 复制代码
# 1. 创建快照
rbd snap create <池名>/<镜像名>@<快照名>
rbd snap create rbd_pool/webapp_disk@snap_20250801

# 2. 查看快照列表
rbd snap ls <池名>/<镜像名>

# 3. 保护快照(防止删除,克隆前必须保护)
rbd snap protect <池名>/<镜像名>@<快照名>

# 4. 克隆快照(基于快照创建可写镜像)
rbd clone <池名>/<镜像名>@<快照名> <目标池名>/<目标镜像名>
rbd clone rbd_pool/webapp_disk@snap_20250801 rbd_pool/webapp_disk_clone

# 5. 扁平化克隆(脱离父快照独立)
rbd flatten <目标池名>/<目标镜像名>

# 6. 删除快照(需先解除保护)
rbd snap unprotect <池名>/<镜像名>@<快照名>
rbd snap rm <池名>/<镜像名>@<快照名>

# 7. 删除所有快照
rbd snap purge <池名>/<镜像名>
3.3 镜像映射与挂载
bash 复制代码
# 1. 映射 RBD 镜像到本地
rbd map <池名>/<镜像名>
rbd map rbd_pool/webapp_disk

# 2. 查看映射状态
rbd showmapped
lsblk | grep rbd

# 3. 格式化镜像(XFS 文件系统)
mkfs.xfs /dev/rbd0

# 4. 挂载镜像
mkdir -p /mnt/webapp
mount /dev/rbd0 /mnt/webapp

# 5. 永久挂载(/etc/fstab)
echo "/dev/rbd/<池名>/<镜像名> /mnt/webapp xfs _netdev 0 0" >> /etc/fstab
mount -a

# 6. 卸载与解除映射
umount /mnt/webapp
rbd unmap /dev/rbd0
3.4 RBD 缓存优化
bash 复制代码
# 1. 查看缓存配置
ceph config get client rbd_cache
ceph config get client rbd_cache_policy

# 2. 设置缓存模式(writethrough/writeback/writearound)
ceph config set client rbd_cache_policy writethrough

# 3. 调整缓存大小(默认 32MB)
ceph config set client rbd_cache_size 67108864  # 64MB

# 4. 调整最大脏缓存(默认 24MB)
ceph config set client rbd_cache_max_dirty 41943040  # 40MB

4. 对象存储(RGW)实战

4.1 RGW 部署与配置
bash 复制代码
# 1. 创建 RGW 域、区域组、区域
radosgw-admin realm create --rgw-realm=myrealm --default
radosgw-admin zonegroup create --rgw-realm=myrealm --rgw-zonegroup=myzonegroup --master --default
radosgw-admin zone create --rgw-realm=myrealm --rgw-zonegroup=myzonegroup --rgw-zone=myzone --master --default
radosgw-admin period update --rgw-realm=myrealm --commit

# 2. 部署 RGW 服务(3 个实例)
ceph orch apply rgw myrgw --placement="3 ceph1 ceph2 ceph3" --realm=myrealm --zone=myzone --port=8080

# 3. 验证 RGW 服务
ceph orch ls rgw
curl http://ceph1.laogao.cloud:8080  # 应返回 XML 格式的桶列表
4.2 RGW 用户管理
bash 复制代码
# 1. 创建 S3 风格用户
radosgw-admin user create \
  --uid="s3user" \
  --display-name="S3 User" \
  --email="s3user@example.com" \
  --access-key="AKIAEXAMPLE" \
  --secret-key="secretkeyexample"

# 2. 查看用户信息
radosgw-admin user info --uid=s3user

# 3. 生成/修改密钥
radosgw-admin key create --uid=s3user --gen-access-key
radosgw-admin key rm --uid=s3user --access-key="旧 AK"

# 4. 临时禁用/启用用户
radosgw-admin user suspend --uid=s3user
radosgw-admin user enable --uid=s3user

# 5. 删除用户(--purge-data 同时删除用户数据)
radosgw-admin user rm --uid=s3user --purge-data
4.3 S3 客户端操作(AWS CLI)
bash 复制代码
# 1. 安装 AWS CLI
pip3 install awscli

# 2. 配置用户凭据
aws configure
# 输入 Access Key、Secret Key、区域(默认空)、输出格式(默认空)

# 3. 创建 S3 桶
aws --endpoint=http://ceph1.laogao.cloud:8080 s3 mb s3://mybucket

# 4. 上传文件到桶
aws --endpoint=http://ceph1.laogao.cloud:8080 s3 cp /etc/hosts s3://mybucket/

# 5. 查看桶内文件
aws --endpoint=http://ceph1.laogao.cloud:8080 s3 ls s3://mybucket

# 6. 下载文件
aws --endpoint=http://ceph1.laogao.cloud:8080 s3 cp s3://mybucket/hosts /tmp/

# 7. 设置文件访问权限(公开可读)
aws --endpoint=http://ceph1.laogao.cloud:8080 s3api put-object-acl --bucket mybucket --key hosts --acl public-read

# 8. 删除文件/桶
aws --endpoint=http://ceph1.laogao.cloud:8080 s3 rm s3://mybucket/hosts
aws --endpoint=http://ceph1.laogao.cloud:8080 s3 rb s3://mybucket  # 桶必须为空
4.4 配额管理

bash

运行

bash 复制代码
# 1. 用户级配额(最大对象数 1000)
radosgw-admin quota enable --quota-scope=user --uid=s3user
radosgw-admin quota set --quota-scope=user --uid=s3user --max-objects=1000

# 2. 桶级配额(最大容量 10G)
radosgw-admin quota enable --quota-scope=bucket --bucket=mybucket
radosgw-admin quota set --quota-scope=bucket --bucket=mybucket --max-size=10G

# 3. 查看配额使用情况
radosgw-admin user stats --uid=s3user
radosgw-admin bucket stats --bucket=mybucket
4.5 多站点复制(主从模式)
bash 复制代码
# 前提:两个 Ceph 集群(主集群 A,从集群 B)

# 1. 主集群创建同步用户
radosgw-admin user create --uid=syncuser --display-name="Sync User" --system --access-key="syncAK" --secret-key="syncSK"

# 2. 主集群配置区域端点
radosgw-admin zone modify --rgw-zone=myzone --endpoints="http://ceph1:8080,http://ceph2:8080" --access-key="syncAK" --secret-key="syncSK"

# 3. 从集群拉取主集群配置
radosgw-admin realm pull --url=http://ceph1:8080 --access-key="syncAK" --secret-key="syncSK"
radosgw-admin period pull --url=http://ceph1:8080 --access-key="syncAK" --secret-key="syncSK"

# 4. 从集群创建区域
radosgw-admin zone create --rgw-zonegroup=myzonegroup --rgw-zone=myzone_slave --endpoints="http://ceph4:8080" --access-key="syncAK" --secret-key="syncSK"

# 5. 从集群部署 RGW 服务
ceph orch apply rgw myrgw_slave --placement="3 ceph4 ceph5 ceph6" --realm=myrealm --zone=myzone_slave --port=8080

# 6. 验证同步状态
radosgw-admin sync status

5. 文件系统(CephFS)操作

5.1 CephFS 部署(手动方式)
bash 复制代码
# 1. 创建元数据池和数据池
ceph osd pool create cephfs_meta 128 128 replicated
ceph osd pool create cephfs_data 512 512 replicated

# 2. 设置元数据池副本数(推荐 3)
ceph osd pool set cephfs_meta size 3

# 3. 创建 CephFS 文件系统
ceph fs new mycephfs cephfs_meta cephfs_data

# 4. 部署 MDS 服务(3 个节点,1 活跃 + 2 备用)
ceph orch apply mds mycephfs --placement="3 ceph1 ceph2 ceph3"

# 5. 查看 CephFS 状态
ceph fs ls
ceph fs status mycephfs
ceph mds stat
5.2 CephFS 挂载(Kernel 方式)
bash 复制代码
# 1. 创建挂载点
mkdir -p /mnt/cephfs

# 2. 挂载(使用 admin 用户)
mount.ceph ceph1:6789,ceph2:6789,ceph3:6789:/ /mnt/cephfs -o name=admin,fs=mycephfs

# 3. 验证挂载
df -h /mnt/cephfs
touch /mnt/cephfs/testfile

# 4. 永久挂载(/etc/fstab)
echo "ceph1:6789,ceph2:6789,ceph3:6789:/ /mnt/cephfs ceph name=admin,fs=mycephfs,_netdev 0 0" >> /etc/fstab
mount -a
5.3 CephFS 挂载(FUSE 方式)
bash 复制代码
# 1. 安装 ceph-fuse
dnf install -y ceph-fuse

# 2. 挂载(指定用户和文件系统)
ceph-fuse -n client.admin -m ceph1:6789,ceph2:6789,ceph3:6789 /mnt/cephfs_fuse --client_fs=mycephfs

# 3. 挂载特定子目录
ceph-fuse -n client.admin -m ceph1:6789 -r /data /mnt/cephfs_data --client_fs=mycephfs

# 4. 卸载
umount /mnt/cephfs_fuse
5.4 快照与配额管理
bash 复制代码
# 1. 启用/禁用快照功能
ceph fs set mycephfs allow_new_snaps true/false

# 2. 创建快照(通过 .snap 隐藏目录)
mkdir /mnt/cephfs/.snap/snap_20250801

# 3. 访问快照文件
ls /mnt/cephfs/.snap/snap_20250801
cp /mnt/cephfs/.snap/snap_20250801/testfile /tmp/

# 4. 删除快照
rmdir /mnt/cephfs/.snap/snap_20250801

# 5. 设置目录配额(最大 100G,最大文件数 10000)
setfattr -n ceph.quota.max_bytes -v 107374182400 /mnt/cephfs/data
setfattr -n ceph.quota.max_files -v 10000 /mnt/cephfs/data

# 6. 查看配额
getfattr -n ceph.quota.max_bytes /mnt/cephfs/data
getfattr -n ceph.quota.max_files /mnt/cephfs/data
5.5 CephFS Mirror(跨集群复制)
bash 复制代码
# 前提:主集群(A)和从集群(B)均部署 CephFS

# 1. 主集群部署 mirror 守护进程
ceph orch apply cephfs-mirror --placement="ceph1"

# 2. 从集群创建同步用户
ceph fs authorize mycephfs client.cephfs-mirror / rwps

# 3. 从集群生成引导令牌
radosgw-admin fs snapshot mirror peer_bootstrap create mycephfs client.cephfs-mirror slave_site

# 4. 主集群导入令牌
ceph fs snapshot mirror peer_bootstrap import mycephfs <令牌字符串>

# 5. 主集群添加同步目录
ceph fs snapshot mirror add mycephfs /data

# 6. 查看同步状态
ceph fs snapshot mirror peer_list mycephfs
ceph fs snapshot mirror status mycephfs

6. 认证与授权管理

6.1 Cephx 认证机制

Ceph 默认启用 Cephx 协议,通过共享密钥进行身份验证,涉及三类密钥环:

  • 集群密钥环:/etc/ceph/ceph.client.admin.keyring(管理员密钥)
  • 守护进程密钥环:/var/lib/ceph/fsi**d/daemon_type.$host/keyring
  • 用户密钥环:/etc/ceph/ceph.client.<用户名>.keyring
6.2 用户管理命令
bash 复制代码
# 1. 创建用户(指定权限)
ceph auth add client.<用户名> \
  mon 'allow r' \  # 允许读取 MON 信息
  osd 'allow rw pool=<池名>' \  # 允许读写指定池
  mds 'allow rw path=/<目录>'  # 允许读写 CephFS 目录

# 示例:创建只读用户
ceph auth add client.reader mon 'allow r' osd 'allow r pool=rbd_pool'

# 2. 查看用户列表
ceph auth ls

# 3. 查看用户详情
ceph auth get client.<用户名>

# 4. 导出用户密钥环
ceph auth get client.<用户名> -o /etc/ceph/ceph.client.<用户名>.keyring

# 5. 导入用户密钥环
ceph auth import -i /etc/ceph/ceph.client.<用户名>.keyring

# 6. 修改用户权限
ceph auth caps client.<用户名> \
  mon 'allow r' \
  osd 'allow rw pool=rbd_pool, allow r pool=ec_pool'

# 7. 删除用户
ceph auth rm client.<用户名>
6.3 客户端认证配置
bash 复制代码
# 1. 复制密钥环到客户端
scp /etc/ceph/ceph.client.reader.keyring root@client:/etc/ceph/

# 2. 复制配置文件到客户端
scp /etc/ceph/ceph.conf root@client:/etc/ceph/

# 3. 客户端测试访问
ceph --id reader osd pool ls
rbd --id reader ls rbd_pool

五、集群运维与监控

1. 日常运维命令

bash 复制代码
# 1. 集群状态查看
ceph status  # 简写 ceph -s
ceph health detail  # 详细健康信息
ceph df  # 存储容量统计

# 2. 组件状态查看
ceph osd stat  # OSD 状态摘要
ceph mon stat  # MON 状态摘要
ceph mgr stat  # MGR 状态摘要
ceph mds stat  # MDS 状态摘要

# 3. 服务管理
ceph orch daemon start <服务名>  # 启动服务
ceph orch daemon stop <服务名>   # 停止服务
ceph orch daemon restart <服务名>  # 重启服务
ceph orch daemon rm <服务名>  # 删除服务

# 4. OSD 管理
ceph osd in <osd-id>  # 激活 OSD
ceph osd out <osd-id>  # 下线 OSD
ceph osd crush rm <osd-id>  # 从 CRUSH 地图移除 OSD
ceph osd rm <osd-id>  # 删除 OSD
ceph orch device zap <节点名> <磁盘名> --force  # 清理磁盘

# 5. 日志查看
ceph orch logs <服务名>  # 查看服务日志
ceph log last 100  # 查看最近 100 条集群日志

2. 监控与告警

2.1 Dashboard 监控
  • 访问地址:https://<MON 节点 IP>:8443
  • 核心监控面板:
    • Cluster Status:集群健康状态、组件状态
    • Capacity:存储容量使用情况
    • Performance:IOPS、吞吐量、延迟
    • Hosts:节点资源使用情况
    • OSDs:OSD 状态、性能指标
2.2 Prometheus + Grafana 监控
  • Grafana 访问地址:http://<Grafana 节点 IP>:3000(默认账户 admin/admin)
  • 导入 Ceph 官方仪表盘(ID:917)
  • 核心监控指标:
    • 集群健康状态(ceph_cluster_health_status)
    • OSD 状态(ceph_osd_up、ceph_osd_in)
    • 存储容量(ceph_cluster_total_bytes、ceph_cluster_used_bytes)
    • IO 性能(ceph_osd_op_perf_latency_ms、ceph_osd_op_perf_throughput_bytes)
2.3 告警配置
bash 复制代码
# 1. 启用 Prometheus 告警模块
ceph mgr module enable prometheus

# 2. 配置告警规则(Grafana 中设置)
# 示例告警规则:
# - OSD 下线超过 5 分钟
# - 集群使用率超过 85%
# - PG 处于 degraded 状态超过 10 分钟

# 3. 配置邮件告警(修改 Prometheus Alertmanager 配置)
vim /etc/ceph/alertmanager.yml

3. 集群扩容与缩容

3.1 节点扩容
bash 复制代码
# 1. 新增节点环境准备(参考前文系统配置)
# 2. 推送公钥到新增节点
ssh-copy-id -i ~/ceph.pub root@new-node

# 3. 添加节点到集群
ceph orch host add new-node.laogao.cloud

# 4. 部署服务到新增节点(如 OSD)
ceph orch apply osd --all-available-devices
3.2 节点缩容
bash 复制代码
# 1. 下线节点上的 OSD
for osd_id in $(ceph osd tree | grep new-node | awk '{print $1}'); do
  ceph osd out $osd_id
  ceph orch daemon rm osd.$osd_id --force
done

# 2. 移除节点上的其他服务(MON/MGR/MDS)
ceph orch daemon rm mon.new-node --force
ceph orch daemon rm mgr.new-node --force

# 3. 从集群移除节点
ceph orch host rm new-node.laogao.cloud

# 4. 清理节点残留文件
ssh root@new-node "rm -rf /var/lib/ceph /etc/ceph /var/log/ceph"

4. 数据备份与恢复

4.1 备份策略
  • 定期创建 RBD 快照:适合块存储数据
  • 定期导出 RBD 镜像:rbd export <池名>/<镜像名> /备份路径/镜像名.img
  • CephFS 快照:适合文件系统数据
  • 跨集群复制:RGW 多站点复制、CephFS Mirror
4.2 恢复示例(RBD 镜像)
bash 复制代码
# 1. 导入备份的 RBD 镜像
rbd import /备份路径/镜像名.img <池名>/<镜像名>

# 2. 基于快照恢复
rbd snap rollback <池名>/<镜像名>@<快照名>

# 3. 克隆快照恢复数据
rbd clone <池名>/<镜像名>@<快照名> <池名>/<恢复镜像名>
rbd map <池名>/<恢复镜像名>
mount /dev/rbd0 /mnt/restore

六、常见问题排查

1. 集群健康状态异常

1.1 HEALTH_WARN 排查
bash 复制代码
# 查看详细告警信息
ceph health detail

# 常见告警处理
# 1. PG 未激活(PG_NOT_ACTIVE)
ceph pg repair <pg-id>  # 修复 PG
ceph osd tree  # 检查 OSD 状态

# 2. 存储容量不足(LOW_SPACE)
ceph df  # 查看容量使用
# 解决方案:扩容 OSD、清理无用数据、调整池配额

# 3. MON 仲裁警告(MON_QUORUM_WARN)
ceph mon stat  # 检查 MON 状态
# 解决方案:确保奇数个 MON 运行,添加/修复 MON 节点
1.2 HEALTH_ERR 排查
bash 复制代码
# 1. OSD 故障(OSD_DOWN)
ceph osd tree  # 确认故障 OSD
ceph osd out <osd-id>  # 下线故障 OSD
# 解决方案:更换故障磁盘,重新部署 OSD

# 2. PG 不一致(PG_INCONSISTENT)
ceph pg scrub <pg-id>  #  scrub PG
ceph pg repair <pg-id>  # 修复 PG

# 3. CRUSH 地图错误(CRUSH_INCOMPATIBLE)
ceph osd crush dump  # 查看 CRUSH 地图
ceph osd crush reweight-all  # 重新平衡 CRUSH 权重

2. 访问故障排查

2.1 客户端无法连接集群
bash 复制代码
# 1. 检查网络连通性(MON 端口 6789/3300)
telnet ceph1 6789
nc -zv ceph1 3300

# 2. 检查密钥环权限
ls -l /etc/ceph/ceph.client.*.keyring  # 确保权限为 600

# 3. 检查配置文件
cat /etc/ceph/ceph.conf  # 确认 mon_host 配置正确

# 4. 测试认证
ceph --id <用户名> health  # 验证用户权限
2.2 RBD 镜像无法映射
bash 复制代码
# 1. 检查镜像状态
rbd info <池名>/<镜像名>

# 2. 检查内核模块
lsmod | grep rbd  # 确保 rbd 模块加载
modprobe rbd  # 加载模块

# 3. 检查权限
ceph auth get client.<用户名>  # 确保有 rbd 访问权限

# 4. 查看日志
dmesg | grep rbd  # 查看内核日志

3. 性能问题排查

3.1 存储性能低下
bash 复制代码
# 1. 查看 IO 性能指标
ceph osd perf  # OSD IO 性能
rbd perf image <池名>/<镜像名>  # RBD 镜像性能

# 2. 检查网络带宽
iftop -i <网卡名>  # 监控网络流量
ceph osd netstat  # OSD 网络统计

# 3. 检查磁盘 IO
iostat -x 1  # 磁盘 IO 统计
iotop  # 进程 IO 监控

# 4. 优化建议
# - 确保网络带宽充足(推荐 10Gbps)
# - OSD 日志使用 SSD
# - 调整 PG 数,避免单个 OSD 负载过高
# - 优化 CRUSH 规则,避免数据集中在少数节点

七、总结与扩展

1. 核心优势与适用场景

  • 优势:高可用、无限扩展、统一存储、开源免费、生态完善
  • 适用场景:云平台存储、大数据存储、备份归档、高性能计算、内容分发

3. CRUSH 地图错误(CRUSH_INCOMPATIBLE)

ceph osd crush dump # 查看 CRUSH 地图

ceph osd crush reweight-all # 重新平衡 CRUSH 权重

复制代码
### 2. 访问故障排查

#### 2.1 客户端无法连接集群

```bash
# 1. 检查网络连通性(MON 端口 6789/3300)
telnet ceph1 6789
nc -zv ceph1 3300

# 2. 检查密钥环权限
ls -l /etc/ceph/ceph.client.*.keyring  # 确保权限为 600

# 3. 检查配置文件
cat /etc/ceph/ceph.conf  # 确认 mon_host 配置正确

# 4. 测试认证
ceph --id <用户名> health  # 验证用户权限
2.2 RBD 镜像无法映射
bash 复制代码
# 1. 检查镜像状态
rbd info <池名>/<镜像名>

# 2. 检查内核模块
lsmod | grep rbd  # 确保 rbd 模块加载
modprobe rbd  # 加载模块

# 3. 检查权限
ceph auth get client.<用户名>  # 确保有 rbd 访问权限

# 4. 查看日志
dmesg | grep rbd  # 查看内核日志

3. 性能问题排查

3.1 存储性能低下
bash 复制代码
# 1. 查看 IO 性能指标
ceph osd perf  # OSD IO 性能
rbd perf image <池名>/<镜像名>  # RBD 镜像性能

# 2. 检查网络带宽
iftop -i <网卡名>  # 监控网络流量
ceph osd netstat  # OSD 网络统计

# 3. 检查磁盘 IO
iostat -x 1  # 磁盘 IO 统计
iotop  # 进程 IO 监控

# 4. 优化建议
# - 确保网络带宽充足(推荐 10Gbps)
# - OSD 日志使用 SSD
# - 调整 PG 数,避免单个 OSD 负载过高
# - 优化 CRUSH 规则,避免数据集中在少数节点

七、总结与扩展

1. 核心优势与适用场景

  • 优势:高可用、无限扩展、统一存储、开源免费、生态完善
  • 适用场景:云平台存储、大数据存储、备份归档、高性能计算、内容分发
  • 不适用场景:对延迟要求极高的核心业务(如金融交易)、小规模存储(建议 < 10 节点不采用)
相关推荐
优质网络系统领域创作者2 小时前
IS-IS和OSPF路由协议对比以及两个协议双点双向引入
运维·网络
yours_Gabriel2 小时前
【kafka】基本概念
分布式·中间件·kafka
我爱学习好爱好爱2 小时前
Prometheus监控栈 监控Linux操作系统
linux·grafana·prometheus
sleetdream2 小时前
联想开天统信UOS安装镜像 增加系统分区空间
linux
ArrebolJiuZhou2 小时前
arm指令集(一)
linux·运维·arm开发
一只旭宝2 小时前
Linux专题三:目录结构即相关操作指令,gdb调试,进程基础,以及makefile工具
linux
Azure DevOps2 小时前
Azure DevOps Server 正式版本发布
运维·microsoft·azure·devops
lbb 小魔仙2 小时前
Steam Deck OLED 拆解与评测:Valve 对 Linux 掌机的又一次精进
linux·运维·服务器
一枚正在学习的小白2 小时前
prometheus监控redis
linux·运维·服务器·redis·prometheus