【大話存儲】學(xué)習(xí)筆記(17章),數(shù)據(jù)容災(zāi)

數(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)。

image.png

概述

如果要充分保證數(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>

image.png

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

  • 通過前端網(wǎng)絡(luò)進(jìn)行同步

  • 通過后端SAN網(wǎng)絡(luò)進(jìn)行同步。

通過前端網(wǎng)絡(luò)同步

image.png
  • 通過路由器連接到專線或者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ù)庫不能被訪問。

image.png

通過后端網(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等編碼方式。

image.png

上圖中,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ù)器可以同時操作本地磁盤和備站點的磁盤陣列了。

image.png

我們來看一下這種方式的路徑:

本地磁盤+SAN交換——本地服務(wù)器內(nèi)存——SAN網(wǎng)絡(luò)交換——電信部門網(wǎng)絡(luò)——遠(yuǎn)端SAN網(wǎng)絡(luò)交換——遠(yuǎn)端磁盤陣列

image.png

數(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)直接同步。

image.png

這種方法的缺點是不能保證數(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)用程序的可用性。

image.png

容災(zāi)中數(shù)據(jù)的同步復(fù)制和異步復(fù)制

同步復(fù)制

下圖是基于存儲設(shè)備的自主同步環(huán)境。

image.png
  • 主向磁盤發(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ā)送到備站點的緩存。

  • 備站點磁盤成功接收,則返回成功。

image.png
image.png

生產(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)用的。

image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容