强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

Ceph 存储运维完全指南 / 04 - 存储池管理

04 - 存储池管理

4.1 存储池(Pool)概述

存储池是 Ceph 中数据管理的逻辑单元,每个池有独立的 PG 数量、副本策略和 CRUSH 规则。

池类型

类型说明适用场景
replicated(副本)每个对象保存 N 份副本默认方式,小规模/高性能场景
erasure(纠删码)数据分片 + 校验分片大容量存储、对象存储、冷数据

池操作命令

# 创建副本池
ceph osd pool create mypool 128 128 replicated

# 创建 EC 池
ceph osd erasure-code-profile set myprofile k=4 m=2 crush-failure-domain=host
ceph osd pool create ecpool 128 128 erasure myprofile

# 查看所有池
ceph osd pool ls
ceph osd pool ls detail

# 重命名池
ceph osd pool rename mypool mypool-new

# 删除池(危险操作!)
ceph osd pool delete mypool mypool --yes-i-really-really-mean-it

# 设置池配额
ceph osd pool set-quota mypool max_objects 1000000
ceph osd pool set-quota mypool max_bytes 10G

4.2 PG 数量规划

PG 数量是影响 Ceph 性能和数据分布均匀性的关键参数。

PG 计算公式

推荐 PG 总数 = (OSD 总数 × 100) / 副本数
每个池的 PG 数 = OSD 总数 × 100 / 副本数 / 池数量(向上取最近的 2 的幂)

PG 参考表

OSD 数量副本数=3 时推荐 PG 数EC 4+2 时推荐 PG 数
3128128
6256128
10512256
20512256
501024512
10020481024
20040962048

注意事项

  • PG 数量应为 2 的幂(128、256、512…)
  • 单个 OSD 上的 PG 数不应超过 200
  • 启用 pg_autoscaler 可自动调整 PG 数量

PG 自动伸缩

# 启用 PG 自动伸缩模块
ceph mgr module enable pg_autoscaler

# 设置池的自动伸缩模式
ceph osd pool set mypool pg_autoscale_mode on    # 自动调整(推荐)
ceph osd pool set mypool pg_autoscale_mode warn   # 仅警告
ceph osd pool set mypool pg_autoscale_mode off    # 关闭

# 查看 PG 伸缩建议
ceph osd pool autoscale-status

输出示例:

POOL       SIZE  TARGET SIZE  RATE  RAW CAPACITY   RATIO  TARGET RATIO  PG_NUM  NEW PG_NUM  AUTOSCALE
mypool     100G         -     3.0      3000G       0.10       -           128        -         on
ecpool     200G         -     1.5      3000G       0.10       -           256        -         on
.rgw.root    1K         -     3.0      3000G       0.00       -            32        -         on

4.3 副本池(Replicated Pool)

副本数管理

# 查看当前副本数
ceph osd pool get mypool size
# output: size: 3

# 修改副本数(影响所有已存在和新建的对象)
ceph osd pool set mypool size 2       # 设置 2 副本
ceph osd pool set mypool size 3       # 恢复 3 副本

# 设置最小副本数(低于此值拒绝写入)
ceph osd pool set mypool min_size 2

# 查看最小副本数
ceph osd pool get mypool min_size

副本策略对比

副本数可靠性存储效率写入延迟适用场景
250%非关键数据、开发环境
333%生产环境默认
4极高25%极高可靠性要求

4.4 纠删码池(Erasure Code Pool)

纠删码原理

纠删码将数据分成 k 个数据块和 m 个校验块,可容忍最多 m 个块丢失。

原始数据 (1MB)
    ↓
┌─────┬─────┬─────┬─────┬─────┬─────┐
│ D1  │ D2  │ D3  │ D4  │ P1  │ P2  │  ← k=4, m=2 (EC 4+2)
│数据 │数据 │数据 │数据 │校验 │校验 │
└─────┴─────┴─────┴─────┴─────┴─────┘
  OSD0  OSD1  OSD2  OSD3  OSD4  OSD5

存储效率: k/(k+m) = 4/6 = 67%(vs 副本 33%)
可容忍: 最多丢失任意 2 个块

创建 EC 池

# 创建 EC 配置文件
ceph osd erasure-code-profile set ec-k4m2 \
    k=4 \
    m=2 \
    crush-failure-domain=host \
    crush-device-class=hdd \
    plugin=jerasure \
    technique=reed_sol_van

# 查看 EC 配置
ceph osd erasure-code-profile get ec-k4m2

# 创建 EC 池
ceph osd pool create ecpool 256 256 erasure ec-k4m2

# EC 池覆盖写支持(Ceph 13.0+)
# 需要创建全局 EC 覆盖写配置
ceph osd pool set ecpool allow_ec_overwrites true

EC 配置文件参数

参数说明默认值
k数据块数2
m校验块数1
crush-failure-domain故障域host
crush-device-class设备类型- (任意)
plugin编码插件jerasure
technique编码技术reed_sol_van
stripe_unit条带大小4096

常用 EC 配置方案

方案k+m存储效率可靠性最少 OSD 数
EC 2+1367%容忍 1 故障3
EC 4+2667%容忍 2 故障6
EC 8+31173%容忍 3 故障11
EC 8+41267%容忍 4 故障12

业务场景

  • EC 4+2:适合对象存储、备份数据,存储效率和可靠性平衡
  • EC 8+4:适合 PB 级归档存储,最大化存储效率
  • 副本池适合 RBD 块存储、数据库等需要低延迟的场景

4.5 CRUSH 规则(Rule)

CRUSH 规则定义了数据如何放置到 OSD 上。

# 查看现有规则
ceph osd crush rule ls

# 查看规则详情
ceph osd crush rule dump

# 创建自定义规则
# 例:SSD 专用规则
ceph osd crush rule create-replicated ssd_rule default host firstn class ssd

# 例:指定 root 的规则
ceph osd crush rule create-replicated rack_rule rack1 rack firstn

# 将规则应用到池
ceph osd pool set mypool crush_rule ssd_rule

规则结构示例

rule replicated_ssd {
    id 1
    type replicated
    step take default class ssd    # 从 SSD 设备类中选择
    step chooseleaf firstn 0 type host  # 在不同 host 上选择
    step emit
}

4.6 池配额管理

# 设置最大对象数
ceph osd pool set-quota mypool max_objects 10000000

# 设置最大字节数
ceph osd pool set-quota mypool max_bytes 1T

# 查看配额
ceph osd pool get-quota mypool

# 移除配额
ceph osd pool set-quota mypool max_objects 0
ceph osd pool set-quota mypool max_bytes 0

4.7 池属性调优

# 查看所有池属性
ceph osd pool get mypool all

# === 关键属性 ===

# PG 自动伸缩
ceph osd pool set mypool pg_autoscale_mode on

# 调整 scrub 频率(降低对性能的影响)
ceph osd pool set mypool scrub_min_interval 604800      # 7 天
ceph osd pool set mypool scrub_max_interval 2592000     # 30 天
ceph osd pool set mypool deep_scrub_interval 2419200    # 28 天

# 快照配置
ceph osd pool set mypool snapshot_autocreate false
ceph osd pool set mypool snapshot_trim_interval 300

# 应用标签(用于识别池用途)
ceph osd pool set mypool description "RBD pool for OpenStack Nova"

4.8 池管理最佳实践

生产环境池规划示例

# 创建 OpenStack 专用池
ceph osd pool create volumes 256 256 replicated     # Cinder 卷
ceph osd pool create images 128 128 replicated       # Glance 镜像
ceph osd pool create backups 128 128 replicated      # Cinder 备份
ceph osd pool create vms 256 256 replicated          # Nova 虚拟机

# 创建 Kubernetes 专用池
ceph osd pool create k8s-rbd 256 256 replicated

# 创建 RGW 专用 EC 池
ceph osd erasure-code-profile set rgw-ec k=4 m=2 crush-failure-domain=host
ceph osd pool create rgw-data 256 256 erasure rgw-ec

# 设置最小副本数
for pool in volumes images backups vms k8s-rbd; do
    ceph osd pool set $pool min_size 2
done

# 启用 PG 自动伸缩
for pool in volumes images backups vms k8s-rbd rgw-data; do
    ceph osd pool set $pool pg_autoscale_mode on
done

注意事项

事项说明
PG 数量不可减少只能增加,不能减少(除非删除池重建)
EC 池不支持快照创建需要额外配置覆盖写支持
修改副本数会触发数据迁移生产环境谨慎操作
删除池不可恢复务必确认后再操作
池名不能重复每个池名称全局唯一

扩展阅读

  1. 存储池配置参考
  2. PG 数量规划
  3. 纠删码详解
  4. PG 计算器

下一章05 - 块存储 RBD — 学习 RBD 镜像管理、快照、克隆以及与 QEMU/Kubernetes 的集成。