[TOC]
分布式存储ceph创建RBD接口
一 RBD介绍
RBD全称为RADOS Block Device,是一种构建在RADOS集群之上为客户端提供块设备接口的存储服务中间层。这类的客户端包括虚拟机KVM和云计算操作系统OpenStack、CloudStack等。 RBD为条带化,支持存储空间的动态扩容等特性,并可以借助RADOS实现快照,副本和一致性。 客户端访问RBD有两种方式。
-
通过内核模块rbd.ko将镜像映射为本地块设备,通常设置文件一般为:/dev/rbd*
-
另一种是通过librbd接口,KVM虚拟机就是使用这种接口。
二 RBD基本操作
1、创建RBD接口需要创建专门用于RBD的存储池
# 1、先创建一个名为kvm的普通存储池,并指定pg与pgp都为32
ceph osd pool create kvm 32 32
# 2、再将存储池转换为RBD模式
ceph osd pool application enable kvm rbd
# 3、如果自定义过crush rule,请记得为pool指定crush rule,关于crush rule详见《08 ...ceph运维操作》
ceph osd pool set kvm crush_rule egon_rule
2、初始化存储池
rbd pool init -p kvm
3、创建镜像
# 语法:
rbd create --size 5G --pool <pool name> <image name>
# 例如
rbd create --size 1G --pool kvm img1
4、查看镜像
# 查看存储池下存在哪些镜像
rbd ls --pool kvm -l
# 查看某一镜像的详细信息
rbd --image img1 --pool kvm info # 可简写为:rbd info kvm/img1
显示内容注解:
size:镜像的大小与被分割成的条带数。
order 22:条带的编号,有效范围是12到25,对应4K到32M,而22代表2的22次方,这样刚好是4M。
id:镜像的ID标识。
block_name_prefix:名称前缀。
format:使用的镜像格式,默认为2。
features:当前镜像的功能特性。
op_features:可选的功能特性。
5、修改镜像大小
rbd resize --pool kvm --image img1 --size 5G
使用resize就可以调整镜像的大小,一般建议只增不减,如果是减少的话需要加一个选项–allow-shrink,如。
rbd resize --pool kvm --image img1 --size 2G --allow-shrink
6、删除镜像
使用remove或者rm都可以,通常不推荐直接删除镜像,下述方法删除镜像后,镜像将不可恢复。
rbd remove kvm/img1
推荐使用trash命令,这个命令删除是将镜像移动一回收站,如果想找回还可以恢复,如。
rbd trash move <pool name>/<image name>
rbd trash list --pool <pool name>
rbd trash restore <pool name>/<id>
# 例
rbd trash move kvm/img1
rbd trash list --pool kvm
rbd trash restore kvm/5b6376b8b4567
rbd ls --pool kvm -l # 发现还原回来了
三 快照
对rbd镜像进行快照,可以保留镜像的状态历史,另外还可以利用快照的分层技术,通过将快照克隆为新的镜像使用。
3.1 创建快照
rbd snap create --pool <pool name> --image <image name> --snap <snap name>
- –pool:指定哪个存储池。
- –image:指定哪个镜像。
- –snap:指定快照的名称。
还可以使用下面的命令创建快照,更方便,简单。
rbd snap create <pool name>/<image name>@<snap name>
例
rbd snap create kvm/img1@img1_snap1
3.2 查看快照
列出指定镜像所有快照。
rbd snap list <pool name>/<image name>
还可以用json格式输出。
rbd snap list <pool name>/<image name> --format json --pretty-format
例
rbd snap list kvm/img1 --format json --pretty-format
3.3 回滚快照
回滚镜像到指定快照。
rbd snap rollback <pool name>/<image name>@<snap name>
注意: 在回滚快照之需要将镜像取消镜像的映射,然后再回滚。
例
rbd snap rollback kvm/img1@img1_snap1
3.4 限制快照数
限制镜像可创建快照数。
rbd snap limit set <pool name>/<image name> --limit 3
解除限制。
rbd snap limit clear <pool name>/<image name>
3.5 删除快照
删除指定快照。
rbd snap rm <pool name>/<image name>@<snap name>
删除所有快照。
rbd snap purge <pool name>/<image name>
3.6 快照分层
快照分层支持用快照的克隆生成新镜像,这种镜像与直接创建的镜像几乎完全一样,支持镜像的所有操作。唯一不同的是克隆镜像引用了一个只读的上游快照,而且此快照必须要设置保护模式。
快照克隆
- 将上游快照设置为保护模式。
rbd snap protect <pool name>/<image name>@<snap name>
# 例
rbd snap create kvm/img1@img1_snap666
rbd snap protect kvm/img1@img1_snap666
2、克隆快照为新的镜像。
rbd clone <pool name>/<image name>@<snap name> --dest <pool name>/<image name>
# 例
rbd clone kvm/img1@img1_snap666 --dest kvm/img3
- –dest:指定新的镜像名。 克隆完成后可以通过下面命令查看快照的子项。
rbd children <pool name>/<image name>@<snap name>
快照展平
通常情况下通过快照克隆而得到的镜像会保留对父快照的引用,这时候不可以删除该父快照,否则会有影响
rbd snap rm kvm/img1@img1_snap666
# 报错snapshot 'img1_snap666' is protected from removal.
如果要删除快照但想保留其子镜像,必须先展平其子镜像,展平的时间取决于镜像的大小,操作方法如下。
1、展平子镜像。
rbd flatten <pool name>/<image name>
# 例:因为kvm/img3是由快照img1_snap666克隆而来的,所以我们先将它展平
rbd flatten kvm/img3
当展平完成后,正常情况下该快照还是受保护的,无法删除,所以还需要先取消保护。
2、取消快照保护。