您的位置:首页 > 教育 > 锐评 > 重庆市住建委官网_大学课程免费自学网站_广告推广软文案例_百度推广关键词质量度

重庆市住建委官网_大学课程免费自学网站_广告推广软文案例_百度推广关键词质量度

2025/4/19 20:32:47 来源:https://blog.csdn.net/m0_73950916/article/details/144300277  浏览:    关键词:重庆市住建委官网_大学课程免费自学网站_广告推广软文案例_百度推广关键词质量度
重庆市住建委官网_大学课程免费自学网站_广告推广软文案例_百度推广关键词质量度

1、存储池

1、存储池的概念

  • 存储池就是ceph的逻辑分区,专门用来存储对象的
  1. 特点

    • 将文件切片成对象,通过hash算法,找到存储池中的pg,池中的pg根据crush算法找到osd节点

    • 存储中的PG数量对性能有重要的影响,过多和过少都不行(前面第一章讲了的),超过了一定的数量后,禁止创建存储池

    • 访问级别,不同用户对于同一个存储池有不同的权限

2、存储的类型

  1. 冗余池

    • 提供数据冗余性,让数据不容易丢失,就是写入多份的意思
  2. 缓存池(加速池)

    • 为数据的读写实现加速(在冗余池前面挂载一个缓存池,作为加速池,后面的R版本的被弃用了)
  3. 根据冗余性分类的话

    • 分为复制池

    • 纠删码池

3、复制池

1、创建资源池

  • pgp 指的是OSD在pg上的排列组合方式

[root@node1 ~]# ceph osd pool create 
Invalid command: missing required parameter pool(<poolname>)
osd pool create <pool> [<pg_num:int>] [<pgp_num:int>] [replicated|erasure] [<erasure_code_profile>] [<rule>] [<expected_num_objects:int>] [<size:int>] [<pg_num_min:int>] [<pg_num_max:int>] [on|off|warn] [--bulk] [<target_size_bytes:int>] [<target_size_ratio:float>] :  create pool
Error EINVAL: invalid command# <poolname> # pg_num:int> 存储池中的pg总数# pgp_num:int 存储池中pg有效数,通常与pg相等[root@node1 ~]# ceph osd pool  create pool01
pool 'pool01' created
[root@node1 ~]# # 查看存储池[root@node1 ~]# ceph osd pool ls 
device_health_metrics
pool01

2、查看存储池

# 查看存储类型,详情
[root@node1 ~]# ceph osd pool  ls detail 
pool 1 'device_health_metrics' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 45 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr_devicehealth
pool 2 'pool01' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 46 flags hashpspool stripe_width 0# replicated size 3  这个就是存储池的规则,写入了一份数据,然后存储三份,也就是3个副本,确保了数据的高可用性# min_size 2 最小的副本数,也就是至少要存储到2个副本才行,否则不能存储# crush_rule 0,crush规则,使用的是默认的规则,pg与osd之间的映射(也就是数据与osd的映射之间的关系)# object_hash rjenkins 对象映射到pg的算法为 rjenkins# pg_num 32 ,pgp_num 32 pg和pgp的数量都为32个# autoscale_mode on  池子开启了自我扩展,也就是自动调整PG的数量# 查看存储池容量
[root@node1 ~]# ceph df 
--- RAW STORAGE ---
CLASS    SIZE   AVAIL     USED  RAW USED  %RAW USED
hdd    90 GiB  87 GiB  2.6 GiB   2.6 GiB       2.84
TOTAL  90 GiB  87 GiB  2.6 GiB   2.6 GiB       2.84--- POOLS ---
POOL                   ID  PGS  STORED  OBJECTS  USED  %USED  MAX AVAIL
device_health_metrics   1    1     0 B        0   0 B      0     28 GiB
pool01                  2   32     0 B        0   0 B      0     28 GiB# 查询每个osd容量
[root@node1 ~]# ceph osd df 
ID  CLASS  WEIGHT   REWEIGHT  SIZE    RAW USE  DATA     OMAP     META     AVAIL    %USE  VAR   PGS  STATUS2    hdd  0.00980   1.00000  10 GiB  291 MiB  484 KiB      0 B  290 MiB  9.7 GiB  2.84  1.00   13      up4    hdd  0.00980   1.00000  10 GiB  291 MiB  484 KiB      0 B  290 MiB  9.7 GiB  2.84  1.00   12      up7    hdd  0.00980   1.00000  10 GiB  291 MiB  488 KiB      0 B  291 MiB  9.7 GiB  2.84  1.00    8      up1    hdd  0.00980   1.00000  10 GiB  291 MiB  488 KiB      0 B  291 MiB  9.7 GiB  2.84  1.00    7      up5    hdd  0.00980   1.00000  10 GiB  291 MiB  484 KiB      0 B  291 MiB  9.7 GiB  2.84  1.00   13      up8    hdd  0.00980   1.00000  10 GiB  291 MiB  488 KiB      0 B  290 MiB  9.7 GiB  2.84  1.00   13      up0    hdd  0.00980   1.00000  10 GiB  291 MiB  484 KiB      0 B  291 MiB  9.7 GiB  2.84  1.00   10      up3    hdd  0.00980   1.00000  10 GiB  291 MiB  484 KiB      0 B  291 MiB  9.7 GiB  2.84  1.00   15      up6    hdd  0.00980   1.00000  10 GiB  291 MiB  488 KiB      0 B  291 MiB  9.7 GiB  2.84  1.00    8      upTOTAL  90 GiB  2.6 GiB  4.3 MiB  8.5 KiB  2.6 GiB   87 GiB  2.84                   
MIN/MAX VAR: 1.00/1.00  STDDEV: 0

3、绑定存储池应用类型

  • 如果不绑定存储池类型的话,直接存储数据,ceph会告警

  • 应用类型值的就是提供何种存储业务,块存储(rbd),文件系统存储(cephfs),还是对象存储池(rgw)

  • 区分不同存储池的类型

# 给一个池子打上一个标签
[root@node1 ~]# ceph osd pool application enable pool01 rbd
enabled application 'rbd' on pool 'pool01'# 也可以一个池子有多个标签(但是没有应用场景)
[root@node1 ~]# ceph osd  pool application enable pool01 rgw --yes-i-really-mean-it
enabled application 'rgw' on pool 'pool01'
[root@node1 ~]# ceph osd pool ls detail 
pool 1 'device_health_metrics' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 45 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr_devicehealth
pool 2 'pool01' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 48 flags hashpspool stripe_width 0 application rbd,rgw

4、移除存储的指定标签

# 有多个存储池的类型的话,就是使用--yes-i-really-mean-it 即可
[root@node1 ~]# ceph osd pool application disable pool01 rgw --yes-i-really-mean-it
disable application 'rgw' on pool 'pool01'
[root@node1 ~]# ceph osd pool  ls detail 
pool 1 'device_health_metrics' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 45 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr_devicehealth
pool 2 'pool01' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 49 flags hashpspool stripe_width 0 application rbd

5、验证存储池是3副本

# 创建一个1M的文件
[root@node1 ~]# dd if=/dev/zero of=123.txt bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.000645748 s, 1.6 GB/s# 存储到池子里面去
[root@node1 ~]# rados -p pool01 put 123.txt ./123.txt
[root@node1 ~]# rados -p pool01 ls 
123.txt# 发现对象为1个,但是占用了3M的空间,证明这个pool01是3副本的规则
[root@node1 ~]# ceph df 
--- RAW STORAGE ---
CLASS    SIZE   AVAIL     USED  RAW USED  %RAW USED
hdd    90 GiB  87 GiB  2.6 GiB   2.6 GiB       2.85
TOTAL  90 GiB  87 GiB  2.6 GiB   2.6 GiB       2.85--- POOLS ---
POOL                   ID  PGS  STORED  OBJECTS   USED  %USED  MAX AVAIL
device_health_metrics   1    1     0 B        0    0 B      0     28 GiB
pool01                  2   32   1 MiB        1  3 MiB      0     28 GiB

4、存储池对象的管理

1、上传对象

# rados -p 存储池名 put 对象名 对象路径

2、下载对象

# rados -p 存储池名 get 对象名 对象路径

3、查看对象

# rados -p 存储池名 ls 

4、删除对象

# rados -p u存储名 rm 对象名

5、查询对象存储的OSD

  • ceph osd map pool01 对象名
# 先要查看到PG
[root@node1 ~]# ceph pg dump# 简略输出PG
[root@node1 ~]# ceph pg dump pgs_brief
PG_STAT  STATE         UP       UP_PRIMARY  ACTING   ACTING_PRIMARY
2.1f     active+clean  [4,3,8]           4  [4,3,8]               4
2.1e     active+clean  [7,5,3]           7  [7,5,3]               7# 都是以2开头的,因为这个池子的id是2
# [] 里面对应的就是OSD编号
# active+clean 干净可用的# 一共有32个PG
[root@node1 ~]# ceph pg dump pgs_brief | grep ^2 | wc -l
dumped pgs_brief
32# 去找一下,32个PG里面有数据
[root@node1 ~]# ceph pg dump | grep ^2 | awk '{print $1,$2}'# 上面的方法是最原始的方法,当数据多起来的时候,就不行了# ceph里面有查询pg,osd的方法
[root@node1 ~]# ceph osd map pool01 123.txt
osdmap e49 pool 'pool01' (2) object '123.txt' -> pg 2.613d0fb4 (2.14) -> up ([6,1,4], p6) acting ([6,1,4], p6)
[root@node1 ~]# 

5、存储池配额管理

1、配额方式

  • 对象数量配额

  • 容量配额

  • 限制这个存储池使用的空间

1、查询配额管理

[root@node1 ~]# ceph osd pool  get-quota  pool01
quotas for pool 'pool01':max objects: N/Amax bytes  : N/A# 输出都是N/A则没有开启配额
# max objects 没有开启对象配额
# max bytes 没有开启容量配额

2、设置对象配额

[root@node1 ~]# ceph osd pool  set-quota  pool01 max_objects 3
set-quota max_objects = 3 for pool pool01[root@node1 ~]# ceph osd pool  get-quota  pool01
quotas for pool 'pool01':max objects: 3 objects  (current num objects: 1 objects)max bytes  : N/A# 这个存储池最大存储个对象# 上传了三个对象之后,再要上传或者删除文件都会卡主
# 当配额满了之后,触发时,IO会被无限期的延长,直到配额不满足的时候,才行# 解决方法,扩展配额

3、解除对象配额

[root@node1 ~]# ceph osd pool set-quota pool01 max_objects 0
set-quota max_objects = 0 for pool pool01

4、容量配额

  • 当配额的对象的为容量时,只有存储池在上传对象的这一刻,没有达到配额,哪怕对象的容量达到了存储池配额,也能进行上传,但是下一次传输对象的话,就会传不上去,因为,达到了对象配额最大了
# 设置10M
[root@node1 ~]# ceph osd pool  set-quota pool01 max_bytes 10M
set-quota max_bytes = 10485760 for pool pool01[root@node1 ~]# ceph osd pool get-quota  pool01
quotas for pool 'pool01':max objects: 3 objects  (current num objects: 1 objects)max bytes  : 10 MiB  (current num bytes: 1048576 bytes)[root@node1 ~]# ceph osd pool set-quota pool01 max_bytes 0
set-quota max_bytes = 0 for pool pool01
[root@node1 ~]# ceph osd pool  get-quota pool01
quotas for pool 'pool01':max objects: N/Amax bytes  : N/A

6、存储池操作

1、修改存储池重命名

  • 重命名不会影响对象在OSD上面的移动

  • 因为独有的存储池的ID不会发生变化,对应的PG也不会发生变化(分裂,合并)

  • 存储池的名字不会影响存储池的PG

  • 当PG发生分裂或者合并的话,就会影响对象

  • 存储池改名,会对上层的业务有一定的影响,如果ceph对接了openstack或者k8s的话,则需要修改配置文件

[root@node1 ~]# ceph osd pool rename pool01 cloud
rpool 'pool01' renamed to 'cloud'
[root@node1 ~]# ceph osd pool ls 
device_health_metrics
cloud

7、存储池的快照

  • 几乎上没有用到

  • 存储池基于对象层的快照,也就是为每一个对象拍摄快照

  • 快照也是存储在存储池中的

1、创建快照

[root@node1 ~]# ceph osd pool mksnap cloud snap1
created pool cloud snap snap1

2、查看快照

# 查看有几个快照
rados -p 存储池 lssnap[root@node1 ~]# rados -p cloud lssnap
1	snap1	2024.12.06 09:21:29
1 snaps# 查看快照中的内容
rados -p 存储池 -s 快照名 ls [root@node1 ~]# rados -p cloud -s snap1 ls
selected snap 1 'snap1'
123.txt

3、还原快照

  • 非常的鸡肋,删除了一个对象,但是查看的时候,还是有这个对象,只是下载不过来,因为这个是快照的对象

  • 手动还原的话,就是将这个快照中对象下载到本地,然后重新上传到存储池中

[root@node1 ~]# rados -p cloud rm 123.txt# 删除了也还只是有一个对象,因为这个是快照里面的
[root@node1 ~]# rados -p cloud ls 
123.txt# 下载的时候报错了
[root@node1 ~]# rados -p cloud get 123.txt 123.txt
error getting cloud/123.txt: (2) No such file or directory# 然后基于这个快照下载这个对象,然后上传这个对象
[root@node1 ~]# rados -p cloud -s snap1 get 123.txt 123.txt
selected snap 1 'snap1'
[root@node1 ~]# ls
123.txt  anaconda-ks.cfg  ceph.pub[root@node1 ~]# rados -p cloud put 123.txt 123.txt 
[root@node1 ~]# rados -p cloud ls 
123.txt# 前面是对象名,后面是下载到本地的对象名
[root@node1 ~]# rados -p cloud get 123.txt 1.txt
[root@node1 ~]# ls
123.txt  1.txt  anaconda-ks.cfg  ceph.pub

4、一键还原快照

  • 直接将快照中的对象还原到存储池中

[root@node1 ~]# rados -p cloud rm 123.txt
[root@node1 ~]# rados -p cloud ls 
123.txt
[root@node1 ~]# rados -p cloud rollback 123.txt snap1
rolled back pool cloud to snapshot snap1
[root@node1 ~]# rados -p cloud ls 
123.txt
[root@node1 ~]# rados -p  cloud get 123.txt 2.txt
[root@node1 ~]# ls
123.txt  1.txt  2.txt  anaconda-ks.cfg  ceph.pub

5、删除快照

rados -p cloud rmsnap snap1
[root@node1 ~]# rados -p cloud lssnap
0 snaps

6、快照总结

  • 生产中,上面的2个方式都没有使用,因为这些东西没有可控性

  • 一般是基于应用进行快照,基于RBD快照,基于文件系统快照,基于对象存储备份或者是双活

6、配置存储池的中的参数

1、查看存储池所有参数

[root@node1 ~]# ceph osd pool get cloud all
size: 3   # 副本数量为3个,存储池规则
min_size: 2   # 最少是2个副本数量
pg_num: 32
pgp_num: 32
crush_rule: replicated_rule  # 存储池类型
hashpspool: true
nodelete: false  # 这个存储池没有被保护,也就是可以删除
nopgchange: false
nosizechange: false
write_fadvise_dontneed: false
noscrub: false
nodeep-scrub: false
use_gmt_hitset: 1
fast_read: 0
pg_autoscale_mode: on  # PG会自动扩展
bulk: false# 查看指定类型参数
[root@node1 ~]# ceph osd pool  get cloud size
size: 3

2、设置存储池参数

# 设置一个PG对应2个副本
[root@node1 ~]# ceph osd pool set cloud size 2# 改成2的话,数据就会缩容,扩展的话,会增加的数据的,也就是复制的数据而已,副本之间的复制即可
[root@node1 ~]# ceph pg dump pgs_brief 
PG_STAT  STATE         UP       UP_PRIMARY  ACTING   ACTING_PRIMARY
2.1f     active+clean    [4,3]           4    [4,3]               4
2.1e     active+clean    [7,5]           7    [7,5]               7
2.1d     active+clean    [8,3]           8    [8,3]               8
2.1c     active+clean    [8,3]           8    [8,3]               8

3、PG数量调整

  • PG数量调大的话
    • 如果存储池中的PG的对象较多的话,则调大PG,会引起PG的分裂,在新的OSD上产生新的PG,对象复制到新的PG中

    • 存储中PG对象较少,则直接产生新的PG,不会造成数据的移动

    • 在存储池中,不要随意调整PG的数量,由MGR的pg自我扩展数量来调整

# 设置PG参数
# 将PG数量增加即可
[root@node1 ~]# ceph osd pool set cloud pg_num 35
set pool 2 pg_num to 35
[root@node1 ~]# ceph osd pool get cloud all
size: 2
min_size: 1
pg_num: 35
pgp_num: 35   # 自动的就行调整
crush_rule: replicated_rule
hashpspool: true
nodelete: false# 35个PG
[root@node1 ~]# ceph pg dump pgs_brief | grep ^2 |wc -l
dumped pgs_brief
35# 扩容PG数量,PG中的对象会进行移动,在新的OSD上生成一个PG
# 就是虽然扩展了PG数量,但是了原始的OSD还是没有变,那么根据crush算法,要算出新的PG与OSD的映射关系,进行重新的平衡

3、保护存储池

[root@node1 ~]# ceph osd pool set cloud nodelete true
set pool 2 nodelete to true
[root@node1 ~]# ceph osd pool get cloud all
size: 2
min_size: 1
pg_num: 35
pgp_num: 35
crush_rule: replicated_rule  # 复制池
hashpspool: true
nodelete: true  # 设置存储池不能被删除
nopgchange: false
nosizechange: false
write_fadvise_dontneed: false
noscrub: false
nodeep-scrub: false
use_gmt_hitset: 1
fast_read: 0
pg_autoscale_mode: on
bulk: false

7、PG核心规则

1、pg扩容情况

  1. 扩容PG,PG对象数量较多的情况

    • PG 对象较多时,扩容 PG 会导致 PG 分裂,即现有 PG 被拆分成多个更小的 PG,新生成的 PG 会分布到不同的 OSD 上,可能需要移动数据以保持副本的一致性。
  2. 缩容PG,PG对象数量较少的情况

    • PG 对象较少时,扩容 PG 不会导致数据的迁移,而是直接创建新的 PG,不涉及数据的重新分配。
  3. 体现了数据负载均衡能力和容错能力,能在合适的时机对PG进行分裂或者扩展

  4. 图解
    画pg分为2个,然后数据进行迁移

  5. 扩容PG

  • 直接扩容PG的话,PG会进行分裂,那么PG中的对象需要消耗一定计算和带宽资源,因为PG分裂的话,所对应的新的PG和OSD之间的映射关系有CRUSH算法算出来,然后那些OSD的数据进行复制移动到新的OSD上面,这样的话就需要消耗一点的资源

  • 因此的话,扩容PG在业务的低谷进行

  1. 扩容PGP
  • 3个PG对应3个pgp,扩容PGP的话,不会影响原来的PG与OSD的映射关系

  • 当对象来存储的话,将会存储到新的PG在OSD上面的分布(当有新的PG的话),会影响后来新创建的PG

  • 新创建的pg会有新的排列组合方式,就会使用这种新的排列方式

img

  • 一般来说的话,现在就是自动扩展的

2、pg自我扩展模式

  • 根据这个mgr中的模块可以实现自我扩展,N版本,默认就是开启的
# 关掉扩展模式
[root@node1 ~]# ceph osd pool set cloud pg_autoscale_mode off
set pool 2 pg_autoscale_mode to off# 开启扩展模式
[root@node1 ~]# ceph osd pool set cloud pg_autoscale_mode on
set pool 2 pg_autoscale_mode to on
[root@node1 ~]# ceph osd pool get cloud all
size: 2
min_size: 1
pg_num: 32
pgp_num: 32
crush_rule: replicated_rule
hashpspool: true
nodelete: true
nopgchange: false
nosizechange: false
write_fadvise_dontneed: false
noscrub: false
nodeep-scrub: false
use_gmt_hitset: 1
fast_read: 0
pg_autoscale_mode: on
bulk: false

8、存储池中的命令空间

1、命名空间概念

2、命名空间查看

# 前面为空的话,就是默认的命名空间
[root@node1 ~]# rados -p cloud ls --allpasswd# 上传对象的时候,可以使用-N,命名空间的名字
[root@node1 ~]# rados -p cloud put group /etc/group -N group1
[root@node1 ~]# rados -p cloud ls --allpasswd
group1	group# 查看指定命名空间的对象
[root@node1 ~]# rados -p cloud ls -N group1
group# 查看的时候以json格式输出
[root@node1 ~]# rados -p cloud ls --all --format=json
[{"namespace":"","name":"passwd"},{"namespace":"group1","name":"group"}][root@node1 ~]# 
  • 命名空间在ceph原生应用(librados),用户相册,使用这个可以进行隔离

9、删除存储池

1、必要条件

  • monitor要允许删除存储池

  • 存储池没有被保护

# 允许删除monitor删除存储池
[root@node1 ceph]# ceph config set mon mon_allow_pool_delete true# 关掉存储池的保护
[root@node1 ceph]# ceph osd pool set cloud nodelete false
set pool 2 nodelete to false# 删掉存储池
[root@node1 ceph]# ceph osd pool delete cloud  cloud --yes-i-really-really-mean-it
pool 'cloud' removed

10、纠删码池

1、纠删码池

  • 和复制池一样,都是为ceph提供存储池的冗余性,与复制池比较的话,拥有更大存储利用率,同样是三个副本的场景中,复制池可以用33%的利用率,但是纠删码池的话,有75%的利用率,这个就是纠删码池的性价比,在海量存储池使用纠删码池来提供业务

  • n=k+m,n指的就是数据块+编码块的总数 (也就是一个对象要切成多少个块才行)

  • k 数据块个数,将一个对象切分成多少个数据块

  • m 编码个数,切分出来的数据块生成多少个编码块

  • 任意个m恢复任意个K,因此在纠删码池中,m决定了存储池的冗余性,决定了能够丢失多少个块,而不是丢失数据

  • 3个副本,一个文件大小为3M的话,存储的方式为1M+1M+1M+1M+1M 即可,因为要分成3个块,每一个块的大小为1M

2、纠删码池的工作原理

img

  • 在被切成片的时候,还需要再次切成块进行存储

3、纠删码池的创建

# 存储池的类型
[root@node1 ceph]# ceph osd pool create pool01 erasure
pool 'pool01' created# 查看详细情况
[root@node1 ceph]# ceph osd pool ls detail 
pool 1 'device_health_metrics' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 57 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr_devicehealth
pool 3 'pool01' 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 98 flags hashpspool stripe_width 8192

4、查看纠删码池的规则

# 查看所有纠删码规则
[root@node1 ceph]# ceph osd erasure-code-profile ls
default# 查看纠删码的详细规则
[root@node1 ceph]# ceph osd erasure-code-profile get default
k=2  # 数据块个数
m=2  # 纠删码块个数
plugin=jerasure  # 使用的插件
technique=reed_sol_van# 如果n=4的话,则4个块会选择4台不同的主机,也就是故障域为主机

5、刚创建出来的纠删码池,为什么不可用

[root@node1 ceph]# ceph -s cluster:id:     47a615ea-b2dc-11ef-a364-000c29679dd7health: HEALTH_WARNDegraded data redundancy: 32 pgs undersizedservices:mon: 3 daemons, quorum node1,node2,node3 (age 7h)mgr: node1.ajdllh(active, since 7h), standbys: node2.gkqxdyosd: 9 osds: 9 up (since 7h), 9 in (since 23h)data:pools:   2 pools, 33 pgsobjects: 0 objects, 0 Busage:   2.6 GiB used, 87 GiB / 90 GiB availpgs:     32 active+undersized1  active+clean[root@node1 ceph]# ceph pg dump pgs_brief 
PG_STAT  STATE              UP                  UP_PRIMARY  ACTING              ACTING_PRIMARY3.1f     active+undersized  [2,0,1,2147483647]           2  [2,0,1,2147483647]               2
3.1e     active+undersized  [2,5,2147483647,3]           2  [2,5,2147483647,3]               2
3.1d     active+undersized  [5,0,2147483647,4]           5  [5,0,2147483647,4]               5
3.1c     active+undersized  [6,2147483647,7,1]           6  [6,2147483647,7,1]               6
3.1b     active+undersized  [1,3,2147483647,7]           1  [1,3,2147483647,7]               1
3.1a     active+undersized  [1,4,3,2147483647]           1  [1,4,3,2147483647]               1# 最后一个OSD没有主机选择,所以故障了[root@node1 ceph]# ceph osd erasure-code-profile get default
k=2
m=2
plugin=jerasure
technique=reed_sol_van# n=4的话,4个块就会分布在4台主机上面,所以的话,最后一个块没有主机选择,所以就会故障# 默认的域是主机,4个主机,不符合,所以就会发生故障

6、自定义纠删码规则

  • 编写一个profile
[root@node1 /]# ceph osd erasure-code-profile set ecdemo k=3 m=2  crush-failure-domain=osd
[root@node1 /]# ceph osd erasure-code-profile ls 
default
ecdemo
[root@node1 /]# ceph osd erasure-code-profile get ecdemo
crush-device-class=
crush-failure-domain=osd
crush-root=default
jerasure-per-chunk-alignment=false
k=3
m=2
plugin=jerasure
technique=reed_sol_van
w=8 # 一个编码块可以允许8个数据块# 故障域为5的话,就是切成块分布在5个OSD上面即可,就不会报错了# ecdemo  纠删码的名称
# k=3 3个数据块,m=2 就是2个纠删块# 创建纠删码池
[root@node1 /]# ceph osd pool create pool01 erasure ecdemo
cpool 'pool01' created# 这样的话,就不会报错了,创建的5个数据块,会分布在5个不同的OSD上面即可
[root@node1 /]# ceph pg dump pgs_brief 
PG_STAT  STATE         UP           UP_PRIMARY  ACTING       ACTING_PRIMARY
5.1f     active+clean  [3,6,0,8,1]           3  [3,6,0,8,1]               3
5.1e     active+clean  [7,3,5,4,2]           7  [7,3,5,4,2]               7
5.1d     active+clean  [4,2,6,5,1]           4  [4,2,6,5,1]               4
5.1c     active+clean  [0,1,2,5,6]           0  [0,1,2,5,6]               0
5.1b     active+clean  [0,7,3,1,8]           0  [0,7,3,1,8]               0
5.1a     active+clean  [1,0,2,6,7]           1  [1,0,2,6,7]               1#	k:在不同 OSD 之间拆分的数据区块数量。默认值为 2。
#	m:数据变得不可⽤之前可以出现故障的 OSD 数量。默认值为 1。
#	plugin: 此可选参数定义要使⽤的纠删代码算法。
#	crush-failure-domain:CRUSH 故障域,默认设置为 host
#	crush-device-class: 典型的类别可能包括 hdd、ssd 或nvme。
#	crush-root:此可选参数设置 CRUSH 规则集的根节点。
#	key=value: 插件可以具有对该插件唯⼀的键值参数。
#  technique:每个插件提供⼀组不同的技术来实施不同的算法。

7、纠删码推荐的关系

  1. k和m的关系

    • k值大的话,表示可以使用存储利用率比较的高

    • 利用率的话, k/(k+m)

    • M值大的话,表示冗余率就高

8、删除纠删码规则

# 因此的话,存储池使用该规则的时候,不能被删除
[root@node1 /]# ceph osd erasure-code-profile rm ecdemo
Error EBUSY: pool01 pool(s) are using the erasure code profile 'ecdemo'

9、profile规则

  • 也就是存储池在使用这个规则的时候,不能删除,更改,或者替换成其他的规则

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com