pool是ceph存储对象的逻辑分区
- Pool 是逻辑容器:将物理存储资源划分为多个隔离的逻辑存储单元
- 数据隔离层:不同应用/租户使用不同 Pool(如:虚拟机磁盘、文件系统、备份数据)
- 策略定义层:每个 Pool 可独立配置存储策略
Ceph客户端访问pool的流程
**1.**从ceph配置文件中读取cluster name与ceph mon地址,来连接到集群
**2.**使用cluster map来获取被检索到的pool列表与属性,决定在哪里存放对象
3.创建一个特定pool的输入/输出上下文,Ceph集群使用CRUSH算法将这些pool映射到PG,然后将其映射到特定的OSD。
副本池创建
副本池/纠删码池
1 2 3 4 5 6
| 查看数据分布策略 ceph osd pool get <pool-name> crush_rule replicated_rule/ec_rule
副本池 (Replicated Pool):默认策略,数据复制多份(通常 3 副本) 纠删码池 (Erasure Coded Pool):类似 RAID5/6,节省空间但计算开销大
|
pool的相关参数
参数 |
作用 |
设置命令 |
size |
副本数量,默认3 |
ceph osd pool set size 3 |
pg_num |
Placement Group 数量 |
ceph osd pool set pg_num 128 |
pgp_num |
用于归置的 PG 数量,一般与pg一致 |
ceph osd pool set pgp_num 128 |
compression |
压缩算法 |
ceph osd pool set compression zstd |
allow_ec_overwrites |
允许纠删码池覆盖写入 |
ceph osd pool set ec_pool allow_ec_overwrites true |
pool副本池的常用操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| 创建 Pool
ceph osd pool create <pool-name> <pg-num> <pgp-num> [replicated] [<crush-rule>]
管理 Pool
ceph osd lspools
ceph osd pool stats <pool-name>
ceph osd pool rename <old-name> <new-name>
ceph osd pool set mypool size 3
ceph osd pool set mypool min_size 2
ceph osd pool set mypool nodelete true
ceph ods pool set <pool-name> pg_num 128
ceph osd pool set mypool nopgchange true
ceph osd pool set mypool nosizechange true
ceph osd pool set-quota <pool-name> max_objects 1000000 ceph osd pool set-quota <pool-name> max_bytes 1T
ceph osd pool set mypool cache_target_dirty_ratio 0.4 ceph osd pool set mypool cache_target_full_ratio 0.8
删除 Pool
ceph config set mon mon_allow_pool_delete true ceph osd pool delete <pool-name> <pool-name> --yes-i-really-really-mean-it
快照管理
ceph osd pool mksnap <pool-name> <snap-name>
rados -p <pool-name> rollback <obj-name> <snap-name>
|
纠错码池配置与创建
仅做记录,纠错码池的利用率比副本池的高,但生产中基本不使用,了解即可,而且它的机制还比副本池复杂
1.每个对象数据被分割成k个数据chunks
2.计算生成m个coding chunks
3.coding chunk大小等于data chunk size大小
4.对象被存储在k+m个OSD中。
Red Hat支持以下k+m值:
4+2(1:1.5)
8+3(1:1.375)
8+4(1:1.5)
erasure code开销的计算公式为nOSD * k / (k+m) OSD Size
例如,如果你有64个4 TB的osd(总共256 TB), k=8, m=4,那么公式为64 * 8/(8+4)* 4 = 170.67。然后用原始存储容量除以开销就得到了这个比率。256TB/170.67TB = 1.5。
纠错码池配置文件
erasure code配置文件配置了纠错码池对于存储对象的数据块和编码快的数量,以及使用的擦除编码插件和算法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| 纠错码池的创建命令格式 ceph osd erasure-code-profile set <profile-name> \ [<directory=directory>] \ [<plugin=plugin>] \ [<crush-device-class>] \ [<crush-failure-domain>] \ [<key=value>...] \ [--force]
查看默认配置 ceph osd erasure-code-profile get default k=2 m=2 plugin=jerasure technique=reed_sol_van
常用参数 plugin:指定纠删码插件,默认为jerasure(其他可选:isa, lrc, shec等)。 k:数据块的数量。 m:编码块(校验块)的数量。 crush-device-class:指定设备类别(如hdd、ssd),将数据分布到特定类型的设备上。 crush-failure-domain:设置故障域(如host, osd, rack等),默认为host。 technique:指定编码技术(如reed_sol_van, cauchy等,取决于插件)。 w:指定jerasure插件中的编码包大小(可选)。 l:在lrc插件中指定局部组的数据块数量(用于局部恢复)。 crush-root:指定CRUSH规则中的根节点。
创建纠错码池配置文件 ceph osd erasure-code-profile set <profile-name> \ plugin=<plugin> \ k=<data-chunks> \ m=<coding-chunks> \ [其他参数...]
查看所有配置文件列表 ceph osd erasure-code-profile ls
查看特定配置文件的详细信息 ceph osd erasure-code-profile get my-ec-profile
删除纠删码配置文件(已使用的配置不能修改) ceph osd erasure-code-profile rm my-ec-profile
|
管理和操作pool
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
ceph osd pool rename old-pool-name new-pool-name
ceph config set mon mon_allow_pool_delete true
ceph osd pool delete pool-name pool-name --yes-i-really-really-mean-it
ceph osd pool set pool-name nodelete true
ceph osd pool set pool-name nodelete false
ceph osd pool get pool-name size ceph osd pool get pool-name min_size
ceph osd pool set pool-name size 3 ceph osd pool set pool-name min_size 2
ceph osd lspools
ceph osd pool ls detail
ceph df ceph osd pool stats
ceph osd pool application enable pool-name cephfs ceph osd pool application enable pool-name rbd ceph osd pool application enable pool-name rgw
ceph osd pool set-quota pool-name max_bytes 1T
ceph osd pool set-quota pool-name max_objects 1000000
ceph osd pool set-quota pool-name max_bytes 0 ceph osd pool set-quota pool-name max_objects 0
[global] osd_pool_default_flag_nodelete = true osd_pool_default_flag_nopgchange = true osd_pool_default_flag_nosizechange = true
|
Pool的命名空间
在Ceph中,池的命名空间(Namespace)是RADOS 存储系统中的一种逻辑隔离机制,它允许在同一个存储池(Pool)内创建多个独立的对象命名空间。
一般来说,会为每个应用程序配置一个专用的池,也就是不会使用命名空间
特点:
- 同一池内的不同命名空间可以有同名对象(不会冲突)
- 支持独立的访问控制(通过用户权限管理)
- 不影响底层数据分布(PG 映射机制不变)
场景 |
说明 |
多租户隔离 |
每个租户使用独立命名空间(tenant1_ns, tenant2_ns) |
应用隔离 |
不同应用共享池但使用独立命名空间(app1_data, app2_logs) |
数据生命周期 |
按日期/版本划分命名空间(2023Q1_data, v2_backup) |
测试环境 |
生产/测试数据共存(production, staging) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 在对象操作命令中,命名空间通过 -N 参数指定: <pool_name>/<namespace>/<object_name>
rados -p company_data -N finance put budget.xlsx /data/2023_budget.xlsx
rados -p company_data -N rnd put design.pdf /blueprints/projectX.pdf
rados -p company_data -N finance ls
ceph auth get-or-create client.finance_user \ osd 'allow rw pool=company_data namespace=finance'
|