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 节点不采用)
相关推荐
呉師傅15 分钟前
联想ideapad 310-15ABR拔掉充电器使用电池工作花屏问题的解决方法【维修个例】
运维·服务器·网络·智能手机·电脑
农民小飞侠22 分钟前
SandboxFusion搭建教程
linux·ubuntu
晚风吹红霞1 小时前
Vim编辑器从入门到熟练 —— 三种模式与常用命令详解
linux·编辑器·vim
代码熬夜敲Q1 小时前
Nginx相关
运维·服务器·nginx
phltxy1 小时前
HAProxy安装与RabbitMQ负载均衡配置
分布式·rabbitmq·负载均衡
古月方枘Fry1 小时前
OSPF 企业级多区域网络
运维·服务器·网络
gwjcloud1 小时前
Kubernetes从入门到精通(devops)06
运维·devops
shandianchengzi1 小时前
【记录】Claude Code|Ubuntu26给Claude Code新增任务消息提示音
运维·服务器·ubuntu·ai·大模型·音频·claude
蚰蜒螟1 小时前
从mkdir命令到磁盘:Linux内核目录创建过程深度解析
linux·运维·数据库
念何架构之路1 小时前
接入层Nginx
运维·nginx