009 Ceph RBD增量備份與恢復


一、RBD的導入導出介紹

Ceph存儲可以利用快照做數據恢復,但是快照依賴於底層的存儲系統沒有被破壞

可以利用rbd的導入導出功能將快照導出備份

RBD導出功能可以基於快照實現增量導出

二、RBD導出操作

 2.1 查看創建的快照

[root@ceph1 ceph]# rbd snap ls testimg-copy --id rbd
SNAPID NAME          SIZE TIMESTAMP                
    12 for-clone2 2048 MB Sun Mar 17 22:55:07 2019

2.2 創建快照 

[root@ceph1 ~]# df -hT
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/vda1      xfs        40G  1.7G   39G   5% /
devtmpfs       devtmpfs  893M     0  893M   0% /dev
tmpfs          tmpfs     920M     0  920M   0% /dev/shm
tmpfs          tmpfs     920M   17M  904M   2% /run
tmpfs          tmpfs     920M     0  920M   0% /sys/fs/cgroup
/dev/rbd0      xfs       2.0G   33M  2.0G   2% /mnt/ceph
/dev/rbd1      xfs       2.0G   33M  2.0G   2% /mnt/ceph2
[root@ceph1 ~]# rbd showmapped
id pool image        snap device    
0  rbd  testimg-copy -    /dev/rbd0 
1  rbd  cephrbd1     -    /dev/rbd1 
cd[root@ceph1 ~]# cd /mnt/ceph
[root@ceph1 ceph]# ll
-rw-r--r-- 1 root root 17 Mar 17 21:21 111
-rw-r--r-- 1 root root  0 Mar 17 22:13 222
-rw-r--r-- 1 root root  4 Mar 17 22:13 test
-rw-r--r-- 1 root root  4 Mar 17 22:14 test1
[root@ceph1 ceph]# echo 'pretty girl'  >> aaa.txt
[root@ceph1 ceph]# rbd snap create testimg-copy@v1 --id rbd
[root@ceph1 ceph]# rbd snap ls testimg-copy --id rbd
SNAPID NAME          SIZE TIMESTAMP                
    12 for-clone2 2048 MB Sun Mar 17 22:55:07 2019 
    15 v1         2048 MB Tue Mar 19 16:22:13 2019 

2.3 寫數據再次創建快照

[root@ceph1 ceph]# echo 'handsome boy' >>boy
[root@ceph1 ceph]# ls
111  222  aaa.txt  boy  test  test1
[root@ceph1 ceph]# rbd snap create testimg-copy@v2 --id rbd
[root@ceph1 ceph]# rbd snap ls testimg-copy --id rbd
SNAPID NAME          SIZE TIMESTAMP                
    12 for-clone2 2048 MB Sun Mar 17 22:55:07 2019 
    15 v1         2048 MB Tue Mar 19 16:22:13 2019 
    16 v2         2048 MB Tue Mar 19 16:27:30 2019 

2.4 快照導出操作

[root@ceph2 ~]# rbd export-diff  testimg-copy@for-clone2 testimg-copy-for-clone2      #導出for-clone2的數據
Exporting image: 100% complete...done.
[root@ceph2 ~]# rbd export-diff testimg-copy@v2  --from-snap  for-clone2  testimg-copy-for-clone2-v2   #導出for-clone2到v2時間點的差異數據
Exporting image: 100% complete...done.
[root@ceph2 ~]# ll
-rw-r--r-- 1 root root 2765143 Mar 19 16:35 testimg-copy-for-clone2 -rw-r--r-- 1 root root 2332289 Mar 19 16:38 testimg-copy-for-clone2-v2 [root@ceph2 ~]# rbd export testimg-copy testimg-copy-full #導出創建image到當前時間點的差異數據 Exporting image: 100% complete...done. [root@ceph2 ~]# ll-rw-r--r--. 1 root root 1702 Mar 1 2018 rabbitmq-signing-key-public.asc -rw-r--r-- 1 root root 2765143 Mar 19 16:35 testimg-copy-for-clone2 -rw-r--r-- 1 root root 2332289 Mar 19 16:38 testimg-copy-for-clone2-v2 -rw-r--r-- 1 root root 2147483648 Mar 19 16:40 testimg-copy-full

2.5 刪除所有快照

[root@ceph1 ceph]# cd
[root@ceph1 ~]# umount /mnt/ceph
[root@ceph1 ~]# rbd unmap  /dev/rbd0
[root@ceph2 ~]# rbd snap unprotect testimg-copy@for-clone2
2019-03-19 16:48:46.270361 7fbafacc2700 -1 librbd::SnapshotUnprotectRequest: cannot unprotect: at least 1 child(ren) [fbba3d1b58ba] in pool 'rbd'    #有一個子鏡像沒有合並
2019-03-19 16:48:46.271135 7fbafacc2700 -1 librbd::SnapshotUnprotectRequest: encountered error: (16) Device or resource busy
2019-03-19 16:48:46.271166 7fbafacc2700 -1 librbd::SnapshotUnprotectRequest: 0x5601e4e6c520 should_complete_error: ret_val=-16
rbd: unprotecting snap failed: (16) Device or resource busy
[root@ceph2 ~]# rbd children testimg-copy@for-clone2   #查看子鏡像
rbd/test-clone3
[root@ceph2 ~]# rbd flatten rbd/test-clone3            #合並子鏡像
Image flatten: 100% complete...done.
[root@ceph2 ~]# rbd snap unprotect testimg-copy@for-clone2   #取消保護
[root@ceph2 ~]#  rbd snap purge testimg-copy                 #刪除所有快照
Removing all snapshots: 100% complete...done.
[root@ceph2 ~]# rbd  snap  ls testimg-copy --id rbd

三  導入操作

3.1 導入所有

[root@ceph2 ~]#  rbd rm testimg-copy     #刪除鏡像
Removing image: 100% complete...done.
[root@ceph2 ~]#  rbd ls
test-clone
test-clone2
test-clone3
testimg
[root@ceph2 ~]# rbd create  testbacknew  --size 1    #隨便創建一個image,名稱大小都不限制(恢復時會覆蓋大小信息)
[root@ceph2 ~]# rbd ls
test-clone
test-clone2
test-clone3
testbacknew
testimg
[root@ceph2 ~]# rbd import testimg-copy-full testbacknew     #把所有數據恢復到這個鏡像,報錯已經存在這個鏡像,對於full,不適用
rbd: image creation failed
Importing image: 0% complete...failed.
rbd: import failed: (17) File exists
2019-03-19 16:59:56.843724 7fc50f783d40 -1 librbd: rbd image testbacknew already exists
[root@ceph2 ~]# rbd import testimg-copy-full testbacknew2     #正確恢復
Importing image: 100% complete...done.
[root@ceph2 ~]# rbd ls
test-clone
test-clone2
test-clone3
testbacknew
testbacknew2
testimg

 3.2 客戶端驗證

[root@ceph1 ~]# rbd map testbacknew2 --id rbd                #客戶端進行掛載映射,映射失敗,feature導致
rbd: sysfs write failed
RBD image feature set mismatch. Try disabling features unsupported by the kernel with "rbd feature disable".
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (6) No such device or address
[root@ceph1 ~]# rbd info testbacknew2  --id rbd
rbd image 'testbacknew2':
    size 2048 MB in 512 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.fc6174b0dc51
    format: 2
    features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
    flags: 
    create_timestamp: Tue Mar 19 17:00:10 2019
[root@ceph1 ~]# rbd feature disable testbacknew2 exclusive-lock, object-map, fast-diff, deep-flatten --id rbd     #禁掉報錯的feature
[root@ceph1 ~]# rbd map testbacknew2 --id rbd     #映射成功
/dev/rbd0
[root@ceph1 ~]# mount /dev/rbd0  /mnt/ceph        #掛載
[root@ceph1 ~]# cd /mnt/ceph                      #檢查數據已經恢復
[root@ceph1 ceph]# ls
111  222  aaa.txt  boy  test  test1

 3.3 驗證導入到for-clone2的數據

[root@ceph1 ceph]# cd 
[root@ceph1 ~]# umount /mnt/ceph
[root@ceph1 ~]# rbd unmap /dev/rbd0
[root@ceph2 ~]#  rbd import-diff  testimg-copy-for-clone2 testbacknew
Importing image diff: 100% complete...done.
[root@ceph2 ~]# rbd feature disable testbacknew exclusive-lock, object-map, fast-diff, deep-flatten --id rbd
[root@ceph2 ~]# rbd info testbacknew
rbd image 'testbacknew':
    size 2048 MB in 512 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.fc4b74b0dc51
    format: 2
    features: layering
    flags: 
    create_timestamp: Tue Mar 19 16:57:39 2019
[root@ceph1 ~]# rbd map testbacknew --id rbd
/dev/rbd0
[root@ceph1 ~]# mount /dev/rbd0  /mnt/ceph
[root@ceph1 ~]# cd /mnt/ceph
[root@ceph1 ceph]# ls
111  222  test  test1

3.4 驗證導入至快照v2的數據

[root@ceph1 ceph]# cd 
[root@ceph1 ~]#umount /mnt/ceph
[root@ceph1 ~]#rbd unmap /dev/rbd0
[root@ceph2 ~]#rbd import-diff testimg-copy-for-clone2-v2 testbacknew
[root@ceph1 ~]#rbd import-diff testimg-copy-for-clone2-v2 testbacknew^C
[root@ceph1 ~]#rbd map testbacknew --id rbd
/dev/rbd0
[root@ceph1 ~]#mount /dev/rbd0  /mnt/ceph
[root@ceph1 ~]#cd /mnt/ceph
[root@ceph1 ceph]#ls
111  222  aaa.txt  boy  test  test1

實驗完成!!!

 博主聲明:本文的內容來源主要來自譽天教育晏威老師,由本人實驗完成操作驗證,需要的博友請聯系譽天教育(http://www.yutianedu.com/),獲得官方同意或者晏老師(https://www.cnblogs.com/breezey/)本人同意即可轉載,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM