Ceph 笔记
本文最后更新于0 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

Ceph 集群部署与存储池、块设备基础

一、核心概念

1. Ceph 三种存储类型

类型底层接口访问方式适用场景
RBD(块存储)librbd块设备(类磁盘)云盘、数据库盘、虚拟机
CephFS(文件系统)libradosPOSIX 文件系统共享文件系统、NFS 替代
RGW(对象存储)libradosS3/Swift HTTP API云存储、备份归档

底层都是 RADOS 集群,三者都是对 RADOS 的不同抽象。

2. Ceph 核心组件

组件进程名作用高可用
MON(监视器)ceph-mon维护集群元数据映射(OSD/PG/CRUSH 等)≥3 台
OSD(对象存储)ceph-osd真正存储数据,处理副本/恢复/心跳≥3 个
MGR(管理器)ceph-mgr跟踪运行时指标,提供 RestAPI 和 WebUI≥2 台
MDS(元数据服务器)ceph-mdsCephFS 元数据管理(非块/对象存储用)可选

3. BlueStore 存储引擎

  • Luminous(v12.2) 起默认使用 BlueStore 替代 FileStore
  • 优势:避免两次写入,小型随机写性能更好,接近满盘时无性能陡降,内置 RocksDB 管理元数据

4. CRUSH 算法(三次映射)

File → Object(切片/分块,固定 4MB) → PG(Hash 到归置组) → OSD(CRUSH 计算)
  • 去中心化:客户端直接计算存储位置,无需查元数据表
  • 故障域隔离:可配置 Host/Rack/Room 等层级,避免单点故障
  • 高性能:O(1) 复杂度直接算出位置

二、关键命令

1. cephadm 快速部署

# 下载 cephadm(推荐 20.2.x 稳定版)
curl --silent --remote-name --location https://download.ceph.com/rpm-20.2.1/el9/noarch/cephadm
mv cephadm-* /usr/local/bin/cephadm && chmod +x /usr/local/bin/cephadm

# 初始化集群(第一个 mon 节点上执行)
cephadm bootstrap --mon-ip <IP> --cluster-network <CIDR> --allow-fqdn-hostname --skip-pull

# 安装 ceph-common(所有节点)
cephadm add-repo --release tentacle
apt update && apt -y install ceph-common

# 添加主机
ceph orch host add <hostname> <IP>
ssh-copy-id -f -i /etc/ceph/ceph.pub <hostname>

# 添加 OSD
ceph orch daemon add osd <hostname>:/dev/<device>

# 查看集群状态
ceph -s

2. 存储池管理

# 创建副本池
ceph osd pool create <pool> <pg_num> <pgp_num> --size <replicas>

# 创建纠删码池
ceph osd pool create <pool> <pg_num> <pgp_num> erasure

# 基础操作
ceph osd pool ls
ceph osd pool ls detail
ceph osd pool rename <old> <new>
ceph osd pool get <pool> pg_num
ceph osd pool set <pool> pg_num <n>
ceph osd pool set <pool> size <n>

# 配额
ceph osd pool set-quota <pool> max_objects <num>
ceph osd pool set-quota <pool> max_bytes <bytes>

# 删除池(需开启允许删除)
ceph tell mon.* injectargs --mon-allow-pool-delete=true
ceph osd pool delete <pool> <pool> --yes-i-really-really-mean-it

# RADOS 对象操作
rados df
rados ls -p <pool>
rados put <obj> <file> -p <pool>
rados get <obj> <file> -p <pool>

3. RBD 块设备管理

# 创建块设备
rbd create -s <size> <pool>/<image>
rbd ls -p <pool>
rbd ls -p <pool> -l
rbd info <pool>/<image>

# 扩容/缩容
rbd resize -s <size> <pool>/<image>
rbd resize -s <size> <pool>/<image> --allow-shrink

# 客户端映射
rbd map <pool>/<image>
rbd showmapped
mkfs.ext4 /dev/rbd0 && mount /dev/rbd0 /mnt
umount /mnt && rbd unmap /dev/rbd0

# 启用 RBD 应用
rbd pool init <pool>
ceph osd pool application enable <pool> rbd

三、面试常考点

  1. Ceph 有哪些组件?各自作用? → MON/OSD/MGR/MDS 各司其职
  2. CRUSH 算法原理和优势? → 三次映射、去中心化、无单点、O(1) 高性能
  3. BlueStore vs FileStore? → BlueStore 避免两次写入,接近满盘无性能陡降
  4. RBD/CephFS/RGW 的区别? → 块/文件/对象三种存储类型,底层都基于 RADOS
  5. cephadm 部署流程? → bootstrap → add host → add osd

RBD 进阶、用户认证、CephFS

一、核心概念

1. RBD 快照与克隆

概念说明
快照(Snap)某一时刻的数据只读副本
克隆(Clone)基于快照的写时复制(COW)子镜像,性能更快
保护(Protect)快照保护后无法删除,才能被克隆
Flatten解除父子镜像关联,使子镜像独立

克隆比回滚快:克隆直接指向快照数据,无需拷贝。

2. RBD 特性(Features)

特性作用
layering分层克隆机制
exclusive-lock排他锁,多客户端禁止同时写入
object-map对象位图,加速导入导出和容量统计
fast-diff快速快照对比
deep-flatten深度解除父子镜像依赖
journaling日志机制,支持异地备份

3. Ceph 用户认证体系

  • 用户格式TYPEID.USERID,如 client.adminosd.0mon.ceph141
  • TYPEID 类型:client / osd / mon / mds / rgw / mgr
  • Cephx 协议:双向认证,无需明文密码传输
  • Keyring 路径/etc/ceph/ceph.client.<user>.keyring
权限含义
r
w
x执行(调用方法 + auth 命令)
*rwx
profile osdOSD 身份权限
profile mdsMDS 身份权限

4. CephFS 架构

  • MDS(元数据服务器):只管理元数据索引,不存储真实数据
  • cephfs_metadata 池:存储元数据
  • cephfs_data 池:存储实际文件数据
  • 适用场景:多客户端共享读写(RBD 单客户端独占)

二、关键命令

1. RBD 快照管理

# 创建/查看快照
rbd snap create <pool>/<image>@<snapname>
rbd snap ls <pool>/<image>

# 回滚快照
rbd snap rollback <pool>/<image>@<snapname>

# 快照保护/取消保护
rbd snap protect <pool>/<image>@<snapname>
rbd snap unprotect <pool>/<image>@<snapname>

# 克隆快照
rbd clone <pool>/<image>@<snapname> <pool>/<new_image>

# 查看子镜像
rbd children <pool>/<image>@<snapname>

# Flatten(解除父子关联)
rbd flatten <pool>/<new_image>

# 快照限制
rbd snap limit set <pool>/<image> --limit <num>
rbd snap limit clear <pool>/<image>

# 批量删除
rbd snap purge <pool>/<image>

2. RBD 回收站

rbd trash move <pool>/<image>
rbd trash ls -p <pool>
rbd trash restore -p <pool> --image <name> --image-id <id>

3. Ceph 用户管理

# 查看用户
ceph auth list
ceph auth get <user>

# 创建用户
ceph auth add <user> mon 'allow r' osd 'allow rwx pool=<pool>'
ceph auth get-or-create <user> mon 'allow r' osd 'allow rwx'

# 获取 Key
ceph auth print-key <user>

# 修改权限
ceph auth caps <user> mon 'allow rx' osd 'allow r pool=<pool>'

# 删除/导出导入
ceph auth del <user>
ceph auth get <user> -o <file>
ceph auth import -i <file>

4. CephFS 部署

# 创建池
ceph osd pool create cephfs_data <pg> <pgp>
ceph osd pool create cephfs_metadata <pg> <pgp>

# 创建文件系统
ceph fs new <fs_name> cephfs_metadata cephfs_data

# 部署 MDS
ceph orch apply mds <fs_name>

# 状态查看
ceph fs ls
ceph mds stat
ceph fs status <fs_name>

# 客户端挂载
mount -t ceph <mon_ip>:6789,/ <mountpoint> -o name=<user>,secret=<key>
ceph-fuse -n client.<user> -m <mon_ip>:6789 /<mountpoint>

三、面试常考点

  1. 快照克隆 vs 回滚? → 克隆快(指向数据),回滚慢(需拷贝数据)
  2. RBD 能多节点同时挂载吗? → 不行,同一时间只能单客户端独占(有 exclusive-lock 特性限制)
  3. 快照保护的作用? → 防止误删,保护后才能克隆
  4. CephFS 的 MDS 作用? → 管理元数据索引,不存真实数据
  5. Cephx 认证原理? → 双向对称密钥认证,无需明文传输

RGW 对象存储、集群维护、监控、CRUSH 自定义

一、核心概念

1. RGW 对象存储网关

项目说明
RGWRados Gateway,基于 librados,提供 S3/Swift HTTP 接口
底层引擎自 Firefly(0.80) 起默认 Civetweb(无需 Apache)
默认端口Reef(18.x) 用 80,Nautilus(14.x) 用 7480
用户体系S3(user/bucket/object),Swift(account/subuser/container/object)
存储桶命名唯一,3~63 字符,小写字母/数字/. / -,不可为 IP

部署后自动创建的 4 个池

.rgw.root        → 全局元数据(桶/用户)
default.rgw.log  → 日志池
default.rgw.control → 控制消息池
default.rgw.meta  → 元数据池

2. OSD 四种状态

组合状态含义
up + in正常运行中且在集群内
down + in进程故障进程挂了但还在集群
up + out手动驱逐已迁出但进程未停
down + out完全离线进程停且已不在集群

3. PG(归置组)状态

状态含义
active+clean正常,所有副本就位
inactivePG 等待 OSD 同步
degraded降级,副本数未达标
unclean副本数不足,应在恢复中
stale主副本长时间未汇报

PG 总数公式PG总数 ≤ OSD数 × 100 / 副本数,建议上限 6666(实际 2^13=8192)

4. CRUSH Map 结构

devices     → 定义所有 OSD 设备
buckets    → 逻辑拓扑(host/root/自定义层级)
rules      → 数据分布规则(选哪个 root、选几个副本、故障域类型)

二、关键命令

1. RGW 部署与使用

# 部署 RGW
ceph orch apply rgw <service_id>
ceph orch daemon add rgw <svc> <host>

# 创建 S3 账号
radosgw-admin user create --uid '<user>' --display-name '<name>'
# 返回 access_key + secret_key 即为 S3 凭证

# 创建 Swift 子用户
radosgw-admin subuser create --uid=<user> --subuser=<user>:swift --access=full

2. s3cmd 使用

# 安装
apt -y install s3cmd

# 交互式配置
s3cmd --configure
# 依次填:Access Key → Secret Key → rgw地址 → rgw地址/%%(bucket) → 回车跳过加密 → 回车跳过GPG → N(不用HTTPS) → 回车

# 基础操作
s3cmd mb s3://<bucket>/
s3cmd ls
s3cmd ls s3://<bucket>/
s3cmd put <file> s3://<bucket>/
s3cmd get s3://<bucket>/<obj> /tmp/
s3cmd del s3://<bucket>/<obj>
s3cmd rb s3://<bucket>/ -r

3. Bucket 匿名访问策略

# 编写策略(允许公开下载)
cat > policy.json <<'POLICYEOF'
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {"AWS": ["*"]},
    "Action": "s3:GetObject",
    "Resource": ["arn:aws:s3:::<bucket-name>/*"]
  }]
}
POLICYEOF

s3cmd setpolicy policy.json s3://<bucket>/
s3cmd delpolicy s3://<bucket>/

4. Swift API

pip install python-swiftclient==4.6.0

swift -A http://<rgw-ip>/auth -U <user>:swift -K <key> list
swift -A http://<rgw-ip>/auth -U <user>:swift -K <key> post <容器>
swift -A http://<rgw-ip>/auth -U <user>:swift -K <key> upload <容器> /etc/hosts

5. OSD 维护

# 查看
ceph osd tree
ceph osd df
ceph osd ls
ceph osd stat

# 下线(完整五步)
ceph osd out <osd-id>
ceph -s
ceph orch daemon stop osd.<osd-id>
ceph osd tree | grep <osd-id>

# 重新上线
ceph osd in <osd-id>
ceph orch daemon start osd.<osd-id>

# 暂停/恢复写入
ceph osd pause
ceph osd unpause

6. PG 管理

ceph pg stat
ceph pg ls-by-pool <pool> | awk '{print $1,$2,$16}'
ceph pg <pgid> query
ceph pg dump_stuck
ceph osd map <pool> <obj>

7. 自定义 CRUSH 规则(五步)

# ① 获取 CRUSH Map
ceph osd getcrushmap -o crushmap.bin

# ② 编译为可读文件
crushtool -d crushmap.bin -o crushmap.txt

# ③ 编辑 crushmap.txt
#    新增 bucket:
#      host ceph143-node1 { id -3 alg straw2 hash 0 item osd.0 weight 0.293 }
#    新增 root:
#      root oldboyedu { id -11 alg straw2 hash 0 item ceph143-node1 weight 0.293 }
#    新增规则:
#      rule linux102 { id 102 type replicated step take oldboyedu step chooseleaf firstn 0 type host step emit }

# ④ 编译回二进制
crushtool -c crushmap.txt -o new_crushmap.bin

# ⑤ 注入集群
ceph osd setcrushmap -i new_crushmap.bin

# ⑥ 创建池指定规则
ceph osd pool create <pool-name> <pg> <pgp> replicated <规则名>

8. 集群监控(cephadm 自带组件)

组件端口作用
Prometheus9095时序数据库,采集 Ceph 指标
Grafana3000可视化仪表盘
node-exporter9100服务器硬件指标
Alertmanager9093告警处理
Ceph-dashboard8443Web 管理界面
# 守护进程管理
ceph orch ps
ceph orch ls
ceph orch host ls
ceph orch daemon restart <daemon>
ceph orch daemon stop/start <daemon>

# mgr 模块
ceph mgr module ls
ceph mgr module enable/disable <module>

三、面试常考点

  1. RGW 自动创建哪些池? → .rgw.root / default.rgw.log / default.rgw.control / default.rgw.meta
  2. OSD 四种状态? → up/down/in/out 及其组合场景
  3. PG 正常状态是什么? → active+clean;异常有 inactive/degraded/unclean/stale
  4. PG 总数公式? → OSD × 100 / 副本数,上限 6666
  5. CRUSH 算法优势? → 去中心化、无单点、O(1) 高性能、故障域隔离
  6. 自定义 CRUSH 规则流程? → getcrushmap → crushtool -d → 修改 txt → crushtool -c → setcrushmap → 创建池指定规则
  7. cephadm 自带哪些监控? → Prometheus/Grafana/Alertmanager/node-exporter/ceph-exporter
  8. Bucket Policy 匿名下载? → s3cmd setpolicy,核心权限 s3:GetObject

附录:高频命令速查

命令用途
ceph -s集群总览
ceph osd treeOSD 树(高频)
ceph osd dfOSD 使用率(高频)
ceph orch ps所有守护进程(高频)
ceph pg statPG 状态(高频)
ceph pg ls-by-pool <pool> | awk ...PG→OSD 映射(高频)
ceph osd map <pool> <obj>对象存储位置(高频)
ceph osd getcrushmap / setcrushmap获取/注入 CRUSH Map
ceph orch apply rgw <svc>部署 RGW
radosgw-admin user create创建 S3 用户
s3cmd mb/ls/put/get/delS3 基础操作
s3cmd setpolicy <file> s3://<bucket>/Bucket 策略
rbd snap create <pool>/<img>@<snap>创建快照
rbd snap protect / rbd clone快照保护与克隆
ceph auth add <user> mon 'allow r' osd 'allow rwx'创建认证用户
ceph fs new <fs> <meta_pool> <data_pool>创建 CephFS
cephadm bootstrap --mon-ip <IP>初始化集群
ceph orch daemon add osd <host>:/dev/<dev>添加 OSD
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇