3. CEPH的复制池
3.1 创建ceph的复制池
ceph osd pool create pool01 创建一个名为pool01 的复制池
格式: ceph osd pool create
存储池名称 [pg-num] 存储池中PG的数量(默认为32) [pgp-num] 存储池中pgp的数量(默认也是32) pgp 指的是OSD在PG上的排列组合方式 [replicated] 存储池的类型,默认为复制池
3.2 查询存储池的信息
ceph osd pool ls 查看集群中的存储池
ceph osd pool ls detail 查看存储池详情
ceph df 查询存储池的容量
ceph osd df 查询每个osd上的容量
ceph osd pool stats 查询池的性能状态
3.3 存储池的应用类型
应用类型指的是,存储池将来要提供何种存储业务;也就是,到底是块存储池,还是文件系统存储池,还是对象存储的存储池
rbd: 块存储池
cephfs: 文件系统存储池
rgw: 对象存储的存储池
ceph osd pool application enable pool01 rbd 为存储池添加rbd的应用类型(标签)
ceph osd pool application enable pool01 rgw --yes-i-really-mean-it
一个存储池可以有多个标签,通常只有一个标签
ceph osd pool application disable pool01 rgw
移除存储池的指定标签,如果有多个标签,则需要加--yes-i-really-mean-it
3.4 存储池的对象管理
上传对象:
rados -p 存储池名 put 对象名 对象的路径
下载对象:
rados -p 存储池名 get 对象名 对象的存储路径
查看对象:
rados -p 存储池名 ls
删除对象:
rados -p 存储池名 rm 对象名
查询对象存储的OSD
ceph osd map 存储池名 对象名
查询存储池中的PG数量和详情
ceph pg dump pgs_brief|grep ^存储池的ID
3.5 存储池的配额管理
配额方式:对象数量配额、容量配额
查询存储池的配额情况:
ceph osd pool get-quota 存储池名称
max objects: N/A 未开启对象配额
max bytes : N/A 未开启容量配额
设置对象配额
ceph osd pool set-quota pool01 max_objects 3
ceph osd pool set-quota pool01 max_objects 0 解除配额
设置容量配额
ceph osd pool set-quota pool01 max_bytes 10M
ceph osd pool set-quota pool01 max_bytes 0 解除配额
注意: 当存储池的配额触发时(达到时),IO会无限期的延长,直到配额不满足为止;当配额的对象为容量时,只要存储池在上传对象这一刻,没有达到配额,哪怕对象的容量会超过存储池的配额,也可以进行上传(存储池的配额没有达到,则对象可以实现io)
4. 存储池重命名
存储池重命名不会带来数据的任何影响
ceph osd pool rename pool01 cloud #将pool01重命名为cloud
重命名不会引起数据(对象)在OSD上的移动,不会引起 pg的分裂与合并;原因在于存储池的名称不会影响存储池的pg
如果存储池改名,会对上层的业务有一定影响;如果ceph对接了openstack和k8s则需要修改相应的配置文件,k8s 修改csi插件;openstack 修改cinder的配置文件
5. 配置存储池的参数
查看存储池的参数:
ceph osd pool get 存储池名 all #查看存储池的所有参数
ceph osd pool get 存储池名参数名 #查询存储池的指定参数
ceph osd pool set cloud nodelete true #保护存储池不被删除
常用参数:
size: 3 池的副本数量
min_size: 2 池要满足最少副本数才可以接收IO
pg_num: 32 池的pg数量
pgp_num: 32 池的pgp数量
crush_rule: replicated_rule 池的crush 规则
nodelete: false 存储池是否有保护,禁止删除
pg_autoscale_mode: on PG的自扩展开关
设置存储池的参数:
ceph osd pool set 存储池名 参数名值
例子: ceph osd pool set cloud size 2 #将存储池设置为2副本
ceph osd pool set cloud pg_num 35 #将PG的数量调整为35
6.存储池的PG
ceph mgr module enable pg_autoscaler N版以后默认开启
7. 存储池的命名空间
查询存储池的所有命名空间:
rados -p cloud ls --all
如果每个对象的前面显示为空,则该对象在默认的命名空间中,默认的命名空间为空
新建命名空间:
rados -p 存储池名 put 对象名对象路径 -N 命名空间名
查询指定命名空间对象:
rados -p 存储池名 ls -N 命名空间名
rados -p 存储池名 ls -N 命名空间名 --format=json 以json格式进行输出
应用场景: ceph的原生应用,例如用户的相册;或者是用户的网盘空间等都可以使用命名空间进行隔离
8. 删除存储池
必要条件: mon要允许存储池被删除,存储池没有被保护(自身要允许删除)
先设置mon 允许删除存储池:
ceph config set mon mon_allow_pool_delete true
再检查存储池有没有保护:
ceph osd pool get pool02 nodelete
如果值为true,则存储池不允许删除
ceph osd pool set pool02 nodelete false #设置其允许删除
删除存储池:
ceph osd pool delete 存储池名 存储池名 --yes-i-really-really-mean-it
9.纠删码池
创建纠删码池:
ceph osd pool create 存储池名称 erasure
查看纠删码规则:
ceph osd erasure-code-profile ls 查询集群中所有的纠删码规则
纠删码规则的故障域: 默认纠删码规则的故障域为主机,则如果n=4,则4个块会选择四台不同的主机;也就是故障域为主机
自定义纠删码规则:
ceph osd erasure-code-profile set ecdemo k=3 m=2 crush-failure-domain=osd
k:在不同 OSD 之间拆分的数据区块数量。默认值为 2。
m:数据变得不可⽤之前可以出现故障的 OSD 数量。默认值为 1。
plugin: 此可选参数定义要使⽤的纠删代码算法。
crush-failure-domain:CRUSH 故障域,默认设置为 host
crush-device-class: 典型的类别可能包括 hdd、ssd 或nvme。
crush-root:此可选参数设置 CRUSH 规则集的根节点。
key=value: 插件可以具有对该插件唯⼀的键值参数。
纠删码池规则管理:
查看规则:
ceph osd erasure-code-profile ls
查询详细的规则信息:
ceph osd erasure-code-profile get ecdemo
删除规则:
ceph osd erasure-code-profile rm ecdemo
10. 存储池的快照
存储池支持基于对象层的快照,也就是为每一个对象拍摄快照
5.1 创建快照
ceph osd pool mksnap 存储池名 快照名
5.2 查看存储池的快照
rados -p 存储池名lssnap
rados -p 存储池名 -s 快照名 ls #查看快照中的内容
5.3 还原快照
手动还原: 指的是将对象从快照下载到本地,然后重新上传到存储池中
rados -p 存储池名 -s 快照名 get 对象名本地保存路径
rados -p 存储池名 put 对象名本地对象路径
自动还原: 指的是直接将快照中的对象还原到存储池
rados -p 存储池名 rollback 对象名 快照名
生产中暂时还未发现存储池快照案例,都是基于应用进行快照,基于RBD快照,基于文件系统快照,基于对象存储备份或者是双活
提供CDN加速/云存储服务