Ceph rbd快照,rbd-clone,rbd-mirror特性

块是一个字节序列。基于块的存储接口是最常见的存储数据方法。ceph的块可以作为虚拟机的块设备映像,常见的使用方法就是用于OpenStack或CloudStack。Ceph的块设备支持精简配置、大小可调并且能将数据条带化存储到集群的多个OSD中。Ceph的rbd块设备使用内核模块或librbd库与OSD交互。 文档主要讲解ceph rbd块的快照、克隆、镜像这几个功能,并分别对这些功能在ceph 10.2的版本上做演示。

一、rbd快照

快照是rbd映像在某个时间点的一份只读的副本。Ceph的快照功能支持多种高级接口,包括 QEMU 、 libvirt 、 OpenStack 和 CloudStack 。由于基于COW(写时复制)来实现,故Ceph支持秒级别的快照创建。具体工作原理如下: 1、向monitor发送请求,获取一个最新的快照的序列号snap_seq 2、把这个块的snap_name和snap_seq保存到rbd的元数据中 因为只更新了卷的元数据,添加了一些快照信息,并没有触发后台的OSD数据,所以创建快照的速度很快。每次做完快照后再对卷进行写入时就会触发COW操作,即先拷贝出原数据块的对象,然后对原数据对象进行写入。

1.1 创建快照

创建快照之前需要创建一个rbd块 # rbd ceshi --size 1024 -p rbd 用 rbd 命令创建快照,要指定 snap create 选项、存储池名和映像名 # rbd snap create rbd/ceshi@ceshi.bak 列出ceshi这个块的所有快照,需要指定存储池名和映像名。 # rbd snap ls rbd/ceshi

1.2回滚快照

用命令回滚快照,指定 snap rollback 选项、存储池名、映像名和快照名 # rbd snap rollback rbd/ceshi@ceshi.bak

1.3删除快照

要删除快照,指定 snap rm 选项、存储池名、映像名和快照名 # rbd snap rm rbd/ceshi@ceshi.bak

1.4分层快照

分层快照使得ceph可以很快的创建很多映像。例如你可以先创建一个rbd块,然后将这个块做成快照,通过分层快照的功能,将这个rbd块克隆成多个rbd块设备,分层快照是rbd块克隆的基础。

二、rbd克隆

rbd克隆,就是基于分层快照,新建一个rbd,为这个rbd创建快照,然后用这个快照作为父快照,通过这个父快照来克隆子快照。各个克隆出来的子快照都存储着对父映像的引用,这使得克隆出来的映像可以打开父映像并读取它。一个快照的 COW 克隆和其它任何 Ceph 块设备映像的行为完全一样。克隆出的映像没有特别的限制,你可以读出、写入、克隆、调整克隆映像的大小。然而子快照的写时复制克隆引用了父快照,所以你克隆子快照前必须保护父快照。

1.1 保护父快照

在做rbd克隆之前,必须有个映像、必须为它创建快照、并且必须保护快照,执行过这些步骤后,你才能克隆快照 # rbd snap protect rbd/ceshi@ceshi.bak

1.2克隆快照

要克隆快照,需要指定父存储池、父映像名和快照,还有子存储池和子映像名。克隆前必须先保护快照 # rbd clone rbd/ceshi@ceshi.bak rbd/aaa 罗列一个父快照的子快照 # rbd children rbd/ceshi@ceshi.bak 解除子快照的依赖关系 克隆出来的映像仍保留了对父快照的引用。要从子克隆删除这些到父快照的引用,你可以把快照的信息复制给子克隆 # rbd info aaa 如果你想删除父快照,必须先要取消快照保护,并且不能删除被克隆映像引用的父快照,所以要先解除子快照的依赖关系,然后取消快照保护,命令为: # rbd snap unprotect rbd/ceshi@ceshi.bak

三、rbd镜像

为保证数据的安全性,Ceph只在所有副本都写入的时候才认为一个写操作完成,这个在性能上是无法接受的,所以目前ceph面临的一个问题就是无法跨区域部署ceph集群。而rbd镜像的功能能够做到在不同区域的集群之间复制块设备,以此达到备份的效果。备份是主备模式的备份,其实这个只是看怎么应用了,在里面是自动实现的主主的模式,双向同步的,只是在应用中需要注意不要去同时操作同一个image,这个功能是作为主备去使用的,以备真正有问题的时候去实现故障恢复,这个同步是异步的。 在ceph发布的Jewel 10.1.0版本中引入了rbd的mirror功能,目的是在不同的ceph集群中同步rbd设备上的数据。 RBD镜像的实现依赖于RBD镜像的两个新特性: ?1.日志特性: 为作用在镜像上的每一个事务启用日志 ?2.镜像特性: 通过这个明确的告诉?rbd-mirror?进程复制这个镜像 镜像模式有两种:pool和image Pool: 当配置池模式,池中所有的开启了日志属性的image都启用了镜像 Image: 当配置image模式,需要在每个image上显式地启用镜像

3.1 新增的守护进程

一个新的守护进程:rbd-mirror将负责把一个集群的镜像同步到另一个集群。在这两集群中都需要配置守护进程,它会同时连接本地和远程集群。集群间通过配置文件、用户和密钥来连接到其他Ceph集群(找到monitors)。使用admin用户也是可以的。rbd-mirror的守护进程使用cephx机制与monitors进行身份验证,这是常用也是默认的方法。

3.2 rbd-mirror功能实践

以下操作在ceph 10.2版本上进行 ?local集群:node06(192.168.0.127),node07,mon在node06上 ?remote集群:node08(192.168.0.129),node09,mon在node08上 先安装rbd-mirror,在两个集群节点上输入yum install rbd-mirror -y

3.2.1 准备集群名称为local的配置文件

在node06上执行,创建集群名字是local的相关文件,并将其拷贝到node08机器上 cp /etc/ceph/ceph.conf /etc/ceph/local.conf cp /etc/ceph/ceph.client.admin.keyring /etc/ceph/local.client.admin.keyring cp /etc/ceph/ceph.mon.keyring /etc/ceph/local.mon.keyring scp /etc/ceph/ceph.conf node08:/etc/ceph/local.conf scp/etc/ceph/ceph.client.admin.keyring node08:/etc/ceph/local.client.admin.keyring 在node08上执行,创建集群名字是remote的相关文件,并将其拷贝到node08机器上 cp /etc/ceph/ceph.conf /etc/ceph/remote.conf cp /etc/ceph/ceph.client.admin.keyring /etc/ceph/remote.client.admin.keyring cp /etc/ceph/ceph.mon.keyring /etc/ceph/remote.mon.keyring scp /etc/ceph/ceph.conf node06:/etc/ceph/remote.conf scp/etc/ceph/ceph.client.admin.keyring node06:/etc/ceph/remote.client.admin.keyring

3.2.2 检验上面设置是否完成

在node06执行,检查通过—cluster参数是否可以查看相关集群信息 # ceph --cluster local mon stat e1: 1 mons at {node06=192.168.0.127:6789/0}, election epoch 3, quorum 0 node06 # ceph --cluster remote mon stat e1: 1 mons at {node08=192.168.0.129:6789/0}, election epoch 3, quorum 0 node08 在node08执行,检查通过—cluster参数是否可以查看相关集群信息 # ceph --cluster local mon stat e1: 1 mons at {node06=192.168.0.127:6789/0}, election epoch 3, quorum 0 node06 # ceph --cluster remote mon stat e1: 1 mons at {node08=192.168.0.129:6789/0}, election epoch 3, quorum 0 node08

3.2.3开启镜像功能,使用存储池模式

在node06上执行 rbd --cluster local mirror pool enable rbd pool 在node08上执行 rbd --cluster remote mirror pool enable rbd pool 如果需要关闭那么执行 rbd --cluster local mirror pool disable rbd rbd --cluster remote mirror pool disable rbd

3.2.4 为存储池添加peer进程

相关命令: rbd mirror pool peer add {pool-name} {client-name}@{cluster-name}?,这里{client_name}使用admin这个账户就可以了 在node06上执行添加命令 # rbd --cluster local mirror pool peer add rbd client.admin@remote 09021a38-534c-489c-bc6c-68a9862d51a1 在node08上执行添加命令 # rbd --cluster remote mirror pool peer add rbd client.admin@local 1761888e-330e-4f34-aa74-2e30ac9437cf 如果需要删除peer,请使用下面命令 rbd mirror pool peer remove {pool-name} {peer-uuid}

3.2.5启动rbd-mirror守护进程

在node06上执行开启进程命令 #rbd-mirror -f --cluster local --setuser ceph --setgroup ceph & 在node08上执行开启进程命令 #rbd-mirror -f --cluster remote --setuser ceph --setgroup ceph &

3.2.6 查看rbd-mirror状态

在node06上查看状态 Rbd mirror pool info rbd Rbd mirrot pool status rbd 在node08上查看状态 Rbd mirror pool info rbd Rbd mirrot pool status rbd 到此rbd-mirror环境已经成功搭建完毕

3.2.7 验证是否生效

在node06上创建块设备 #rbd create rbd/testrbd --size 10240 --image-feature exclusive-lock, journaling 在remote集群中查看rbd中的块设备信息 此时在remote集群中可以看到刚刚在local集群中创建出来的testrbd块设备,因为这个镜像是备份镜像,相当于是个副本,属性是只读的,所以不允许挂载,想要在remote集群上挂载该镜像需要对该镜像升级,升级为主镜像。 当image首次启用mirror功能时,image自动升级为主镜像,并且是可写的,而远端的备份镜像则会持有一个锁。锁意味着这个镜像在被晋升为主且原来的主降级(rbd mirror image demote)之前是不能写的(只读模式)。因此这也是晋升和降级功能的由来。一旦备份镜像晋升为主,原来的主镜像将被降级为副。这意味着同步将会以相反的方式进行(副变成主,同时向原来是主而现在是副的镜像执行同步操作)。

3.2.8 镜像的升级与降级

在故障恢复的情况下,主image需要同步到peer的集群(备份集群),源image应该停止(例如关闭VM或从一个虚拟机中删除相关驱动),将目前主image降级,将备份image升级为新的主image,将image恢复到另一个集群。升降级操作可以参考下面的截图: 当块设备镜像主特性:mirroring primary:ture时,该块设备可以被降级不能被升级,为false时,该块设备可以被升级

3.3 存在的问题

在官网上了解到,目前的rbd镜像只能支持一对一的备份,暂时还不支持一对N的备份方式,在之后的正式版本中会完善这个功能。

posted on 2016-11-07 13:00  歪歪121  阅读(757)  评论(0)    收藏  举报