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