1. 程式人生 > >介紹幾種容災複製技術

介紹幾種容災複製技術

組建容災的重要基礎之一是資料複製技術。在操作上簡單來講就是通過複製軟體實時地將資料從一個主機(或磁碟)複製到另一個主機(磁碟),生成一個數據副本。
    資料複製有多種分類方法,依據複製啟動點的不同,可分為同步複製、非同步複製。同步複製,資料複製是在向主機返回寫請求確認訊號之前實時進行的;對於非同步複製,資料複製是在向主機返回寫請求確認訊號之後實時進行的。

一、四種容災複製技術說明

    根據作業系統的I/O(讀寫操作)路徑以及複製物件劃分為四大種類:基於應用層事務複製、基於檔案層複製、基於邏輯卷層複製、基於磁碟陣列複製。當然,目前出現了基於SAN交換機的複製,但是相對技術不太成熟,應用很少。

    按照資料複製軟體或硬體安裝的位置又可劃分為主機型複製和非主機型複製。應用層、檔案層、邏輯卷層的都屬於主機型複製,主機型複製軟體需安裝在主機上,需要消耗一定的主機資源。儲存層屬於非主機型複製,複製直接由磁碟陣列的內部元件完成,理論上無需消耗應用所在主機的資源。
    一般而言,容災要保護的資料是結構化資料,即儲存在資料庫的資料。以下都用複製資料庫來說明。

1.基於應用層事務複製
基於應用層事務的複製,一般採用採用非同步複製機制,複製物件為應用事務,其過程為:捕獲應用系統的事務,例如SQLServer或Oracle資料庫的事務,經由傳輸元件傳輸到目標伺服器,然後目標裝載程序按照資料庫的關係原理排序事務,將事務儲存到目標資料庫。

    這層的複製完全能保障資料庫的一致性,且目標資料庫處於線上執行狀態。當生產資料庫發生故障時,直接使用目標資料庫即可恢復業務,容災的RTO指標趨於零。但是支援的應用有限,一般為SQLServer、 Oracle、Sybase、DB2、MySQL等等資料庫。另外複製速度較慢,因為資料要通過資料庫的裝載接口才能寫入資料庫。
    應用層產品有很多包括:Goldengate、Quest、Oracle、微軟等。

2.基於磁碟陣列複製
   基於磁碟陣列層的複製,磁碟陣列廠商的複製技術,其原理與邏輯卷層的相似,屬於非主機型的複製。但與硬體繫結,成本高昂,實施複雜。
    基於磁碟陣列層的複製不能完全保障資料庫一致性,目標資料庫處於離線狀態。當生產資料庫發生故障時,需要啟動資料庫才能恢復業務,正是由於不能保障資料庫一致性,很可能資料庫不能正常啟動。儘管存在這樣的缺陷,但這一層的複製對主機的影響極其輕微,所以還是可應用在一些非常大型、繁忙的資料庫容災,作為一種補充保護手段。
    磁碟陣列層廠商包括:IBM、HP、EMC、HDS等。

3.基於邏輯卷層複製
    基於邏輯卷層的複製,一般採用採用同步複製機制,複製物件為邏輯卷層的變化Block,其過程為:捕獲變化塊,同步寫入目標儲存,等於在一個主機上將同一資料寫入兩個不同的邏輯磁碟。這種複製方式對I/O效能影響很大。另外,在實施時可能需要改造生產環境,例如VVR需要自身的卷管理格式才能支援複製,所以如果用於非新部署的業務系統其實施非常複雜。

基於邏輯卷層的複製不能完全保障資料庫一致性,目標資料庫處於離線狀態。當生產資料庫發生故障時,需要啟動資料庫才能恢復業務,正是由於不能保障資料庫一致性,很可能資料庫不能正常啟動。因此,這層複製技術很少用於大型資料庫的容災。

     邏輯卷層的廠商包括:賽門鐵克、Lexis等等。

4.檔案層複製
    基於檔案層的複製,一般採用採用非同步複製機制,複製物件為檔案I/O,其過程為:複製上層應用傳遞下來的I/O,然後快取起來,再經由傳輸元件傳輸到目標伺服器,再由目標伺服器寫入目標儲存,完成一次複製。
基於檔案層的複製不能保障資料庫一致性,目標資料庫處於離線狀態。當生產資料庫發生故障時,需要啟動資料庫才能恢復業務,正是由於不能保障資料庫一致性,很可能資料庫不能正常啟動。所以檔案複製一般用於事務很少、資料量很小的資料庫。
    檔案層:賽門鐵克的低端檔案複製、國內一些小廠商。
 
    四種複製技術各有優缺點。一般而言,檔案層複製技術主要採用非同步複製原理,不能保障資料庫的一致性,不能確保資料庫是好的,很少用於大型資料庫的容災。國內很多廠商都採用檔案層複製,主要用於中小企業,適用於資料量不大、投入很小的場合。

二、容災面對的核心問題——資料一致性
1.保障容災端資料一致性的意義
     容災系統與生產系統的資料一致性考慮在容災建設中極其重要。什麼叫資料一致性,這是個非常專業的問題。簡單的講,就是要保證生產系統、容災系統的資料相一致。可以這樣講,如果各層不能保障複製過去的資料的一致性,那麼容災端的資料就不完整,整個應用系統就不可用,容災完全失去意義。
    而四種複製技術由於所屬層次不一嚴,各層的資料一致性含義是不同的。

2.應用層完全能保障容災端的資料一致性
    應用層的資料一致性是指容災業務資料和生產端業務資料相同,例如股票交易業務,生產端交易了10000筆,如果容災端只複製了9999筆,那麼就產生了資料不一致的問題。但是,應用層的資料不一致性相對應用程式而言是不致命的,甚至應用程式都無法感知,只有上層業務才能感知,就如同這個例子丟了一筆交易資料,那麼此時需要人工干預補齊一下資料。從這個角度講只有應用層的複製才能確保應用程式的完整性和一致性。

3.其他三層保障資料一致性的難題
    其他三層的資料不一致性對應用程式而言是致命的,很可能導致應用程式無法啟動。其他三層的資料一致性比應用層的資料一致性含義複雜,這是由於複製所屬層次和複製物件不一樣導致的。其他三層的資料一致性包含兩方面的含義:一是在磁碟上或檔案上的應用程式的資料一致性,這是因為每個應用程式對存在磁碟上的資料都有一個內在的組織結構和秩序,如果這種結構和秩序不完整或被破壞,那應用程式很可能就無法啟動了;二是兩端的資料一致性。在I/O的路徑上各層都有自己的快取,很有可能會滯留一些I/O在自己的快取中。

     如果在系統發生故障時,仍有部分I/O“滯留”在I/O操作中,真正寫到磁碟中的資料就會少於應用程式實際寫出的資料,造成資料的不一致,從而導致結構和秩序不完整或被破壞。非同步複製順序地將這些I/O複製到容災端,故障發生時可能導致I/O複製不完整,從而也會導致這種情況發生,這就是檔案層的複製不可靠的原因。
     邏輯卷層和磁碟層採用同步複製,關閉各層快取,這樣的情況一般不會發生,但是由於應用程式和作業系統的複雜性,這種複雜性本身可能導致I/O的壞塊。同時,這兩層還可能存在卷組一致性的問題,應用程式的資料存在多個邏輯卷或物理卷中,在這兩層中很可能會出現應用程式序列寫而這兩層並行寫的狀況,從而導致磁碟上的資料的寫秩序不一致,這是很可怕的。存在這樣的問題,需要在調研階段搞清楚應用程式的儲存狀況的,從而有針對性的實施方案。

4.非常繁忙的資料庫的容災挑戰
     在一些容災案例中我們可以看到,當SQLServer資料庫面對大量的事務時,採用非順序寫日誌,這與一個空閒的資料庫線性寫日誌完全不同,顛覆了先前對資料庫線性寫日誌的認識。有興趣研究的同行,可以構造一個這樣的測試場景,一直不斷提交事務給資料庫,然後監測資料庫的日誌I/O狀況。我們猜想可能是這樣的原因:當日志快取劇烈消耗時,資料庫程序採用了多執行緒並行寫日誌,這樣的好處可能加快寫的速度,但是採用這樣的寫機制會導致一個亂序的日誌檔案來,對資料庫在磁碟上的狀態來說卻是一個災難;或是,資料庫發出序列的非同步寫呼叫,但作業系統內部並行寫,回覆狀態按照呼叫順序而已,這個猜想可能是錯誤的,這需要很懂Windows作業系統I/O管理機構的技術高手來解釋。
     這樣的SQLServer資料庫寫對其他三層的容災技術來說,簡直就是災難,或許同步複製能保障,但是非同步複製,例如檔案層複製,卻是不能保障容災端資料庫的一致性。所以,檔案層的複製不能確保容災資料庫是好的,只能通過其他機制來補償缺陷,例如通過回滾。
      正因如此,象醫院、證券、海關、稅務、電力、公安、社保、電商、交通、銀行、電信等等提供公共服務的業務系統在工作時間都非常繁忙,這樣的資料庫採用檔案複製來實現容災是不可行的。

三、複製技術的發展趨勢
     四層技術,各有優缺點。就綜合複製技術原理與優缺點、投入成本、資源消耗、實施工作量、維護工作量等等方面來說,應用層的複製和磁碟陣列的複製會成為主要的容災技術,佔據很大的容災市場份額,且應用於關鍵的、重要的應用系統;檔案複製主要用於一些非常低端的應用。
     未來的複製技術發展不是依靠單一技術來解決自身的缺陷問題,應融合其他層的技術來發展。

      應用層要解決複製速度較慢的問題,就是要解決在目標資料庫上的資料裝載效率或裝載方式的問題。解決了這一問題,應用層的複製還會得到更加廣泛的應用。此類方案圍繞應用層這個核心,結合檔案層的快速複製,採用直接的原始資料裝載技術,克服了應用層複製速度慢的問題,是目前應用層裡面做得最好的一種技術路線。
     儲存層要克服資料不一致的問題,不能單純依靠儲存的複製,要結合應用層與資料庫進行一定的互動才能解決。

四、總結
從技術原理、實施、維護、資源消耗、適應場合等等總結四層技術。