1. 存储池的类型
副本池: replicated
数据按照指定副本数量存储,默认为3副本。
纠删码池: erasure
相比于副本池而言,更加节省磁盘空间。有点类似于RAID5。
在实际工作中,推荐大家使用副本池。池管理的官方文档:
https://docs.ceph.com/en/squid/rados/operations/pools/
2.增
一.创建存储池流程
1.创建存储池
[root@ceph141 ~]# ceph osd pool create pool1pool'pool1'created[root@ceph141 ~]# ceph osd pool ls.mgr pool1[root@ceph141 ~]#2.声明存储池
存储池创建后要申明,否则ceph -s会报错
声明存储池
[root@ceph141 ~]# rbd pool init pool1[root@ceph141 ~]# ceph osd pool ls detailpool1'.mgr'replicated size3min_size2crush_rule0object_hash rjenkins pg_num1pgp_num1autoscale_mode on last_change30flags hashpspool stripe_width0pg_num_max32pg_num_min1application mgr read_balance_score9.09pool6'pool1'replicated size3min_size2crush_rule0object_hash rjenkins pg_num32pgp_num32autoscale_mode on last_change339lfor0/0/331 flags hashpspool,selfmanaged_snaps stripe_width0application rbd read_balance_score2.81[root@ceph141 ~]#3.查
一.查看存储池
1.查看存储池列表
[root@ceph141 ~]# #查看存储池列表[root@ceph141 ~]# ceph osd pool ls.mgr pool1[root@ceph141 ~]#2.查看存储池及其编号
[root@ceph141 ~]# #查看存储池编号[root@ceph141 ~]# ceph osd lspools1.mgr6pool1[root@ceph141 ~]#3.查看存储池的详细信息
[root@ceph141 ~]# ceph osd pool ls detailpool1'.mgr'replicated size3min_size2crush_rule0object_hash rjenkins pg_num1pgp_num1autoscale_mode on last_change30flags hashpspool stripe_width0pg_num_max32pg_num_min1application mgr read_balance_score9.09pool6'pool1'replicated size3min_size2crush_rule0object_hash rjenkins pg_num32pgp_num32autoscale_mode on last_change339lfor0/0/331 flags hashpspool,selfmanaged_snaps stripe_width0application rbd read_balance_score2.81[root@ceph141 ~]#4.查看存储池利用率统计信息
[root@ceph141 ~]# ceph df[root@ceph141 ~]# rados df5.查看池的i/o信息
[root@ceph141 ~]# ceph osd pool statspool .mgrid1nothing is going on pool pool1id6nothing is going on[root@ceph141 ~]# ceph osd pool stats pool1pool pool1id6nothing is going on[root@ceph141 ~]#二、查看存储池中的文件
1.查看存储池中的文件
[root@ceph141 ~]# rados ls -p pool1rbd_info rbd_trash[root@ceph141 ~]#2.查看存储池文件的状态信息
[root@ceph141 ~]# rados -p pool01 stat sys.txtpool01/sys.txt mtime2026-10-15T11:29:48.000000+0800, size283[root@ceph141 ~]#3.查看存储池中文件PG的副本在哪些osd上
[root@ceph141 ~]# ceph osd map pool01 sys.txtosdmap e145 pool'pool01'(3)object'sys.txt'->pg3.486f5322(3.2)->up([2,8,5], p2)acting([2,8,5], p2)4.改
1.修改存储池的配置参数
[root@ceph141 ~]# ceph osd pool set pool05 size 2setpool6size to2[root@ceph141 ~]#2…修改存储池的名称
[root@ceph141 ~]# ceph osd pool rename pool05 pool5pool'pool05'renamed to'pool5'[root@ceph141 ~]#5.删
1.删除存储池
1.删除存储池里面的文件
[root@ceph141 ~]# rados -p pool01 rm sys.txt[root@ceph141 ~]#[root@ceph141 ~]# rados -p pool01 ls[root@ceph141 ~]#[root@ceph141 ~]# ceph osd map pool01 sys.txtosdmap e152 pool'pool01'(3)object'sys.txt'->pg3.486f5322(3.2)->up([2,8,5], p2)acting([2,8,5], p2)[root@ceph141 ~]#2.删除存储池
[root@ceph141 ~]# ceph osd pool delete pool01 pool01 --yes-i-really-really-mean-it2.删除存储池的两种保护机制
1.删除存储池的机制概述
一旦一个存储池被删除,那么该存储池的所有数据都会被删除且无法找回。
因此为了安全起见,ceph有存储池保护机制,ceph支持两种保护机制:
“nodelete"和"mon_allow_pool_delete”
- nodelete: 一旦一个存储池被打上该标记,则意味着存储池不可被删除,默认值为false表示可以被删除。true不可以删除- mon_allow_pool_delete: 告诉所有mon组件,可以删除存储池。 默认值为false,表示不可以被删除。 true 可以删除生产环境中,为了安全起见,建议大家将存储池设置为nodelete的属性为"ture",mon_allow_pool_delete的值为false。
'nodelete’和’mon_allow_pool_delete’任意一种机制都具有一票否决权,如果想要删除一个存储池,2者都得允许删除,这就是ceph的存储池保护机制。
2.查看参数
[root@ceph141 ~]# ceph osd pool get pool5 nodeletenodelete:false[root@ceph141 ~]# ceph config get mon mon_allow_pool_delete3.调整参数
nodelete
ceph osd poolset存储池 nodeletetruemon_allow_pool_delete
ceph tell mon.* injectargs--mon_allow_pool_delete=true4.删除存储池
[root@ceph141 ~]# ceph osd pool delete pool01 pool01 --yes-i-really-really-mean-it6.存储池的pg,pgp,size,min_size数量配置
参考链接:
https://docs.ceph.com/en/squid/rados/operations/placement-groups/
https://docs.ceph.com/en/squid/rados/operations/placement-groups/#choosing-number-of-placement-groups
1.官方推荐合理设置PG数量
OSD数量 * 100
----------------- —> PG数量
pool存储池的size
假设你有9块磁盘,则配置如下
9*100
------- ----> 300PG
3
但是得到的结果是300,官方建议是2的次方,和300比较接近的是:256,因此集群的合理PG数量为256。
比如我们一个存储池默认32个pG,则整个ceph集群最多可以支持300pG/32个存储池。
如果空间不够,就扩容主机,然后扩容osd磁盘(按照之前部署集群时候的方法)
不要想着优化,不够就加 机器,加磁盘。
2.当autoscale_mode开启式,修改pg的数量时会自动变会默认的pg数量32
不推荐生产上修改!!!
测试
1.调整pg数量[root@ceph141 ~]# ceph osd pool set 存储池 pg_num 2setpool2pg_num to22.查看 ceph osd poollsdetail3.关闭autoscale_mode模式,再次修改pg和pgp数量[root@ceph141 ~]# ceph osd pool set 存储池 pg_autoscale_mode off查看 ceph osd poollsdetail7.rbd存储池的资源配额实战
ceph集群官方支持基于对象存储数量和数据存储的大小两种方式限制存储资源配额。
对象存储数量 限制最多存储多少object
数据存储的大小 限制最多存储多少大小
官网连接:
https://docs.ceph.com/en/latest/rados/operations/pools/#setting-pool-quotas
1.创建存储池
[root@ceph141 ~]# ceph osd pool create pool2 32 32 --size 3 --autoscale_mode offpool'pool2'created2.查看资源限制
[root@ceph141 ~]# ceph osd pool get-quota pool2quotasforpool'pool2':max objects: N/A max bytes:N/A#什么都没有限制[root@ceph141 ~]#3.限制存储池最大上限有3w个对象,最大存储10M
[root@ceph141 ~]# ceph osd pool set-quota pool2 max_bytes 10485760set-quota max_bytes=10485760forpool pool2[root@ceph141 ~]# ceph osd pool set-quota pool2 max_objects 30000set-quota max_objects=30000forpool pool2[root@ceph141 ~]#两个条件,满足一个,都无法存数据。
4.验证
往存储池存数据,超过10M
省略(就会发现超过条件限制就存不进去了)
5.清除资源限制
[root@ceph141 ~]# ceph osd pool set-quota pool2 max_bytes 0set-quota max_bytes=0forpool pool2[root@ceph141 ~]# ceph osd pool set-quota pool2 max_objects 0set-quota max_objects=0forpool pool2[root@ceph141 ~]#