Ceph分布式存储系列(四):Pool相关命令及池快照snapshot的创建删除与回滚恢复

Pool简介:

pool是ceph存储数据时的逻辑分区,它起到namespace的作用。每个pool包含一定数量(可配置) 的PG。PG里的对象被映射到不同的Object上。pool是分布到整个集群的。 pool可以做故障隔离域,根据不同的用户场景不统一进行隔离。

支持两种类型:副本(replicated)和 纠删码( Erasure Code)

  • 副本(replicated):即复制,例如三副本,即为该Pool内的PG会复制三份
  • 纠删码(Erasure Code):是一种编码容错技术。在数据存储中,纠删码将数据分割成片段,把冗余数据块扩展和编码,并将其存储在不同的物理位置。

具体原理及相关内容请查看Ceph分布式存储系列(一):Ceph工作原理及架构浅析梳理

一、首先来了解下Pool的常用命令
1.列出存储池
ceph osd lspools
ceph osd pool ls
rados lspools
2.创建存储池

默认创建的即为3副本的存储池

副本类型:ceph osd pool create {pool-name} {pg_num} {pgp_num} {replicated}  ...
纠删码类型:ceph osd pool create {pool-name} {pg_num} {pgp_num} erasure  ...
eg:
	ceph osd pool create test-pool 64 64

常用参数:

  • pool-name 池的名称,必须是唯一的,必填选项
  • pg_num 池的归置组pg总数,必填选项
  • pgp_num 用于放置归置组的放置组数量,数量和pg_num等同,必填
  • replicated 副本数,默认为3,即一个文件底层会创建三个一模一样的对象副本,可选
  • erasure 纠删码类型,可选
3.将池关联到应用程序
ceph osd pool application enable {pool-name} {application-name}
4.设置池配额
ceph osd pool set-quota {pool-name} [max_objects {obj-count}] [max_bytes {bytes}]
eg:
    ceph osd pool set-quota data max_objects 10000

如果要删除配额,那么将配额设置为0即可

5.删除池
ceph osd pool delete/rm {pool-name} [{pool-name} --yes-i-really-really-mean-it]

要删除池,必须在/etc/ceph/ceph.conf中mon的配置中将mon_allow_pool_delete标志设置为true

6.重命名池
ceph osd pool rename {current-pool-name} {new-pool-name}
7.显示池统计信息
rados df     ##显示池的利用率统计信息
ceph df      ##显示整个集群的所有磁盘利用率信息-包含池信息
ceph osd pool stats [{pool-name}]	##显示指定池统计信息
8.制作池快照
ceph osd pool mksnap {pool-name} {snap-name}
或 rados mksnap -p {pool-name} {snap-name}
9.查看池快照
rados lssnap -p {pool-name}
或 ceph osd dump |grep snap
10.删除池快照
ceph osd pool rmsnap {pool-name} {snap-name}
或 rados rmsnap -p {pool-name} {snap-name}
11.调整池选项值
ceph osd pool set {pool-name} {key} {value}
eg:
    ceph osd pool set test-pool size 3

常用值:

  • size 设置池中对象的副本数
  • pg_num 设置归置组数量
  • pgp_num 设置放置归置组的放置组数量
12.获取指定池的选项值
ceph osd pool get {pool-name} {key}
eg:
    ceph osd pool get test-pool size
二、Pool快照的使用

Pool不仅可以实现故障域的隔离,同样也支持快照的功能,接下来我们就来测试一下

首先来了解一下rados对于object的相关命令(object 即ceph最小单位- 文件

[root@ceph-node1 ~]# rados --help |grep put
   put <obj-name> <infile> [--offset offset]
        set the block size for put/get ops and for write benchmarking
        set the object size for put/get ops and for write benchmarking
        Available for stat, get, put, truncate, rm, ls and
        prefix output with date/time

由此可知,我们可以将测试文件导入至池中

格式为:rados put {object-name} {file-name}
	eg:rados -p test-pool put test-object /root/test-file

使用参数:-p 指定池

下面正式开始测试

1.创建池
[root@ceph-node1 ~]# ceph osd pool create test-pool 64 64
pool 'test-pool' created
2.本地创建一个测试文件
[root@ceph-node1 ~]# echo "Hello World" > test-object
3.将测试文件导入至新创建的池中,并指定一个新的object名
[root@ceph-node1 ~]# rados -p test-pool put test-object /root/test-file
4.查看pool中的object文件
[root@ceph-node1 ~]# rados -p test-pool ls
test-object
5.创建pool快照
[root@ceph-node1 ~]# rados -p test-pool mksnap snap01
created pool test-pool snap snap01
6.查看快照
[root@ceph-node1 ~]# rados -p test-pool lssnap
1       snap01  2020.11.02 17:01:39
1 snaps
7.删除文件
[root@ceph-node1 ~]# rados -p test-pool rm test-object
8.再次查看pool下文件
[root@ceph-node1 ~]# rados -p test-pool ls
test-object
[root@ceph-node1 ~]# rados -p test-pool rm test-object
error removing test-pool>test-object: (2) No such file or directory

############################扩展研究#################################
根据上边输出可看出,虽然确实已经删除文件,但是这个池中还是有这个object文件存在。
个人感觉实际上已经不再占存储空间,相当于是一个缓存的输出,或者就是因为快照保存着这些文件,故这些已删除的还会显示出来,代表这些文件存在于快照当中

那么我们来验证一下,测试删除没有存在于快照中的文件(即做快照之后新创建的文件)

[root@ceph-node1 ~]# rados -p test-pool put test-object1 /root/test-file
[root@ceph-node1 ~]#
[root@ceph-node1 ~]# rados -p test-pool rm test-object1
[root@ceph-node1 ~]# rados -p test-pool ls
test-object

结果显示 不存在于快照中的文件,删除完之后重新就不存在了,所以猜测的方向应该大致正确

进一步思考,既然在删除object后,ls输出显示的内容大概率是因为快照而存在的,那么如果在删除文件后,再删除快照,文件是否还会显示呢?还是来实验一波!

[root@ceph-node1 ~]# rados -p test-pool rm test-object1
error removing test-pool>test-object1: (2) No such file or directory
[root@ceph-node1 ~]# rados -p test-pool ls
test-object
[root@ceph-node1 ~]#
[root@ceph-node1 ~]# rados -p test-pool lssnap
1       snap01  2020.11.02 17:48:03
1 snaps
[root@ceph-node1 ~]#
[root@ceph-node1 ~]# rados -p test-pool rmsnap snap01
removed pool test-pool snap snap01
[root@ceph-node1 ~]# rados -p test-pool ls
[root@ceph-node1 ~]#

根据以上命令输出,可以明显看出删除快照后,那个虚假的object文件也不见了,所以也就进一步论证了上边的结论:删除快照后ls查询仍然存在的虚假文件是因快照而存在的。

PS:只是个人测试,没找到官方说明,稳一手,只能说大概率是这样的~~

################################################################

接下来继续回到实验快照的回滚恢复功能

9.删除pool池中的test-object文件后,回滚测试
[root@ceph-node1 ~]# rados -p test-pool rollback test-object snap01
rolled back pool test-pool to snapshot snap01
[root@ceph-node1 ~]# rados -p test-pool ls
test-object

根据ls输出显示看不出什么,所以我们来再删除测试一下

10.删除object测试
[root@ceph-node1 ~]# rados -p test-pool rm test-object
[root@ceph-node1 ~]#

可见已经可以正常删除,即代表文件通过快照已恢复,代表快照回滚恢复功能正常,到这里快照测试也就结束了

最后的最后,得出一个结论:
    Pool池的快照,相对来说是有局限性的,没办法直接恢复快照里边全部object对象文件,只能一个个来恢复,保存点密码文件应该还是可以的。这样的设计效果,猜测有可能是因为如果pool池直接整体恢复,会导致整个ceph集群数据混乱,毕竟集群中数据是分布式存放的!

End……

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值