rbd-mirror動手實踐

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名稱必須一致;

相關文章
相關標籤/搜索