rbd-mirror是jewel版本新加入的一个特性,目的是在不一样的ceph集群中同步rbd设备上的数据。linux
rbd-mirror的内部实现以下图所示:oop
在两个相互独立的ceph集群中分别多了一个守护进程rbd-mirror,该守护进程负责同步rbd设备上的数据。rbd-mirror的主要处理流程以下图所示:测试
用户操做块设备向块设备中写入数据时,librbd首先将写操做写入日志,当日志写入完毕后应答用户写操做完毕。以后日志向本地块设备写入数据,于此同时日志经过rbd-mirror守护进程将日志发送到对端ceph集群。对端ceph集群将日志内容写入到块设备中,由此完成块设备的同步功能。由此看到rbd-mirror的核心在于rbd-mirror守护进程和块设备写入的日志。.net
rbd-mirror动手实践部分以下:日志
一、集群环境。blog
rbd-mirror的测试环境采用手动编译ceph源代码的方式安装并配置ceph集群,具体操做过程请参考http://my.oschina.net/linuxhunter/blog/682013。集群名称分别是ceph和ceph2。测试rbd-mirror使用的用户是各自集群中的admin用户(固然能够自行建立一个专门为rbd-mirror的特定用户)。进程
二、rbd-mirror设置。get
1)复制ceph配置文件和admin用户的keyring到对端ceph集群。同步
将ceph集群中的ceph.conf和ceph.client.admin.keyring复制到ceph2集群中的/etc/ceph目录下,于此同时将ceph2集群中的ceph2.conf和ceph2.client.admin.keyring复制到ceph集群中。这样ceph集群能够查看ceph2集群的状态,ceph2集群也能够查看ceph集群的状态。编译
2)在两个ceph集群中建立相同名称的pool。
#rbd --cluster ceph osd pool create image-pool 64 64
#rbd --cluster ceph2 osd pool create image-pool 64 64
3)使能mirror功能。
#rbd --cluster ceph mirror pool enable image-pool pool
#rbd --cluster ceph2 mirror pool enable image-pool pool
4)添加cluster peer。
#rbd --cluster ceph mirror pool peer add image-pool client.admin@ceph2
#rbd --cluster ceph2 mirror pool peer add image-pool client.admin@ceph
5)启动rbd-mirror守护进程。
#rbd-mirror -f --cluster ceph --setuser ceph --setgroup ceph
#rbd-mirror -f --cluster ceph2 --setuser ceph --setgroup ceph
6)查看rbd-mirror状态。
#rbd --cluster ceph mirror pool info
Mode: image
Peers:
UUID NAME CLIENT
30018a0a-52b6-499e-b8f2-174d61eeeafe ceph2 client.admin
#rbd --cluster ceph mirror pool status
health: OK
images: 0 total
到此rbd-mirror环境已经成功搭建完毕。
三、rbd-mirror测试。
1)在ceph集群中image-pool中建立一个块设备。
#rbd --cluster ceph create image-pool/test1 --size 10240 --image-feature exclusive-lock, journaling
2)向ceph集群中image-pool中的块设备写入数据。
#mkdir -p /tmp/rbd
#rbd-fuse -p image-pool /tmp/rbd
#mkfs.ext4 /tmp/rbd/test1
#mount -o loop /tmp/rbd/test1 /mnt/
#echo "hello, world" > /mnt/test.txt
#umount /mnt
#fusermount -u /tmp/rbd
3)在ceph2集群中查看image-pool中的块设备信息。
#rbd --cluster ceph2 -p image-pool ls
test1
此时在ceph2集群中就能够看到刚刚在ceph集群中建立出来的test1块设备;
4)在ceph2集群中挂载块设备且查看块设备中的内容。
#mkdir -p /tmp/rbd
#rbd-fuse -p image-pool /tmp/rbd
#mount -o loop /tmp/rbd/test1 /mnt
#ls /mnt/
test1.txt
#cat /mnt/test1.txt
hello,world
#umount /mnt
#fusermount -u /tmp/rbd
四、补充说明。
1)当前版本的rbd-mirror功能只支持集群之间一对一的mirror,并不支持一对多的mirror;
2)作rbd-mirror的两个集群的pool名称必须一致;