數(shù)據(jù)容災(zāi)
數(shù)據(jù)備份系統(tǒng)只能保證實際上被安全復(fù)制了一份,如果生產(chǎn)系統(tǒng)故障,必須將備份數(shù)據(jù)盡快的恢復(fù)到生產(chǎn)系統(tǒng)中繼續(xù)生產(chǎn),就叫
容災(zāi)。
容災(zāi)可以分為四個級別:
數(shù)據(jù)級容災(zāi):只是將生產(chǎn)站點的數(shù)據(jù)同步到遠(yuǎn)端。
與應(yīng)用結(jié)合的數(shù)據(jù)級容災(zāi):保證對應(yīng)應(yīng)用數(shù)據(jù)一致性。
應(yīng)用級容災(zāi):需要保證災(zāi)難發(fā)生以后,需要保證原生成系統(tǒng)中的應(yīng)用系統(tǒng)在災(zāi)備站點可用。
業(yè)務(wù)級容災(zāi):除了保證數(shù)據(jù)、應(yīng)用系統(tǒng)在災(zāi)備站點可用,還要保證整個企業(yè)的業(yè)務(wù)系統(tǒng)仍對外可用,是最終層次的容災(zāi)。

概述
如果要充分保證數(shù)據(jù)的安全,只是在本地做備份是不夠的,所以需要在遠(yuǎn)程建另一個系統(tǒng),并包含當(dāng)前生產(chǎn)系統(tǒng)的全部數(shù)據(jù),這個系統(tǒng)須
要保證主生產(chǎn)系統(tǒng)的數(shù)據(jù)實時的傳輸?shù)竭h(yuǎn)程備份系統(tǒng)上。
主故障后,必須將應(yīng)用程序切換到遠(yuǎn)程備份系統(tǒng)上。
那么備份和容災(zāi)有什么區(qū)別呢?生產(chǎn)系統(tǒng)就好比手機,備份就是把手機上的數(shù)據(jù)備份到電腦上,但是如果這個手機壞了呢?要恢復(fù)數(shù)據(jù)需要大量的時間。
那么容災(zāi)就是我們有兩部手機,而且他們的數(shù)據(jù)是使用云實時同步的,所以可以無縫切換。
如果我們預(yù)算充足,可以使用一直兩臺手機,那還需要備份嗎?當(dāng)然需要,比如某個時刻,我們把手機里面的某個聯(lián)系人給誤刪了,因為容災(zāi)的手機是實時同步的,很難說能通過另一部手機找回來。但是如果之前有備份過數(shù)據(jù),完全可以通過之前的備份進(jìn)行恢復(fù)。
下面繼續(xù)談容災(zāi)。對于一個企業(yè)IT生產(chǎn)系統(tǒng),主要有4個組件:
生產(chǎn)資料:原始數(shù)據(jù)
生產(chǎn)工具:服務(wù)器等基礎(chǔ)架構(gòu)
生產(chǎn)者:業(yè)務(wù)應(yīng)用程序
產(chǎn)品:對外提供的服務(wù)信息
下面將對這四大組件的容災(zāi)進(jìn)行講解
生產(chǎn)資料容災(zāi)
生產(chǎn)資源容災(zāi)指的就是對原始數(shù)據(jù)進(jìn)行容災(zāi)。這最重要的,因為沒有生產(chǎn)資料一切等于從頭再來。
要設(shè)計這樣一套生產(chǎn)資料容災(zāi),需要注意的是
-
要把變化的實時同步到備用系統(tǒng),方法是
將某時刻的數(shù)據(jù)傳送到備用系統(tǒng)
將此時候后變化數(shù)據(jù)同步到備用系統(tǒng)
這樣就做了一次同步了,之后只需要在數(shù)據(jù)變化以后才把變化的數(shù)據(jù)傳送到備用系統(tǒng)。
數(shù)據(jù)必須至少保留額外一份。在容災(zāi)的同時還需要數(shù)據(jù)備份(避免誤刪等邏輯錯誤)
如下為相應(yīng)的拓?fù)洌?/p>

主備站點都有相同的生產(chǎn)工具,使用網(wǎng)絡(luò)相連??梢酝ㄟ^兩種方式來進(jìn)行同步:
通過前端網(wǎng)絡(luò)進(jìn)行同步
通過后端SAN網(wǎng)絡(luò)進(jìn)行同步。
通過前端網(wǎng)絡(luò)同步

通過路由器連接到專線或者Internet
變化的數(shù)據(jù)通過路由器傳送到備站點的路由器上。
通過交換機傳到備服務(wù)器上,寫入磁盤陣列
那么到底選擇專線還是Internet呢?專線可以保證數(shù)據(jù)同步的實時性,但是不適合大數(shù)量的傳輸。如果實時性要求不高,而且數(shù)據(jù)量大的時候,可以將主備站點接入100Mbps的Internet。
可以看出這種方式經(jīng)過了前端網(wǎng)絡(luò),所以必須在每臺需要備份的服務(wù)器上安裝軟件進(jìn)行同步,這種軟件可以監(jiān)視目錄中的數(shù)據(jù)變化,然后與遠(yuǎn)端的軟件進(jìn)行通信,寫入相同的文件目錄中。
這種方式的同步一般都是文件級的同步,對底層卷的數(shù)據(jù)塊變化不做同步。
案例:DB2數(shù)據(jù)的HADR組件容災(zāi)
DB2數(shù)據(jù)庫利用主備上的數(shù)據(jù)庫軟件模塊(HADR)來實現(xiàn)兩端的數(shù)據(jù)同步。而且同步的是不卷上的原始數(shù)據(jù),而是對數(shù)據(jù)操作的描述,也就是日志。這樣的好處是,不需要傳輸數(shù)據(jù),備份機收到日志以后,在備機的磁盤上重做操作即可。
HADR:High Availability Disaster Recovery,是數(shù)據(jù)庫級別的高可用性數(shù)據(jù)復(fù)制機制。需要兩臺數(shù)據(jù)庫服務(wù)器:primary , standby
當(dāng)
主數(shù)據(jù)庫發(fā)生事務(wù)性操作,將日志通過TCP/IP傳送到備數(shù)據(jù)庫,然后備機對日志文件進(jìn)行重放Replay,從而保持?jǐn)?shù)據(jù)的一致性。當(dāng)
主數(shù)據(jù)庫故障,備機可以接管主數(shù)據(jù)庫,而客戶端應(yīng)用程序的數(shù)據(jù)庫連接可以通過自動客戶端重新路由(Automatic Client Reroute)轉(zhuǎn)移到新的主服務(wù)器。當(dāng)原來的主數(shù)據(jù)庫服務(wù)器修復(fù)了,作為新的備用數(shù)據(jù)庫加入HADR。
需要注意的是處于備用角色的數(shù)據(jù)庫不能被訪問。

通過后端網(wǎng)絡(luò)實現(xiàn)同步
通過后端網(wǎng)絡(luò)進(jìn)行同步,數(shù)據(jù)不會流經(jīng)前端網(wǎng)絡(luò),而全部通過后端網(wǎng)絡(luò)傳輸?shù)絺浞莸拇鎯ι?。所以需要將主站點和備站點的后端網(wǎng)絡(luò)設(shè)施連接起來。要么直接拉光纖,要么用專線。
如果用專線的話,需要增加額外的協(xié)議轉(zhuǎn)換設(shè)備,現(xiàn)在電信部門的光纖專線一般為SDH傳輸方式,接入到用戶端的時候,一般將信號調(diào)制成E1、OC3等編碼方式。

上圖中,F(xiàn)C協(xié)議,經(jīng)過FCIP網(wǎng)關(guān),變成基于以太網(wǎng)的IP協(xié)議,(FC over IP over ETH)。經(jīng)過E1/以太網(wǎng)轉(zhuǎn)換器,承載到了E1協(xié)議上,然后多路E1信號匯聚到光端機,通過一條或者多條光纖,傳輸給電信部門的SDH交換設(shè)施進(jìn)行傳輸。
這樣我們就將主站點和備站點的后端網(wǎng)絡(luò)打通了,此時主服務(wù)器就可以訪問到備份的磁盤陣列,也就是說主站點的服務(wù)器可以同時操作本地磁盤和備站點的磁盤陣列了。

我們來看一下這種方式的路徑:
本地磁盤+SAN交換——本地服務(wù)器內(nèi)存——SAN網(wǎng)絡(luò)交換——電信部門網(wǎng)絡(luò)——遠(yuǎn)端SAN網(wǎng)絡(luò)交換——遠(yuǎn)端磁盤陣列

數(shù)據(jù)到了遠(yuǎn)端SAN不需要再經(jīng)過服務(wù)器,因為有了對方存儲設(shè)備的直接訪問權(quán)。但是整個過程中,仍然至少需要一臺服務(wù)器,服務(wù)器上需要安裝一個軟件,可以將數(shù)據(jù)從本地卷A提取出來,然后直接通過SAN網(wǎng)絡(luò)寫到位于備份站點的卷B上。
但是試想一下,如果數(shù)據(jù)直接在內(nèi)存中生成的,那么同時在A和B上各寫一份,速度豈不是更快,這種方式又叫“卷鏡像”,因為可以時時刻刻保持兩個卷完全相同,它能保證數(shù)據(jù)同步的實時性,但是不適合大規(guī)模遠(yuǎn)距離的數(shù)據(jù)同步。
同時還需要注意的是,卷鏡像的的同步軟件工作在卷這一層,可以感知數(shù)據(jù)塊的變化,而不是文件的變化。缺點在于對網(wǎng)絡(luò)速度要求更高,所以成本也更高。
通過數(shù)據(jù)存儲設(shè)備實現(xiàn)同步
之前講的通過前端網(wǎng)絡(luò)和通過后端網(wǎng)絡(luò)的方式,都使用了一個泵來提供動力。而如果將數(shù)據(jù)同步軟件安裝在存儲設(shè)備上,豈不是更省事。而且這樣徹底解放了服務(wù)器,所有工作都由磁盤陣列完成。
這種方式的同步,不會識別卷上的文件系統(tǒng),所以同步的是塊。而且要求主和備的存儲設(shè)備型號一致。因為不同廠家的產(chǎn)品無法實現(xiàn)直接同步。

這種方法的缺點是不能保證數(shù)據(jù)對應(yīng)用程序的可用性。
因為存儲設(shè)備與應(yīng)用程序之間還有操作系統(tǒng)這一層,操作系統(tǒng)也有自己的緩存機制,所有有可能造成數(shù)據(jù)的不一致性。
總結(jié):
使用前端網(wǎng)絡(luò)進(jìn)行同步,路徑最長,但是成本也最低。
使用后端網(wǎng)絡(luò)進(jìn)行同步,實時性強,但是對后端鏈路要求也高。不適合于數(shù)據(jù)量多的時候。
使用存儲設(shè)備直接進(jìn)行同步,路徑最短,不占用服務(wù)器。但是仍然不適合于遠(yuǎn)距離低速鏈路環(huán)境。而且還不能數(shù)據(jù)對應(yīng)用程序的可用性。

容災(zāi)中數(shù)據(jù)的同步復(fù)制和異步復(fù)制
同步復(fù)制
下圖是基于存儲設(shè)備的自主同步環(huán)境。

主向磁盤發(fā)出IO請求,向某LBA寫入數(shù)據(jù),待寫數(shù)據(jù)入緩存,此時控制器不會給主的HBA驅(qū)動程序發(fā)送成功
主磁盤陣列將變化的數(shù)據(jù)從緩存中寫入LUN A,此時主的數(shù)據(jù)同步引擎感知,將變化的數(shù)據(jù)塊從緩存中通過SAN交換機發(fā)送到備的緩存中。
備磁盤陣列運行的同步引擎接收到數(shù)據(jù)后,在FC協(xié)議隱式的發(fā)一個ACK或者通過上層顯試的發(fā)給主站點
-
主收到應(yīng)答,向服務(wù)器發(fā)一個FC協(xié)議的隱式ACK。服務(wù)器上的FC HBA驅(qū)動程序探測成功。
若備站點遲遲未收到數(shù)據(jù),則不會返回成功,應(yīng)用程序會等待。如果此時應(yīng)用程序使用的是同步IO,則相關(guān)進(jìn)程會掛起,稱為
IO等待。所以同步復(fù)制的特點是主站點必須等待備份站點的成功信號,保持嚴(yán)格的同步,一榮俱榮,一損俱損。
異步復(fù)制
相對于同步復(fù)制,兩邊的步調(diào)不需要一致,要保證重要的事情先做完,所以會存在一定的數(shù)據(jù)不一致。
-
主向磁盤發(fā)出IO請求,待寫數(shù)據(jù)進(jìn)入控制器緩存,如果此時
主控制器設(shè)置為Write Back模式:則立刻返回應(yīng)答。
主控制器設(shè)置為Write Through模式,則先寫入LUN A以后,再返回ACK。
主站點將數(shù)據(jù)通過SAN網(wǎng)絡(luò)發(fā)送到備站點的緩存。
備站點磁盤成功接收,則返回成功。


生產(chǎn)者容災(zāi)——應(yīng)用程序容災(zāi)
之前講的都是生產(chǎn)資料的容災(zāi),也就是整個系統(tǒng)最重要的數(shù)據(jù)的容災(zāi)。而對于生產(chǎn)者,無疑就是服務(wù)器上的應(yīng)用程序,如果主發(fā)生故障,需要在備站點重新運行這些應(yīng)用程序。最直觀的想法是,在備站點預(yù)備應(yīng)用程序的安裝文件,一定主出現(xiàn)故障,在備上配置這些應(yīng)用程序,但是實際上應(yīng)用程序安裝和配置需要大量的時間。所以可以將備份站點預(yù)裝應(yīng)用程序,但是不工作,這樣就可保證同一時刻整個IT系統(tǒng)只有一個站點的生產(chǎn)者處理一份數(shù)據(jù)
既要求處理同一份數(shù)據(jù),又要求發(fā)生事故的時候,備份站點的生產(chǎn)者立即啟動,要做到這點,需要讓備份站點的應(yīng)用程序感知到主站點的應(yīng)用程序狀態(tài),一旦發(fā)現(xiàn)故障,立即啟動開始生產(chǎn)。
在之前的章節(jié)中,我們說到了高可用群集,在容災(zāi)系統(tǒng)領(lǐng)域,群集的范圍擴大到了異地,主備可能相隔很遠(yuǎn),交換運行狀態(tài)的數(shù)據(jù)量很小,最好使用專線,這樣可以很好的保證QoS。
傳統(tǒng)的HA軟件是使用共享存儲的方式來作用的,即在HA系統(tǒng)中,共享一份物理存儲,不管誰來操作這份數(shù)據(jù),最終只有一份,而且是一致,有上下文邏輯關(guān)系的。
所以HA軟件是基于資源切換的,把組件看作是資源,比如應(yīng)用、IP地址、存儲卷等。
當(dāng)故障時,
備份機HA軟件會檢測到對方的故障,
然后強行將資源遷移到本地,比如在備份機上修改網(wǎng)卡的IP地址,并發(fā)出ARP廣播來刷新所有廣播域的客戶端以及網(wǎng)關(guān)的ARP記錄
掛載共享存儲設(shè)備上的卷,
最后啟動備份應(yīng)用系統(tǒng)。
這樣應(yīng)用系統(tǒng)可以訪問共享卷,客戶端也可以使用原來的IP地址來訪問服務(wù)器,這樣生產(chǎn)就可以繼續(xù)下去。
但是在異地容災(zāi)系統(tǒng)中,主備站點各有一份數(shù)據(jù),所以必須保證數(shù)據(jù)的同步。這也是為什么兩個站點同時只有一個在工作,這樣的話才能以一邊數(shù)據(jù)為準(zhǔn),另一邊與之同步。
本地容災(zāi)
本地HA系統(tǒng)中,多個節(jié)點如果共同擁有同一個卷,但是同一時刻只有一個節(jié)點能掛載它,這種模式叫共享存儲模式
與之對應(yīng)的是Share-Nothing模式,每個節(jié)點都有自己獨占的存儲卷,怎么進(jìn)行數(shù)據(jù)共享呢?可以通過同步復(fù)制技術(shù)同步到所有節(jié)點上。若某節(jié)點發(fā)生故障,這個節(jié)點對應(yīng)的備份節(jié)點啟動應(yīng)用程序。因為之前的數(shù)據(jù)已經(jīng)同步過了,所以數(shù)據(jù)一定是一致的。
在Share-Nothing模式下,不存在任何的接管問題,所以客戶端需要感知服務(wù)端群集這種切換動作,通過客戶端進(jìn)行配置的切換即可。
可以對共享存儲和Share-Nothing兩種存儲模式進(jìn)行對比。
| 共享存儲 | Share-Nothing | |
|---|---|---|
| 數(shù)據(jù)本身是否容災(zāi) | × | √ |
| 軟硬件成本 | 高 | 低 |
| 前端網(wǎng)絡(luò)資源消耗 | 低 | 高 |
| 管理難度 | 高 | 低 |
| 維護數(shù)據(jù)是否需要停機 | √ | × |
| 實現(xiàn)的復(fù)雜度 | 高 | 低 |
| 是否需要第三方軟件 | √ | × |
| 故障因素數(shù)量 | 3個 | 2個 |
-
數(shù)據(jù)本身是否容災(zāi)
共享存儲:數(shù)據(jù)損壞,必須使用鏡像進(jìn)行還原。而且要停機。
Share-Nothing:每個節(jié)點都有自己的數(shù)據(jù)拷貝,若損壞,可切換到另外的節(jié)點,不影響應(yīng)用,不停機。修復(fù)后的節(jié)點可以重新加入容災(zāi)系統(tǒng)。
-
軟硬成本
共享:需要外接磁盤陣列,為了保證數(shù)據(jù)訪問速度,必須自身實現(xiàn)RAID,主機也需要安裝適配器。成本高。需要HA軟件
Share-Nothing:各個節(jié)點各自保存數(shù)據(jù),不需要外接存儲系統(tǒng),不需要額外的HA軟件
-
前端網(wǎng)絡(luò)耗費
共享存儲:前端只需要交互控制信息,資源耗費較小。
Share-Nothing:數(shù)據(jù)同步靠前端,對資源消耗很大。
-
管理難度:
共享:需要管理節(jié)點間的交互配置,還需要管理外部存儲,增加了管理難度
Share-Nothing:只需要管理節(jié)點配置。
-
是否停機
共享:需要將數(shù)據(jù)從單機轉(zhuǎn)移到共享存儲供其他節(jié)點使用,需要停機來保證一致性。
Share-Nothing:數(shù)據(jù)同步是動態(tài)的,不需要停機。
-
實現(xiàn)復(fù)雜度
共享存儲:有三種基本元素:節(jié)點、節(jié)點間的交互、共享數(shù)據(jù)。如果使用共享存儲模式做容災(zāi),需要將數(shù)據(jù)移動到共享存儲上,增加額外的工作量和不可控因素
Share-Nothing:只有兩種元素 節(jié)點&節(jié)點交互
-
第三方
共享存儲:備份節(jié)點需要通過HA軟件來監(jiān)控主節(jié)點的狀態(tài),發(fā)生故障的時候自動接管,如MSCS
share-Nothing:不需要第三方軟件參與
-
故障因素
共享存儲:OS、應(yīng)用程序、HA軟件
Share-nothing:OS、應(yīng)用程序
異地容災(zāi)
如果主站點和備站點不在同一個機房中,這樣備份應(yīng)用程序需要跨越很遠(yuǎn)的距離來與主程序交互狀態(tài)。只是說這種交互包很小,不需要擔(dān)心延時的問題。
IP切換
在異地容災(zāi)系統(tǒng),主服務(wù)器和備服務(wù)器不大可能在同一個廣播域,所以需要通過網(wǎng)關(guān)來轉(zhuǎn)發(fā)IP包,正因為此不能用資源切換的方式來切換IP地址。
如果想故障后,客戶端繼續(xù)使用原來的IP地址連接備份服務(wù)器,那么可以在路由上做文章。動態(tài)修改路由器上的路由表,將IP包路由到備份站點而不是主站點。如果利用域名來訪問服務(wù)器,那么可以直接在DNS設(shè)備上修改IP指向記錄來實現(xiàn)。
卷切換
異地容災(zāi)系統(tǒng)在主站點和備站點各有卷,兩個卷通過前端或者后端網(wǎng)絡(luò)進(jìn)行同步。
如果備的HA軟件檢測到主站點通信失敗,通過某種方式,斷開同步關(guān)系(若不斷開,卷會被鎖定而不可訪問)。然后就是重新掛載備站點的卷
此時同步引擎可以是運行在存儲設(shè)備上,也可以由HA來執(zhí)行。
如果同步引擎是運行在存儲設(shè)備上的,必須由管理員手動利用存儲設(shè)備的配置工具來斷開同步關(guān)系。斷開了以后,本地的卷才可以被訪問,然后HA軟件可以在備份機上調(diào)用操作系統(tǒng)相關(guān)功能來掛載這個卷。
如果同步引擎本來就是HA來執(zhí)行的,那么HA軟件可以自動斷開同步關(guān)系,在備份機上掛載對應(yīng)的卷。
異地容災(zāi)的應(yīng)用切換
應(yīng)用,也就是生產(chǎn)者的切換,是所有HA容災(zāi)系統(tǒng)在故障發(fā)生后所執(zhí)行的最后一步。與共享存儲式的HA容災(zāi)一樣,異地容災(zāi)的應(yīng)用切換,是有備機的HA軟件來執(zhí)行腳本,或者調(diào)用相應(yīng)的接口來啟動備份機的應(yīng)用的。
