一、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/)本人同意即可轉載,謝謝!