◆陳劉忠 展亞南 張旭東
(1.電科云(北京)有限責(zé)任公司南京分公司 江蘇 21000;2.中國電子科技集團(tuán)公司第二十八研究所 江蘇 21000)
云計算是一種按需分配的IT 資源供給方式,可以滿足對IT 資源的“拿來就能用”,“想要就能有”的需求。企業(yè)上云,是一個近年來比較熱門的話題。云計算中的虛擬化技術(shù)帶來“彈性、靈活、安全、低成本”特性,使“上云是常態(tài),不上云是例外”成為共識。但是上云意味著數(shù)據(jù)會集中保存在公共數(shù)據(jù)中心,數(shù)據(jù)中心安全影響到云上所有應(yīng)用數(shù)據(jù)的安全,因此數(shù)據(jù)中心容災(zāi)技術(shù)成為云解決方案需要考慮的問題。本文研究并實現(xiàn)了以openstack+ceph 云解決方案的容災(zāi)技術(shù)。
容災(zāi)系統(tǒng)是指在距離相隔較遠(yuǎn)的不同地方,建立兩套或多套作用功能相同的系統(tǒng),這幾套系統(tǒng)之間可以相互進(jìn)行數(shù)據(jù)轉(zhuǎn)移和功能業(yè)務(wù)的切換。當(dāng)一方系統(tǒng)因某些意外故障停止工作的時候,另外一套系統(tǒng)可以完全恢復(fù)數(shù)據(jù)或?qū)⒐ぷ鹘庸芷饋?,使得該系統(tǒng)可以繼續(xù)正常工作。
按照SHARE 78 的國際標(biāo)準(zhǔn),容災(zāi)系統(tǒng)被分為7 層,為各容災(zāi)等級的評定標(biāo)準(zhǔn)。衡量容災(zāi)系統(tǒng)質(zhì)量的指標(biāo)主要有兩個,分別是RTO和RPO。
RTO(Recovery Time Objective):系統(tǒng)恢復(fù)時間,這一指標(biāo)主要關(guān)注的是應(yīng)用的恢復(fù)時間,關(guān)注業(yè)務(wù)系統(tǒng)所能容忍的停止服務(wù)的最長時間,代表業(yè)務(wù)系統(tǒng)從故障到恢復(fù)正常的時間。
RPO(Recovery Point Objective):丟失的數(shù)據(jù)量,這一指標(biāo)主要關(guān)注的是災(zāi)難發(fā)生后數(shù)據(jù)的丟失量。RPO 用以反映容災(zāi)系統(tǒng)恢復(fù)數(shù)據(jù)完整性,代表業(yè)務(wù)系統(tǒng)所能容忍的數(shù)據(jù)丟失量。
Ceph 塊存儲是實時備份實現(xiàn)原理,是異步復(fù)制數(shù)據(jù)到備份數(shù)據(jù)中心存儲,是一個Tier5 級別的容災(zāi)方案。本容災(zāi)模塊數(shù)據(jù)備份分為兩個階段:啟動階段和實時復(fù)制階段。
啟動階段:第一次加入時對整個塊的數(shù)據(jù)做一次全量的快照,之后將快照同步到備端數(shù)據(jù)中心后創(chuàng)建一個鏡像基礎(chǔ)塊設(shè)備,原理圖如圖1所示。
圖1 啟動階段數(shù)據(jù)同步原理圖
實時同步階段:實時同步階段中,數(shù)據(jù)同步模塊會從主集群的日志中讀取數(shù)據(jù),在備集群增量回放數(shù)據(jù),實現(xiàn)主集群存儲層和備集群存儲層的實時數(shù)據(jù)一致性能。實時同步階段原理如圖2所示。
圖2 實時同步階段數(shù)據(jù)同步原理圖
計算層數(shù)據(jù)寫入時先將數(shù)據(jù)封裝成一個事務(wù)順序?qū)懭肴罩颈P,日志盤落盤后再寫入設(shè)備盤,這樣就可以保證主備集群數(shù)據(jù)的一致性。同時,同步模塊可以實時從日志盤中順序回放事務(wù),寫入備集群塊設(shè)備。這樣的架構(gòu)設(shè)計主備集群存儲層數(shù)據(jù)保證了弱一致性,解決了主備集群數(shù)據(jù)強一致性導(dǎo)致的數(shù)據(jù)主集群io 延遲問題。但是由于需要先寫日志盤,導(dǎo)致主集群io 延遲增加主要是寫日志盤的時間,可以使用更高性能的存儲介質(zhì)存放日志以減小對延遲的影響。
同步模塊包括數(shù)據(jù)同步模塊和元數(shù)據(jù)同步模塊兩個部分。數(shù)據(jù)同步模塊實時同步存儲層塊設(shè)備數(shù)據(jù);元數(shù)據(jù)同步模塊同步計算層虛擬機(jī)、云硬盤和鏡像的元數(shù)據(jù)。為在容災(zāi)切換時能夠快速恢復(fù)虛擬機(jī),需在備數(shù)據(jù)中心創(chuàng)建一個占位虛擬機(jī)實現(xiàn)容災(zāi)切換虛擬機(jī)秒級恢復(fù)。
計算層容災(zāi)主要包括虛擬機(jī)、云硬盤、鏡像和網(wǎng)絡(luò),分別對應(yīng)OpenStack 中的nova、cinder、glance、neutron 模塊。容災(zāi)架構(gòu)設(shè)計如圖3所示。
圖3 容災(zāi)架構(gòu)設(shè)計圖
容災(zāi)流程包含創(chuàng)建容災(zāi)組、加入容災(zāi)資源、容災(zāi)切換、停止數(shù)據(jù)同步、移除容災(zāi)資源、清理容災(zāi)組六種關(guān)鍵流程。
(1)加入容災(zāi)資源:災(zāi)備資源是用戶需要進(jìn)行災(zāi)備的虛機(jī)和云盤的統(tǒng)稱,相互關(guān)聯(lián)的資源需要添加到同一個容災(zāi)組中進(jìn)行統(tǒng)一管理和容災(zāi)備份。為了在備端快速進(jìn)行災(zāi)難恢復(fù),備端需要創(chuàng)建相同的資源(占位資源)和主端資源進(jìn)行一一映射。
容災(zāi)資源加入容災(zāi)組之后會自動收集主端虛機(jī)的port、子網(wǎng)、網(wǎng)絡(luò)、安全組、flavor、啟動方式、云盤信息。根據(jù)這些信息在備端恢復(fù)出來相應(yīng)的資源,加入容災(zāi)資源流程如圖4所示。
圖4 加入容災(zāi)資源流程圖
用戶將相關(guān)聯(lián)的資源加入容災(zāi)組中,容災(zāi)服務(wù)讀取容災(zāi)資源的所有元數(shù)據(jù)信息通過RPC 調(diào)用在備集群創(chuàng)建占位資源,之后開啟存儲層數(shù)據(jù)同步,實時在往備集群同步存儲層數(shù)據(jù)。
(2)容災(zāi)切換:當(dāng)主數(shù)據(jù)中心由于故障或者其他原因?qū)е聼o法提供服務(wù)時,需要進(jìn)行災(zāi)備切換,把備端強制升級為主端,并利用備份的數(shù)據(jù)來恢復(fù)服務(wù);同時當(dāng)主端恢復(fù)后,需要繼續(xù)和備端進(jìn)行數(shù)據(jù)同步,把備端的數(shù)據(jù)同步到主端,保持主備端數(shù)據(jù)的一致性。容災(zāi)切換流程如圖5所示。
圖5 容災(zāi)切換流程圖
●主集群宕機(jī)切換流程:當(dāng)主集群故障宕機(jī)不能提供服務(wù)時,需要在備集群進(jìn)行災(zāi)備處理,將備集群備服虛擬機(jī)升級為主提供服務(wù)。當(dāng)然為了虛擬機(jī)的ip 地址、mac 地址一致,主備集群采用大二層打通的方式,在備份升級為主的同時進(jìn)行ip 地址指定,保證備集群虛擬機(jī)計算、存儲、網(wǎng)絡(luò)等所有信息與主集群保持一致對外提供服務(wù)。
●主集群恢復(fù)切換流程:主數(shù)據(jù)中心故障恢復(fù)正常,需要在主端再次進(jìn)行災(zāi)備處理,把備集群資源數(shù)據(jù)同步到主集群。需要將主集群虛擬機(jī)先降級為備,從備集群同步數(shù)據(jù)到主集群保證主備集群數(shù)據(jù)一致后,再進(jìn)行容災(zāi)切換將主集群虛擬機(jī)恢復(fù)對外提供服務(wù),備集群再次降級為備。
(3)停止數(shù)據(jù)同步:因為業(yè)務(wù)部分虛擬機(jī)不需要再繼續(xù)容災(zāi),或者為了節(jié)省容災(zāi)網(wǎng)絡(luò)和備集群存儲空間暫停同步。這時需要支持停止數(shù)據(jù)同步功能,停止容災(zāi)功能是以容災(zāi)組為單位進(jìn)行,并且停止容災(zāi)之后會清理該容災(zāi)組在備集群的數(shù)據(jù)存儲資源。停止容災(zāi)的流程包括存儲層數(shù)據(jù)同步停止和備集群存儲層數(shù)據(jù)清理兩個步驟。
(4)刪除容災(zāi)資源:如果某些資源不再需要,可以刪除資源。但是如果資源已經(jīng)在災(zāi)備組中,則必須從主端發(fā)起移除資源。之后容災(zāi)服務(wù)會先檢查狀態(tài),然后清理主備映射關(guān)系,后刪除主機(jī)群資源。備集群資源由用戶決定是否刪除。刪除容災(zāi)資源流程如圖6所示。
圖6 容災(zāi)切換流程圖
(5)刪除災(zāi)備組:當(dāng)用戶不再需要對某個災(zāi)備組中的資源進(jìn)行災(zāi)備時,可以在中止數(shù)據(jù)同步之后刪除災(zāi)備組。如果災(zāi)備組正在開啟同步或者正在切換,在這種中間狀態(tài)下,也不允許刪除災(zāi)備組。在主集群檢查狀態(tài)后刪除資源映射和容災(zāi)組映射,同時在備集群也刪除它們。之后刪除主集群災(zāi)備組,備集群災(zāi)備組由用戶決定是否刪除。
刪除災(zāi)備組的流程圖如圖8所示。
圖7 刪除災(zāi)備組的流程圖
本文主要介紹了Openstack+ceph 云平臺Tier5 級備份容災(zāi)的原理、架構(gòu)設(shè)計和流程設(shè)計,并且本文介紹的方案已經(jīng)在生產(chǎn)環(huán)境中經(jīng)過驗證,為今后云平臺容災(zāi)設(shè)計提供參考。