前言 这个问题是不久前在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 2 3 4 [root@lab8106 ~]# ceph osd pool create testpool1 8 pool 'testpool1' created [root@lab8106 ~]# ceph osd pool create testpool2 8 pool 'testpool2' created
我们在testpool1当中创建一个image,testpool2保留为空
1 [root@lab8106 ~]# rbd -p testpool1 create testimage --size 4000
我们检查下存储池
1 2 3 4 5 6 [root@lab8106 ~]# ceph osd dump ··· pool 5 'testpool1' replicated size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 85 flags hashpspool stripe_width 0 removed_snaps [1~3] pool 6 'testpool2' replicated size 2 min_size 1 crush_ruleset 0 object_hash rjenkins pg_num 8 pgp_num 8 last_change 82 flags hashpspool stripe_width 0 ···
创建了image的存储池多了一个标记 removed_snaps [1~3] ,而没有创建的存储池没有这个标记
我们现在来对两个存储池创建快照
1 2 3 4 [root@lab8106 ~]# ceph osd pool mksnap testpool1 testpool1-snap Error EINVAL: pool testpool1 is in unmanaged snaps mode [root@lab8106 ~]# ceph osd pool mksnap testpool2 testpool2-snap created pool testpool2 snap testpool2-snap
可以看到创建了image的存储池无法创建存储池的快照,因为存储池当前已经为unmanaged snaps mode了,而没有创建image的 就可以做存储池快照
我们再继续创建image,看下会发生什么
1 2 3 4 [root@lab8106 ~]# rbd -p testpool1 create testimag2 --size 4000 [root@lab8106 ~]# rbd -p testpool2 create testimag3 --size 4000 2016-12-13 23:31:58.105932 7fd9cb7fe700 -1 librbd::image::CreateRequest: pool not configured for self-managed RBD snapshot support rbd: create error: (22) Invalid argument
可以看到做了存储池快照的存储池无法创建image了,并且提示了没有配置成self-managed RBD snapshot,创建的时候会去检查是否是自管理模式
这个地方有个配置项目是
rbd_validate_pool = true
我们把这个参数改成false,然后再次创建
1 [root@lab8106 ~]# rbd -p testpool2 create testimag3 --size 4000
就可以创建了
本篇共出现了两次抛错,所以,这个是需要我们去做好选择的,总结下大概是这样的
总结 本篇总结了快照的两个出错的原因,尽量提前做好规划,再去选择哪种