K8S 儲存的那點事兒:3 種 Ceph RBD 災備方案對比
作者: 李航(滴滴基礎平臺技術專家)
編輯: 小君君(才雲)
Ceph RBD 是 Ceph 的 RADOS 塊裝置。RBD 塊儲存是最穩定且最常用的儲存型別,它類似磁碟可以被掛載。RBD 塊裝置具有快照、多副本、克隆和一致性等特點,資料以條帶化的方式儲存在 Ceph 叢集的多個 OSD 中。本文的作者是滴滴基礎平臺技術專家李航,在這篇文章中,他將對 3 種 Ceph RBD 災備方案展開介紹,並從它們的實現原理、操作命令、效能優缺等方面進行全面分析,為大家在生產中選擇最佳災備方案提供建議。
通過本文你將瞭解到:
-
業內災備方案
-
Snapshot
-
Ceph BackUp
-
RBD Mirroring
-
方案對比
-
總結
業內災備方案
1. Snapshot
1.1 介紹
Cluster A&B 是獨立的 Ceph 叢集,通過 RBD 的 Snapshot 機制,在 Cluster A 端,針對 image 定期通過 RBD 建立 image 的 snap,然後通過 rbd export-diff
、 rbd import-diff
命令將 image 備份到 Cluster B 中。
1.2 原理
非同步備份,基於 RBD 的 snapshot
機制。
1.3 命令和步驟
把 Cluster A 的 pool rbd 下面的 image testimage 非同步備份到 Cluster B 的 pool rbd 下相同的 image 上:
-
在 Cluster A/B 上建立 rbd/testimage;
rbd create -p rbd --size 10240 testimage
-
在準備備份 image 前,暫停 Cluster A 端對 testimage 的 IO 操作,然後建立一個 Snapshot;
rbd snap create <snap-name>
-
匯出 Cluster A 端的 testimage 資料,不指定 from-snap;
rbd export-diff <image-name> <path>
-
copy 上一步中匯出的檔案到 Cluster B 中,並匯入資料到 testimage 中。
rbd import-diff <path> <image-name>
後續需要週期性地暫停 Cluster A 端的 testimage 的 IO,然後建立 snapshot,通過 rbd export-diff <image-name> [--from-snap <snap-name>] <path>
命令匯出 incremental diff。
工程師們可以將差異資料檔案 copy 到 Cluster B 上,然後通過命令 rbd import-diff <path> <image-name>
匯入。通過該操作,在 rbd export-diff
時,就可以使匯出的資料在 take snapshot 之後出現。
1.4 優缺點
優點:
-
當前 Ceph 版本就支援 RBD Snapshot 的功能;
-
命令簡介方便,通過定製執行指令碼就能實現 RBD 塊裝置的跨區備份。
缺點:
-
每次同步前都需要在源端 take Snapshot;
-
持續的 Snapshots 可能導致 image 的讀寫效能下降;
-
還要考慮後續刪除不用的 Snapshots;
-
Snapshot 只能保證 IO 的一致性,並不能保證使用 RBD 塊裝置的系統一致性。
注:Snapshot 可以在每次操作時,暫停 image 的 IO,但是它需要利用 sync IO 資料來保證 RBD 塊裝置上的系統一致性,同時需要虛擬機器支援 qemu-guest-agent。
1.5 參考文獻
https://ceph.com/dev-notes/incremental-snapshots-with-rbd/
https://www.rapide.nl/blog/item/ceph_-_rbd_replication.html
http://wiki.libvirt.org/page/Qemu_guest_agent
http://www.zphj1987.com/2016/06/22/rbd
http://ju.outofmemory.cn/entry/243899
2. Ceph BackUp
2.1 介紹
Teralytics 是一家國外的大資料公司,Ceph BackUp 是他們開源的 Ceph 備份工具。 這個軟體基於 Python 實現,可以說作者的實現邏輯是很清晰的,並且提供了配置檔案的方式,且容易上手(也可以整合到自己的平臺中去) 。
軟體包含以下功能:
-
支援儲存池和多 image 的只對;
-
支援自定義備份目標路徑;
-
配置檔案支援;
-
支援備份視窗設定;
-
支援壓縮選項 ;
-
支援增量和全量備份的配置。
2.2 原理
非同步備份,基於 RBD 的 Snapshot 機制。
2.3 命令和步驟
2.3.1 全量備份配置
上面的配置檔案已寫好,直接執行備份命令:
cephbackup Starting backup for pool rbd Full ceph backup Images to backup: rbd/zp Backup folder: /tmp/ Compression: True Check mode: False Taking full backup of images: zp rbd image 'zp': size 40960 MB in 10240 objects order 22 (4096 kB objects) block_name_prefix: rbd_data.25496b8b4567 format: 2 features: layering flags: Exporting image zp to /tmp/rbd/zp/zp_UTC20170119T092933.full Compress mode activated # rbd export rbd/zp /tmp/rbd/zp/zp_UTC20170119T092933.full Exporting image: 100% complete...done. # tar Scvfz /tmp/rbd/zp/zp_UTC20170119T092933.full.tar.gz /tmp/rbd/zp/zp_UTC20170119T092933.full tar: Removing leading `/' from member names
如果壓縮的比較鬆散,且檔案較為稀疏,那麼使用者就需要等待很長時間;如果檔案壓縮的效果很好,那麼 dd 生成的檔案就可以壓縮的很小。
檢查備份生成的檔案:
ll /tmp/rbd/zp/zp_UTC20170119T092933.full* -rw-r--r-- 1 root root 42949672960 Jan 19 17:29 /tmp/rbd/zp/zp_UTC20170119T092933.full -rw-r--r-- 1 root root 0 Jan 19 17:29 /tmp/rbd/zp/zp_UTC20170119T092933.full.tar.gz
2.3.2 全量備份的還原
rbd import /tmp/rbd/zp/zp_UTC20170119T092933.full zpbk
檢查資料,沒有問題!
2.3.3 增量備份配置
寫下增量配置的檔案,修改備份模式選項:
[rbd] window size = 7 window unit = day destination directory = /tmp/ images = zp compress = yes ceph config = /etc/ceph/ceph.conf backup mode = incremental check mode = no
進行多次增量備份後,顯示如下:
[root@lab8106 ~]#ll /tmp/rbd/zpbk/ total 146452 -rw-r--r-- 1 root root 42949672960 Jan 19 18:04 [email protected] -rw-r--r-- 1 root root 66150 Jan 19 18:05 [email protected]_from_UTC20170119T100339 -rw-r--r-- 1 root root 68 Jan 19 18:05 [email protected]_from_UTC20170119T100546 -rw-r--r-- 1 root root 68 Jan 19 18:06 [email protected]_from_UTC20170119T100550 -rw-r--r-- 1 root root 68 Jan 19 18:06 [email protected]_from_UTC20170119T100606
2.3.4 增量備份的還原
分成多個步驟進行:
1、進行全量的恢復 # rbd import [email protected] dest_image 2、重新建立基礎快照 # rbd snap create dest_image@UTC20161130T170848 3、還原增量的快照(多次執行) # rbd import-diff [email protected]_from_UTC20161130T170848 dest_image
本測試用例還原步驟如下:
rbd import [email protected] zpnew rbd snap create zpnew@UTC20170119T100339 rbd import-diff [email protected]_from_UTC20170119T100339 zpnew rbd import-diff [email protected]_from_UTC20170119T100546 zpnew rbd import-diff [email protected]_from_UTC20170119T100550 zpnew rbd import-diff [email protected]_from_UTC20170119T100606 zpnew
檢查資料,沒有問題!
3. RBD Mirroring
3.1 介紹
Ceph 新的 RBD-Mirror 功能支援配置兩個 Ceph Cluster 之間的 RBD 同步。
3.2 原理
利用 Journal 日誌進行非同步備份,Ceph 自帶 RBD-Mirror 功能 。
3.3 命令和步驟
詳見:RBD-Mirror[1]
3.4 優缺點
優點:
-
Ceph 新的功能,不需要額外開發;
-
同步的粒度比較小,為一個塊裝置的 transaction;
-
保證了 Crash consistency;
-
可配置 pool 的備份,也可單獨指定 image 備份。
缺點:
-
需要線上升級 Ceph 到 Jewel v10.2.2 以上;
-
Image Journal 日誌效能影響較為嚴重。
方案對比
總結
結合業內各大公司的災備方案,以及社群相關的技術文件。 個人建議用快照的方式, 簡單、便捷、風險較低、易實現。 並且國內雲廠商也普遍利用快照的方式實現災備方案,而後加上自己的策略進行包裝。 RBD-Mirror 功能還是比較新,雖然官方文件也對一些措施進行了優化,但是效果不佳,期待他們下個版本的優化結果。
作者簡介:
李航,滴滴基礎平臺技術專家,主要負責分散式 Ceph 系統,具有多年底層開發經驗,先後在 58 同城、汽車之家、優酷土豆集團工作。在高效能 Nginx 開發和分散式快取 redis cluster 有著豐富的經驗。個人主要關注的技術領域:高效能 Nginx 開發、分散式快取、分散式儲存。
--
參考文獻:
1.https: //www.jianshu.com/p/24e1412273ad? utm_campaign=haruki&utm_content=note&utm_medium=reader_share&utm_source=weixin
2.https: //ceph.com/dev-notes/incremental-snapshots-with-rbd/
3.https: //www.rapide.nl/blog/item/ceph_-_rbd_replication.html
4.http: //wiki.libvirt.org/page/Qemu_guest_agent
5.http: //www.zphj1987.com/2016/06/22/rbd
6.http://ju.outofmemory.cn/entry/243899
推薦閱讀:
在看點一下
寫留言