首页 > 其他分享 >Ceph Reef(18.2.X)之纠删码池

Ceph Reef(18.2.X)之纠删码池

时间:2024-09-10 23:02:13浏览次数:1  
标签:码池 纠删 ceph141 Ceph root osd pool ceph

                                              作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

目录

一.纠删码理论概述

1.纠删码理论概述

纠删码(Enasure Coding,简称"EC")始于20世纪60年代,它是一种数据保护方法。

从原理上说,它将数据分割成片段,把冗余数据扩展,编码,并将其存储在不同的位置,比如磁盘,存储节点或者其他地理位置。

总数据块 = 原始数据块(包含原始数据切片及副本) + 校验块,常见表示为: "N = K + M"。

当冗余级别为N时,将这些数据块分别存储在N个硬盘上,这样就能容忍小于M个(假设初始数据有K个)硬盘发生故障。当磁盘不超过M个硬盘发生故障时,只需任意选取K个正常的数据块就能计算得到所有的原始数据。

在云存储中,我们通常会使用副本的方式来保证系统的可用性。问题是当存储达到PB级别后要求的容量将会非常高,通过纠删码技术可以保证相同可用性的情况下,节省大量存储空间,从而大大的降低TCO(总体成本)。

Ceph从Firefly(对应"0.80.11"版本,2014-05-01~2016-04-01)版本开始支持纠删码。

更多关于纠删码的了解,可参考前面基础教学RAID 5相关的理论说明。

官方文档:
	https://docs.ceph.com/en/reef/rados/operations/erasure-code/

2.ceph纠删码以插件的形式提供

ceph纠删码实现了高速的计算,但有两个缺点:速度慢,只支持对象的部分操作。ceph中ES编码是以插件的形式来提供的。

ES编码有三个指标: 空间利用率,数据可靠性和恢复效率。

Ceph提供以下几种纠删码插件: clay(coupled-layer),jerasure,lrc,shec,isa等。
	- jerasure:
		最为通用的和灵活的纠删码插件,它也是纠删码池默认使用的插件,任何一个OSD成员的丢失,都需要余下的所有OSD成员参与恢复过程。
		使用此类插件时,管理员还可以通过technique选项指定要使用的编码技术:
			- reed_sol_van:
				最灵活的编码技术,管理员仅需提供K和M参数即可。
			- cauchy_good:
				最快的编码技术,但需要小心设置PACKETSIZE参数。
			- reed_sol_r6_op,liberation,blaum_roth或liber8tion:
				仅支持使用m=2的编码技术,公特性类似于RAID 6。
				
	- lrc:
		全称为"Locally Repairable Erasure Code",即本地修复纠删码。
		除了默认的M个编码块之外,它会额外在本地创建指定数量(l)的奇偶校验块,从而在一个OSD丢失时,可以仅通过l个奇偶校验块完成恢复。
		
	- shec:
		shec(k,m,l),k为数据块,m为校验块,l计算校验块时需要的数据块数量。
		
	- isa:
		仅支持运行在Intel CPU之上的纠删码插件,它支持reed_sol_van和cauchy两种技术。

3.纠删码池的优缺点

优点:
	节省存储空间,当有对象数据损坏时,可以起到一定的冗余效果。
	
缺点:
	仅支持对象存储,对于RBD存储则不支持。
	
	
生产环境如何选择呢:
	- 如果是测试环境,且存储的是对象相关数据,则可以考虑使用纠删码池,必经可以节省一定的存储空间。
	- 如果是生产环境,我个人建议还是使用多副本的池,纠删码池咱们了解即可,必经节省空间我们可以考虑使用压缩技术。

二.纠删码基础命令实践

1.列出纠删码配置文件

[root@ceph141 ~]# ceph osd erasure-code-profile ls
default
[root@ceph141 ~]# 

2.查看指定纠删码配置文件的详细信息

[root@ceph141 ~]# ceph osd erasure-code-profile get default
k=2
m=2
plugin=jerasure
technique=reed_sol_van
[root@ceph141 ~]# 

3.自定义纠删配置文件

	1.创建自定义纠删配置文件(如果所需的体系结构必须承受两个OSD的丢失,并且存储开销为40%)
[root@ceph141 ~]# ceph osd erasure-code-profile set yinzhengjie-profile k=4 m=2 crush-failure-domain=osd
[root@ceph141 ~]# 

	2.查看纠删码配置文件列表
[root@ceph141 ~]# ceph osd  erasure-code-profile ls
default
yinzhengjie-profile
[root@ceph141 ~]# 

	3.查看指定纠删码配置文件的详细信息
[root@ceph141 ~]# ceph osd erasure-code-profile get yinzhengjie-profile
crush-device-class=
crush-failure-domain=osd
crush-root=default
jerasure-per-chunk-alignment=false
k=4
m=2
plugin=jerasure
technique=reed_sol_van
w=8
[root@ceph141 ~]# 


语法格式:
		ceph osd erasure-code-profile set <name> [<directory=direcotry>] [<plugin=plugin>] [<crush-device-class-class=crush-device-class>] [<crush-failure-domain=crush-failure-domain>]

相关参数说明:
	- directory:
			加载纠删码插件的目录路径,默认为"/usr/lib/ceph/erasure-code"。
	- plugin:
			用于生成及恢复纠删码的插件名称,默认为"jerasure"。
	- crush-device-class:
			设备类别,例如hdd或者ssd,默认为none(即无视类别),我们可以通过crush来自定义实现。
	- crush-failure-domain:
			故障域,默认为host,支持使用包括: osd,host,rack,row,room等。
	- --force:
			强制覆盖现有的同名配置文件。 

4.创建定制配置的纠删码池

[root@ceph141 ~]# ceph osd pool create erasure-pool-myprofile 8 8 erasure yinzhengjie-profile
pool 'erasure-pool-myprofile' created
[root@ceph141 ~]# 
[root@ceph141 ~]# ceph osd pool ls detail | grep erasure-pool-myprofile  
pool 12 'erasure-pool-myprofile' erasure profile yinzhengjie-profile size 6 min_size 5 crush_rule 1 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 418 lfor 0/0/416 flags hashpspool stripe_width 16384
[root@ceph141 ~]# 
 

命令格式:
	ceph osd pool create <pool-name> <pg-num> <pgp-num> erasure [coasure-code-profile] [cursh-rule-name] ...
	
温馨提示:
	- 1.其中"erasure ... size 6"代表有有6(K+M)个OSD磁盘。	
	- 2.未指定要使用的纠删码配置文件时,创建命令会为其自动创建一个,并在创建相关的CURSH规则集时利用到它。
	- 3.对于N版本的Ceph默认配置文件自动定义K=2和M=1,这意味着ceph将通过三个OSD扩展对象数据,并且可以丢失其中一个OSD而不会丢失数据。因此,在冗余效果上,它相当于一个大小为2的副本池,不过,其存储空间有效利用率为"2/3"而非"1/2"。
	- 4.对于R版本的Ceph默认配置文件自动定义K=2,M=2。

5.基于插件定制就删码配置

	1.基于纠删码算法定制专属配置(创建了一个使用lrc的配置文件"yinzhengjie-LRCprofile",其本地奇偶检验块为3,故障域为OSD。)
[root@ceph141 ~]# ceph osd erasure-code-profile set yinzhengjie-LRCprofile plugin=lrc k=4 m=2 l=3 crush-failure-domain=osd
[root@ceph141 ~]# 
	
	2.查看纠删码配置信息
[root@ceph141 ~]# ceph osd erasure-code-profile ls
default
yinzhengjie-LRCprofile
yinzhengjie-profile
[root@ceph141 ~]# 
[root@ceph141 ~]# ceph osd erasure-code-profile get yinzhengjie-LRCprofile
crush-device-class=
crush-failure-domain=osd
crush-root=default
k=4
l=3
m=2
plugin=lrc
[root@ceph141 ~]# 

	3.创建定制配置的纠删码池
[root@ceph141 ~]# ceph osd pool create erasure-pool-lrcprofile 16 16 erasure yinzhengjie-LRCprofile
pool 'erasure-pool-lrcprofile' created
[root@ceph141 ~]# 

	4.查看效果
[root@ceph141 ~]# ceph osd pool ls detail | grep yinzhengjie-LRCprofile
pool 13 'erasure-pool-lrcprofile' erasure profile yinzhengjie-LRCprofile size 8 min_size 5 crush_rule 2 object_hash rjenkins pg_num 16 pgp_num 16 autoscale_mode on last_change 422 flags hashpspool,creating stripe_width 16384
[root@ceph141 ~]# 

三.纠删码池的数据实践和异常实践

1.纠删码池数据实践

1.1 创建纠删码池并测试读写

	1.创建纠删码池
[root@ceph141 ~]# ceph osd  pool create jasonyin 16 16 erasure
pool 'jasonyin' created
[root@ceph141 ~]# 

	2.查看存储池
[root@ceph141 ~]# ceph osd  pool ls detail | grep jasonyin
pool 14 'jasonyin' erasure profile default size 4 min_size 3 crush_rule 3 object_hash rjenkins pg_num 16 pgp_num 16 autoscale_mode on last_change 453 flags hashpspool stripe_width 8192
[root@ceph141 ~]# 

	3.往存储池上传文件
[root@ceph141 ~]# rados put hosts /etc/hosts -p jasonyin
[root@ceph141 ~]# 
[root@ceph141 ~]# rados ls -p jasonyin
hosts
[root@ceph141 ~]# 

	4.下载文件
[root@ceph141 ~]# rados get hosts myhosts -p jasonyin
[root@ceph141 ~]# 
[root@ceph141 ~]# cat myhosts 
127.0.0.1 localhost
127.0.1.1 yinzhengjie

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
10.0.0.141 ceph141
10.0.0.142 ceph142
10.0.0.143 ceph143
172.30.100.142 www.yinzhengjie.com
[root@ceph141 ~]# 


	5.基于标准输入上传文件到存储池
[root@ceph141 ~]# echo "ABCDEFGHIJKLMNOPQRSTUVWXYZ" | rados -p jasonyin put uppercase.txt -


	6.读取数据并输出到终端
[root@ceph141 ~]# rados ls -p jasonyin
hosts
uppercase.txt
[root@ceph141 ~]# 
[root@ceph141 ~]# rados get uppercase.txt -p jasonyin -
ABCDEFGHIJKLMNOPQRSTUVWXYZ
[root@ceph141 ~]# 

1.2 纠删码池不支持部分image功能

	1.启用RBD功能
[root@ceph141 ~]# ceph osd pool application enable jasonyin rbd
enabled application 'rbd' on pool 'jasonyin'
[root@ceph141 ~]# 

	
	2.创建image操作
[root@ceph141 ~]# rbd create wordpress -p jasonyin -s 2048  # 很明显,创建rbd时无法自动指定镜像特性
2024-09-07T08:15:21.832+0800 7fb36bfff640 -1 librbd::image::ValidatePoolRequest: handle_overwrite_rbd_info: pool missing required overwrite support
2024-09-07T08:15:21.832+0800 7fb36bfff640 -1 librbd::image::CreateRequest: 0x562675e49260 handle_validate_data_pool: pool does not support RBD images
rbd: create error: (22) Invalid argument
[root@ceph141 ~]# 

温馨提示:
	纠删码池主要作用针对是对象,比如rgw使用纠删码池还是蛮多的,但是rbd用的并不多。因此就删码不支持RBD images的参数操作。

2.纠删码池异常实践

2.1 创建纠删码池

[root@ceph141 ~]# ceph osd erasure-code-profile get yinzhengjie-profile
crush-device-class=
crush-failure-domain=osd
crush-root=default
jerasure-per-chunk-alignment=false
k=4
m=2
plugin=jerasure
technique=reed_sol_van
w=8
[root@ceph141 ~]# 
[root@ceph141 ~]# ceph osd pool create xixi 16 16 erasure yinzhengjie-profile
pool 'xixi' created
[root@ceph141 ~]# 
[root@ceph141 ~]# ceph osd pool ls detail | grep xixi
pool 15 'xixi' erasure profile yinzhengjie-profile size 6 min_size 5 crush_rule 4 object_hash rjenkins pg_num 16 pgp_num 16 autoscale_mode on last_change 480 flags hashpspool stripe_width 16384
[root@ceph141 ~]# 

2.2 上传测试文件,并查看对应的映射信息

[root@ceph141 ~]# rados put fstab /etc/fstab -p xixi
[root@ceph141 ~]# 
[root@ceph141 ~]# rados ls -p xixi
fstab
[root@ceph141 ~]# 
[root@ceph141 ~]# ceph osd map xixi fstab
osdmap e480 pool 'xixi' (15) object 'fstab' -> pg 15.45a53d91 (15.1) -> up ([3,1,2,0,4,5], p3) acting ([3,1,2,0,4,5], p3)
[root@ceph141 ~]# 

2.3 根据映射信息停止映射的任意OSD节点

[root@ceph141 ~]# ceph orch daemon stop osd.5
Scheduled to stop osd.5 on host 'ceph143'
[root@ceph141 ~]# 
[root@ceph141 ~]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME         STATUS  REWEIGHT  PRI-AFF
-1         1.46489  root default                               
-3         0.48830      host ceph141                           
 0    hdd  0.19530          osd.0         up   1.00000  1.00000
 1    hdd  0.29300          osd.1         up   1.00000  1.00000
-5         0.48830      host ceph142                           
 2    hdd  0.19530          osd.2         up   1.00000  1.00000
 4    hdd  0.29300          osd.4         up   1.00000  1.00000
-7         0.48830      host ceph143                           
 3    hdd  0.29300          osd.3         up   1.00000  1.00000
 5    hdd  0.19530          osd.5       down   1.00000  1.00000
[root@ceph141 ~]# 

2.4 再次查看映射信息并查看数据能够正常读取

[root@ceph141 ~]# ceph osd map xixi fstab
osdmap e482 pool 'xixi' (15) object 'fstab' -> pg 15.45a53d91 (15.1) -> up ([3,1,2,0,4,NONE], p3) acting ([3,1,2,0,4,NONE], p3)
[root@ceph141 ~]# 
[root@ceph141 ~]# rados ls -p xixi
fstab
[root@ceph141 ~]# 
[root@ceph141 ~]# rados get fstab /tmp/fb -p xixi
[root@ceph141 ~]# 
[root@ceph141 ~]# cat /tmp/fb 
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/ubuntu-vg/ubuntu-lv during curtin installation
/dev/disk/by-id/dm-uuid-LVM-o76xLmF5JF2s58eBv4xdQGfddG6HnRVYRSidGXsaDDAi5krFpwANJdmCQC56uDoK / ext4 defaults 0 1
# /boot was on /dev/sda2 during curtin installation
/dev/disk/by-uuid/e4ff435b-e5ed-49f7-bb96-97e86dc230aa /boot ext4 defaults 0 1
/swap.img       none    swap    sw      0       0
[root@ceph141 ~]# 
[root@ceph141 ~]# 

温馨提示:
	很明显此时是可以正常读取的。

2.5 再停止任意一台OSD

[root@ceph141 ~]# ceph orch daemon stop osd.4
Scheduled to stop osd.4 on host 'ceph142'
[root@ceph141 ~]# 
[root@ceph141 ~]# ceph osd tree
ID  CLASS  WEIGHT   TYPE NAME         STATUS  REWEIGHT  PRI-AFF
-1         1.46489  root default                               
-3         0.48830      host ceph141                           
 0    hdd  0.19530          osd.0         up   1.00000  1.00000
 1    hdd  0.29300          osd.1         up   1.00000  1.00000
-5         0.48830      host ceph142                           
 2    hdd  0.19530          osd.2         up   1.00000  1.00000
 4    hdd  0.29300          osd.4       down   1.00000  1.00000
-7         0.48830      host ceph143                           
 3    hdd  0.29300          osd.3         up   1.00000  1.00000
 5    hdd  0.19530          osd.5       down   1.00000  1.00000
[root@ceph141 ~]# 

2.6 再次观察是否可以正常读取数据

[root@ceph141 ~]# ceph osd map xixi fstab
osdmap e489 pool 'xixi' (15) object 'fstab' -> pg 15.45a53d91 (15.1) -> up ([3,1,2,0,NONE,NONE], p3) acting ([3,1,2,0,NONE,NONE], p3)
[root@ceph141 ~]# 
[root@ceph141 ~]# rados ls -p xixi  # 会阻塞在当前终端,无法读取数据。


温馨提示:
	- 此时由于坏了2个OSD,且坏掉的OSD并没有空闲的,在其他节点无法重新创建,因此无法进行数据的读取。
	- 实际生产使用中,若还有空闲的OSD可能会立刻创建出来新的数据,从而导致数据是可以正常访问的,但咱们的案例中,OSD已经被咱们用完了。

标签:码池,纠删,ceph141,Ceph,root,osd,pool,ceph
From: https://www.cnblogs.com/yinzhengjie/p/18407445

相关文章

  • ceph:nfs-ganesha V4-stable:手工编译:make rpm 打包成rpm包,USE_GSS总是打开的问题,bug?
    如题:不管你怎么去配置cmake,makerpm生成的版本总是Debug版、总是使用GSS,why? 一开始,本人试图从cmake上去寻找答案,未果!!无论如何配置,makerpm它总是从头执行cmake...make..后来......最后,突然想到,没准makerpm是从头生成并调用的cmake,+++而且rpm包的生成一般是依赖于......
  • ceph:麒麟kylin v10 sp3:安装ceph-nautilus for el8:这个版本依赖于python3.6,看看怎么欺
    [root@kylintemplate~]#catceph-nautilus-el8_depends-for-kylin.specSummary:ceph-nautilus-el8_depends-for-kylinvirtualName:ceph-nautilus-el8_depends-for-kylinVersion:1.0Release:0License:GPLGroup:Development/ToolsAutoReqProv:yesAutoReq:ye......
  • ceph:源代码编译 nfs-ganesha 2.8.4 (V2-stable)
     step1:从github下载nfs-ganesha(标签2.8.4或分支V2-stable)同时下载相应代码库中指定的版本的libntirpc库代码!注意版本一致。注意ntirpc放到src目录中,要改名为libntirpc或直接做个符号链接libntirpc。 step2:根据你自己的要求或希望的功能,安装依赖 step3:cmake生......
  • 每天5分钟复习OpenStack(十五)Ceph与Bcache结合
    上一章我们成功部署了bcache,这一章我们将Ceph与Bcache结合来使用,使用Bcache来为ceph的数据盘提速。1ceph架构一个标准的ceph集群可能是如下的架构,SSD/NVME存储元数据,而SATA盘存储数据。这样的架构下,物理介质的SATA盘读写速率上限决定了存储集群Ceph的上限(木桶效应)。如果在......
  • ceph:通过传统用户空间 tgtd 工具 以 iscsi 方式使用ceph rdb设备
    如题:安装用户空间的iscsitarget工具。以麒麟v10为例:首先,安装以下iscsitarget工具 然后,配置/etc/tgt/targets.conf,配置cephrbd后端请注意:最核心的配置其实是“bsopts”!根据“scsi-target-utils-rbd”的相关说明文档,可通过配置“bsopts”来制定ceph.conf配置文件的位置。......
  • K8s使用cephfs(静态和动态两种)
    一、K8s节点安装ceph-commonCephFS是Ceph中基于RADOS(可扩展分布式对象存储)构建,通过将文件数据划分为对象并分布到集群中的多个存储节点上来实现高可用性和可扩展性。首先所有k8s节点都需要安装ceph-common工具:yum-yinstallepel-releaseceph-common二、静态供给方......
  • 云原生存储Rook部署Ceph
            Rook是一款云原生存储编排服务工具,Ceph是一种广泛使用的开源分布式存储方案,通过Rook可以大大简化ceph在Kubernetes集群中的部署和维护工作。        Rook由云原生计算基金会(CNCF)孵化,且于2020年10月正式进入毕业阶段。Rook并不直接提......
  • Ceph Reef(18.2.X)之对象访问策略配置
    作者:尹正杰版权声明:原创作品,谢绝转载!否则将追究法律责任。目录一.对象存储概述1.对象存储的访问方式2.基于http方式访问对象存储注意事项3.查看存储桶默认策略二.定制策略1.定制......
  • ceph:纯手工配置osd磁盘及服务
     #######################################################################准备ceph用户环境(shell、homedir)准备ceph的相关父目录准备ceph.confceph.client.admin.keyring主备相同容量的整个磁盘、一个裸分区、一个lvm逻辑分区;或一个posix文件系统目录特别提醒:ceph用户需......
  • ceph:纯手动配置mon
    准备:mon的keyringcd/etc/cephceph-authtool-Cceph.keyring-g-n'mon.'--capmon'allow*'--caposd'allow*'--capmgr'allow*'--capmds'allow*'ceph-authtoolceph.keyring-l#vi编辑这个ceph.key......