rbd的image快照与Pool快照
rbd的image快照与Pool快照
zphj1987前言
这个问题是不久前在ceph社区群里看到的,创建image的时候,当时的报错如下:
2016-12-13 23:13:10.266865 7efbfb7fe700 -1 librbd::image::CreateRequest: pool not configured for self-managed RBD snapshot support
rbd: create error: (22) Invalid argument
这个错我之前也没见过,并且因为很少用到快照,所以可能也就没有触发这个问题,在查看了一些资料以后,明白了原因,这里就梳理一下
Ceph实质上有两种Snapshot模式,并且两种Snapshot是不能同时应用到同一个Pool中。
Pool Snapshot: 对整个Pool打一个Snapshot,该Pool中所有的对象都会受影响
Self Managed Snapshot: 用户管理的Snapshot,简单的理解就是这个Pool受影响的对象是受用户控制的。这里的用户往往是应用如librbd。
上面这段话引用自 麦子迈:解析ceph-snapshot
本篇就将讲述下用两种的互斥是如何实现的,又如何解决
实践
我们创建两个存储池
1 | [root@lab8106 ~]# ceph osd pool create testpool1 8 |
我们在testpool1当中创建一个image,testpool2保留为空
1 | [root@lab8106 ~]# rbd -p testpool1 create testimage --size 4000 |
我们检查下存储池
1 | [root@lab8106 ~]# ceph osd dump |
创建了image的存储池多了一个标记 removed_snaps [1~3] ,而没有创建的存储池没有这个标记
我们现在来对两个存储池创建快照
1 | [root@lab8106 ~]# ceph osd pool mksnap testpool1 testpool1-snap |
可以看到创建了image的存储池无法创建存储池的快照,因为存储池当前已经为unmanaged snaps mode了,而没有创建image的 就可以做存储池快照
我们再继续创建image,看下会发生什么
1 | [root@lab8106 ~]# rbd -p testpool1 create testimag2 --size 4000 |
可以看到做了存储池快照的存储池无法创建image了,并且提示了没有配置成self-managed RBD snapshot,创建的时候会去检查是否是自管理模式
这个地方有个配置项目是
rbd_validate_pool = true
我们把这个参数改成false,然后再次创建
1 | [root@lab8106 ~]# rbd -p testpool2 create testimag3 --size 4000 |
就可以创建了
本篇共出现了两次抛错,所以,这个是需要我们去做好选择的,总结下大概是这样的
总结
本篇总结了快照的两个出错的原因,尽量提前做好规划,再去选择哪种