一、存储池(osd)的查询
1.查看存储池列表
默认情况下只有’.mgr这个存储池’
[root@ceph141 ~]# ceph osd pool ls
.mgr
2.查看存储池及其编号信息
[root@ceph141 ~]# ceph osd lspools
1 .mgr
3.查看存储池的详细信息
[root@ceph141 ~]# ceph osd pool ls detail
pool 1 '.mgr' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 21 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr read_balance_score 9.09
4.查看存储池利用率统计信息
[root@ceph141 ~]# rados df
POOL_NAME USED OBJECTS CLONES COPIES MISSING_ON_PRIMARY UNFOUND DEGRADED RD_OPS RD WR_OPS WR USED COMPR UNDER COMPR
.mgr 1.3 MiB 2 0 6 0 0 0 310 512 KiB 167 1.6 MiB 0 B 0 B
ers01 0 B 0 0 0 0 0 0 0 0 B 0 0 B 0 B 0 B
mysql 0 B 0 0 0 0 0 0 0 0 B 0 0 B 0 B 0 B
total_objects 2
total_used 360 MiB
total_avail 5.3 TiB
total_space 5.3 TiB
列表字段说明
USED
:存储池中已使用的存储空间。OBJECTS
:存储池中的对象数量。CLONES
:克隆的对象数量。通常用于快照功能,这里显示为 0,表示没有克隆的对象。COPIES
:对象的副本总数。例如,如果一个对象有 3 个副本,且存储池中有 2 个对象,则COPIES
为 6。MISSING_ON_PRIMARY
:在主 OSD 上丢失的对象数量。这里显示为 0,表示没有丢失的对象。UNFOUND
:未找到的对象数量。这里显示为 0,表示没有未找到的对象。DEGRADED
:降级的对象数量。降级是指某些副本丢失,但数据仍然可用。这里显示为 0,表示没有降级的对象。RD_OPS
:读取操作次数。RD
:读取的数据量。WR_OPS
:写入操作次数。WR
:写入的数据量。USED COMPR
:已使用的压缩数据量。这里显示为 0 B,表示没有启用压缩或没有压缩数据。UNDER COMPR
:正在压缩的数据量。这里显示为 0 B,表示没有正在进行的压缩操作。
总计
total_objects
:所有存储池中的对象总数。total_used
:所有存储池中已使用的总存储空间。total_avail
:集群中可用的总存储空间。total_space
:集群中的总存储空间。
5.获取特定池或所有池的I/O信息
#这些存储池当前没有读写操作或正在进行的后台任务
[root@ceph141 ~]# ceph osd pool stats
pool .mgr id 1
nothing is going on
pool mysql id 9
nothing is going on
pool ers01 id 10
nothing is going on
6.获取存储池某个特定的配置参数
可以获取ceph osd pool ls detail
中的所有参数
[root@ceph141 ~]# ceph osd pool get mysql size
size: 2
[root@ceph141 ~]# ceph osd pool get mysql pg_num
pg_num: 32
7.获取存储的大小相关配置信息
[root@ceph141 ~]# ceph osd dump | grep 'replicated size'
pool 1 '.mgr' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 21 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr read_balance_score 9.09
pool 9 'mysql' replicated size 2 min_size 1 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 327 lfor 0/0/322 flags hashpspool stripe_width 0 read_balance_score 2.25
二、存储池(osd)的创建
1.创建存储池
显示存储池详细信息时,第4列即为类型
1.1 创建副本池类型
#创建时,如果不指定存储池类型,默认就是副本池
[root@ceph141 ~]# ceph osd pool create test01 replicated
pool 'test01' created
#可通过查看详细信息,查看副本池类型
[root@ceph141 ~]# ceph osd pool ls detail
pool 9 'test01' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 324 lfor 0/0/322 flags hashpspool stripe_width 0 read_balance_score 2.25
1.2 创建纠删码池类型
[root@ceph141 ~]# ceph osd pool create ers01 erasure
pool 'ers01' created
#可通过查看详细信息,查看副本池类型
[root@ceph141 ~]# ceph osd pool ls detail
pool 10 'ers01' erasure profile default size 4 min_size 3 crush_rule 1 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 324 lfor 0/0/322 flags hashpspool stripe_width 8192
三、存储池(osd)的修改
1.修改存储池的副本数
值得注意的是,副本数量越小数据的可靠性越差
[root@ceph141 ~]# ceph osd pool set test01 size 2
set pool 9 size to 2
在默认情况下存储池的数量是默认不允许设置为1的,当设置为1时,数据只会存储在1个OSD上,如果这个OSD发生故障,会造成数据不可恢复性的丢失
#系统默认不允许设置为1
[root@ceph141 ~]# ceph osd pool set test01 size 1
Error EPERM: configuring pool size as 1 is disabled by default.
2.修改存储池的其他参数
#修改nodelete的默认值
[root@ceph141 ~]# ceph osd pool set mysql nodelete true
3.修改存储池的名称
[root@ceph141 ~]# ceph osd pool rename test01 mysql
pool 'test01' renamed to 'mysql'
四、存储池(osd)的删除
-
ceph中,由于一个存储池一旦被删除,那么该存储池的数据也会被删除、无法找回;所以为了安全起见,ceph有两种存储池的保护机制
- nodelete
- false:可以被删除(默认)
- true:不可以被删除,若一个存储池打上该标记,意味着存储池不可被删除
- mon_allow_pool_delete
- false:不可以被删除(默认),告诉所有mon组件,可以删除存储池
- true:可以被删除
- nodelete
-
生产环境中,为了安全,通常将nodelete设置为true;mon_allow_pool_delete设置为false
-
注意:’nodelete’和’mon_allow_pool_delete’任意一种机制都具有一票否决权,如果想要删除一个存储池,2者都得允许删除,这就是ceph的存储池保护机制。
1.查看两种机制的值
#mon_allow_pool_delete
[root@ceph141 ~]# ceph config get mon mon_allow_pool_delete
false
#nodelete
[root@ceph141 ~]# ceph osd pool get mysql nodelete
nodelete: false
2.mon_allow_pool_delete验证案例
在两个机制都没发生改动时,mon_allow_pool_delete不允许删除,所以会出现以下情况
要求我们书写存储池名字两次,并添加--yes-i-really-really-mean-it
[root@ceph141 ~]# ceph osd pool delete ers01
Error EPERM: WARNING: this will *PERMANENTLY DESTROY* all data stored in pool ers01. If you are *ABSOLUTELY CERTAIN* that is what you want, pass the pool name *twice*, followed by --yes-i-really-really-mean-it.
再次尝试删除,要求我们必须把mon_allow_pool_delete
的值设置为true
[root@ceph141 ~]# ceph osd pool delete ers01 ers01 --yes-i-really-really-mean-it
Error EPERM: pool deletion is disabled; you must first set the mon_allow_pool_delete config option to true before you can destroy a pool
设置mon_allow_pool_delete
的值设置为true
之后,再次尝试删除
[root@ceph141 ~]# ceph tell mon.* injectargs --mon_allow_pool_delete=true
mon.ceph141: {}
mon.ceph141: mon_allow_pool_delete = ''
mon.ceph142: {}
mon.ceph142: mon_allow_pool_delete = ''
mon.ceph143: {}
mon.ceph143: mon_allow_pool_delete = ''
#成功移除
[root@ceph141 ~]# ceph osd pool delete ers01 ers01 --yes-i-really-really-mean-it
pool 'ers01' removed
3.nodelete验证案例
前面我们已将mon_allow_pool_delete
的值改为true,接下来由于nodelete默认值为false,所以我们将其改为true来验证此机制是否生效
[root@ceph141 ~]# ceph osd pool set mysql nodelete true
set pool 9 nodelete to true
尝试删除,失败,验证成功
[root@ceph141 ~]# ceph osd pool delete mysql mysql --yes-i-really-really-mean-it
Error EPERM: pool deletion is disabled; you must unset nodelete flag for the pool first
五、存储池pg和pgp的数量配置
1.官方推荐合理设置PG数量
$$
\frac{OSD数量*100}{pool存储池的size}=PG数量
$$
官方的建议是设置为2的幂,所以设置的PG数量应为与所得结果最相近的2的幂值
示例:
我们的测试环境有9块磁盘,Mysql存储池数量为3,所以:
$$
\frac{9*100}{3}=300PG
$$
所得PG数量为300,与之最近的2的幂为256,所以应设置PG数量为256
2.autoscale_mode的配置
当autoscale_mode开启时,修改pg的数量时会自动变会默认的pg数量
2.1 查询autoscale_mode的值
有三种模式:
off
:禁用自动扩展功能。管理员需要手动为每个存储池设置合适的 PG 数量。on
:启用自动扩展功能。PG 数量会根据存储池的使用情况进行自动调整。warn
:当 PG 数量需要调整时,会触发健康警报,但不会自动调整 PG 数量。
[root@ceph141 ~]# ceph osd pool get mysql pg_autoscale_mode
pg_autoscale_mode: on
2.2 修改autoscale_mode的值
[root@ceph141 ~]# ceph osd pool set mysql pg_autoscale_mode off
set pool 9 pg_autoscale_mode to off
2.3 更改pg和pgp的值
想要设置二值为某指定值,必须将autoscale_mode设置为off
[root@ceph141 ~]# ceph osd pool set mysql pg_num 2
set pool 9 pg_num to 2
[root@ceph141 ~]# ceph osd pool set mysql pgp_num 2
set pool 9 pgp_num to 2
2.4 关于为什么修改PG和PGP值不会瞬间改变的问题
- 修改完PG和PGP值后,我们观察发现,PG值要等一段时间才能配置成功
[root@ceph141 ~]# ceph osd pool ls detail
pool 9 'mysql' replicated size 2 min_size 1 crush_rule 0 object_hash rjenkins pg_num 27 pgp_num 26 pg_num_target 2 pgp_num_target 2 autoscale_mode off last_change 360 lfor 0/358/356 flags hashpspool,nodelete stripe_width 0 read_balance_score 2.33
#一段时间后
[root@ceph141 ~]# ceph osd pool ls detail
pool 9 'mysql' replicated size 2 min_size 1 crush_rule 0 object_hash rjenkins pg_num 2 pgp_num 2 autoscale_mode off last_change 487 lfor 0/487/485 flags hashpspool,nodelete stripe_width 0 read_balance_score 4.55
- 原因:
Ceph 在调整 PG 数量时会考虑数据的重平衡和集群的稳定性
- 重平衡:
pg_num 和 pgp_num 发生变化时,Ceph 需要将数据从旧的 PG 映射迁移到新的 PG 映射中。这个过程需要逐步进行,以避免对集群性能造成过大影响
- 集群的稳定性:
直接大幅调整 PG 数量可能会导致集群负载不均衡,甚至可能引发性能问题
3.创建存储池时指定pg和pgp
[root@ceph141 ~]# ceph osd pool create harbor 128 128 --autoscale_mode off
pool 'harbor' created
[root@ceph141 ~]# ceph osd pool ls detail
pool 11 'harbor' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 128 pgp_num 128 autoscale_mode off last_change 491 flags hashpspool stripe_width 0 read_balance_score 1.90
4.总结
-
PG:一个存储池可以有多个pg,数据分布式存储在不同的pg中,pg和pgp数量要保持一致。
-
size:数据存储几份,对于副本池而言,若不指定,则默认存储3副本
-
min_size:最小可用的副本数量,比如3副本,如果你设置为最小的副本数量为1,表示可以允许挂掉2个节点。但是如果你设置的为2,表示可以挂掉1个节点。
来源链接:https://www.cnblogs.com/dezyan/p/18807698
没有回复内容