陳鐵山
摘要:在計算機數(shù)據(jù)存儲技術發(fā)展過程中,數(shù)據(jù)中心雙活架構采用兩個數(shù)據(jù)中心雙活的解決方案。由于兩個中心同時承擔生產業(yè)務,從而能夠提高數(shù)據(jù)中心整體服務能力和系統(tǒng)資源利用率。本文將探討數(shù)據(jù)中心關系到存儲層高可靠性和高性能各種因素,進而給出優(yōu)化的數(shù)據(jù)算法優(yōu)化設計[1]。
關鍵詞:數(shù)據(jù)中心;存儲層;雙活架構
中圖分類號:TP308;TP333 文獻標識碼:A 文章編號:1672-9129(2020)08-0088-02
引言:雙活數(shù)據(jù)中心的定義是指兩個數(shù)據(jù)中心共享存儲、網(wǎng)絡以及服務器資源,且同時對外提供服務,整個系統(tǒng)具有業(yè)務負載均衡和自動故障切換功能。存儲雙活作為整個系統(tǒng)的核心基礎架構平臺,主要解決以下兩個核心問題。一是數(shù)據(jù)實時同步,零數(shù)據(jù)丟失(Recovery Point Object,RPO=0)。二是存儲資源的虛擬化,應用的自動切換(Recovery Time Objective,RTO≈0)[2]。
1 存儲雙活架構分析
1.1業(yè)界存儲雙活技術方案。當前,存儲業(yè)務有多種實現(xiàn)存儲雙活方案的架構。
按照物理形態(tài)分類:一種是基于存儲網(wǎng)關來實現(xiàn),一種是基于磁盤陣列來實現(xiàn)。照業(yè)務能力分類:一種是A/A模式雙活,雙活的兩端都能提供服務;一種是A/P模式雙活,只有一端提供服務,并且提供服務的一端故障時另一端才提供服務[3]。
上述分類可以兩兩組合成不同的雙活方案,在方案可靠性、業(yè)務連續(xù)性以及可擴展性方面都存在一定差異。
1.2方案可靠性。
按照物理形態(tài)分類:基于存儲網(wǎng)關的雙活方案除了需要在每個站點部署磁盤陣列外,還需在每個站點新增一臺或多臺存儲網(wǎng)關設備,由存儲網(wǎng)關組成一個跨站點的集群,存儲網(wǎng)關導致組網(wǎng)復雜,增加故障節(jié)點;基于磁盤陣列的雙活方案,只需要將每個站點的一臺或多臺全冗余架構的磁盤陣列組成一個跨站點的集群,實現(xiàn)自動故障切換,不需要網(wǎng)關,降低組網(wǎng)復雜度,提高方案可靠性。
此外還要集群的架構,有些集群實際上采用的是Stretched架構,即將一臺陣列的兩個控制器部署在兩個站點,每站點內部只有一個控制器,存在單點故障風險,可靠性低。
1.3雙活架構分析。
按照物理形態(tài)分類:基于存儲網(wǎng)關的雙活方案除了需要在每個站點部署磁盤陣列外,還需在每個站點新增一臺或多臺存儲網(wǎng)關設備,IO路徑為主機——網(wǎng)關——磁盤陣列,相比磁盤陣列方案,因為IO路徑需要經(jīng)過額外網(wǎng)關,比磁盤陣列方案至少多0.5ms的IO處理時間。
按照業(yè)務能力分類:A/A模式雙活采用卷鏡像技術實現(xiàn)兩站點間的數(shù)據(jù)實時同步。兩臺存儲設備上的LUN被虛擬化為一個虛擬的卷,主機寫操作通過卷虛擬化鏡像技術同時寫入這兩個存儲設備,保持數(shù)據(jù)實時一致[4]。其中任何一個存儲設備故障,虛擬卷仍能提供正常的IO讀寫能力,主機業(yè)務不受影響。待存儲設備恢復正常后,存儲虛擬化設備將增量數(shù)據(jù)后臺同步到修復的存儲設備,整個過程對主機“透明”,不會影響主機業(yè)務。
無論哪種類型方案,為了保證兩個數(shù)據(jù)中心存儲的數(shù)據(jù)實時一致,同步復制與虛擬化卷鏡像的寫操作都需要等待兩端存儲同時寫成功之后再返回給主機“寫成功”。因此,兩種架構都將對IO寫操作帶來一定的時延增加,必須提供低時延的網(wǎng)絡,以減小對寫時延的影響。
A/A模式雙活:提供可供兩數(shù)據(jù)中心主機同時進行讀寫訪問的共享存儲卷。主機訪問請求由本數(shù)據(jù)中心所在的存儲網(wǎng)關或磁盤陣列響應,無需跨越同城網(wǎng)絡訪問另一數(shù)據(jù)中心的存儲網(wǎng)關或磁盤陣列。
A/P模式雙活:將一臺存儲網(wǎng)關或磁盤陣列的控制器部署在兩個數(shù)據(jù)中心,且控制器處于主備模式,備控制器無法被主機訪問,只能提供一條備用的存儲路徑,不是真正的雙活。兩個數(shù)據(jù)中心的主機都只能通過訪問其中一個控制器來進行IO讀寫,不僅增長了主機IO的路徑,而且增加了主控制器的業(yè)務壓力,影響系統(tǒng)性能。
2 存儲層的高可靠性和高性能設計
根據(jù)上面的技術對比,經(jīng)過可靠性,性能等因數(shù)評估,本方案選用磁盤陣列實現(xiàn)A/A模式雙活。
2.1存儲層高可靠性設計。存儲層雙活方案采用OceanStor系列產品,實現(xiàn)存儲雙活架構,為兩個數(shù)據(jù)中心存儲同時提供讀寫服務,且整個存儲系統(tǒng)架構全冗余,任意數(shù)據(jù)中心故障時,另外一個數(shù)據(jù)中心有一份存儲設備和相同數(shù)據(jù)可用,最大程度提高了業(yè)務連續(xù)性[5]。
(1)跨站點存儲集群設計。本方案利用跨站點雙活集群技術提供雙活的存儲架構,最大支持32個存儲控制器,向應用服務器提供無差異的并行訪問,同時處理應用服務器的I/O請求;各控制器間互為備份,均衡負載,控制器故障后,其承接的業(yè)務自動切換到正??刂破鳎WC系統(tǒng)的可靠性、業(yè)務的連續(xù)性。
集群間的通信支持FC或10GE鏈路,通信包括集群心跳和數(shù)據(jù)鏡像。
此外本方案無需存儲網(wǎng)關實現(xiàn),降低組網(wǎng)復雜度,提高系統(tǒng)可靠性。
(2)跨站點數(shù)據(jù)鏡像設計。通過HyperMetroLUN功能,保證兩個站點磁盤陣列之間數(shù)據(jù)的實時同步。兩臺存儲設備上的LUN被虛擬化為一個虛擬的卷,主機寫操作通過卷虛擬化鏡像技術同時寫入兩個數(shù)據(jù)中心的存儲設備,保持數(shù)據(jù)實時一致。
假如數(shù)據(jù)中心A陣列收到寫I/O,處理流程如下:
申請寫權限和記錄寫日志:數(shù)據(jù)中心A陣列收到主機寫請求,先申請HyperMetro LUN的寫權限;獲得寫權限后,HyperMetro將該請求記錄寫日志[6];
執(zhí)行雙寫:將該請求拷貝2份分別寫入本地LUN和遠端LUN;
雙寫結果處理:等待兩端LUN的寫處理結果都返回;
響應主機:鏡像卷返回寫I/O操作完成。
如果任何一個存儲設備故障,采用日志記錄故障期間數(shù)據(jù)的變化情況,待存儲設備恢復正常后,將增量數(shù)據(jù)后臺同步到修復的存儲設備,整個過程對主機“透明”,不會影響主機業(yè)務。
(3)跨站點數(shù)據(jù)修復設計。單塊磁盤可能會因為掉電等異常情況出現(xiàn)壞塊。如果是可修復錯誤而且本端無法修復,因為遠端站點有鏡像數(shù)據(jù),則會自動從遠端站點獲取數(shù)據(jù)來修復本地數(shù)據(jù)盤的壞塊,進一步提高系統(tǒng)可靠性。
假如數(shù)據(jù)中心A陣列收到寫I/O,鏡像處理流程如下:
申請讀權限:陣列收到主機讀請求,先確認HyperMetro的本地讀權限;
讀本地LUN;
讀本地LUN結果返回,如果可修復錯誤,執(zhí)行錯誤修復;
重定向遠端讀;
遠端讀返回;
讀結果返回;
本地寫入修復。
(4)邏輯錯誤保護設計。當遭遇病毒攻擊或人為誤操作等異常時,數(shù)據(jù)中心的數(shù)據(jù)可能被破壞。采用虛擬快照技術,在操作前對現(xiàn)有數(shù)據(jù)卷激活快照,實現(xiàn)本地數(shù)據(jù)保護。
虛擬快照采用寫前拷貝(COW)技術,僅將變化的數(shù)據(jù)拷貝至快照卷,系統(tǒng)資源占用少。結合容災管理軟件,激活快照前觸發(fā)數(shù)據(jù)庫完全檢查點,待數(shù)據(jù)下盤完成后,激活快照,保證快照數(shù)據(jù)完全滿足數(shù)據(jù)庫的一致性要求,快速拉起數(shù)據(jù)庫。
(5)高可靠仲裁防腦裂設計。為保證各種異常情況下,存儲雙活集群能夠進行仲裁,設計第三方仲裁站點,以保證極端場景下的業(yè)務連續(xù)性。極端場景包括:出現(xiàn)數(shù)據(jù)中心整體故障或中間鏈路故障等場景,存儲集群仍然可以訪問仲裁服務器進行仲裁,保證業(yè)務可靠性和數(shù)據(jù)一致性[7]。
A.有仲裁站點
為保證任一數(shù)據(jù)中心整體故障或中間鏈路故障等極端場景下,主機業(yè)務的連續(xù)性,方案采用仲裁服務器。
第三方仲裁站點位于XX點,XX點與兩個數(shù)據(jù)中心之間通過XX線互聯(lián)。仲裁服務器可以運行在虛擬機上。
當出現(xiàn)任一數(shù)據(jù)中心整體故障或中間鏈路故障等極端場景,整個集群的仲裁過程如下:
XX數(shù)據(jù)中心與XX數(shù)據(jù)中心之間的中間鏈路斷開,導致兩個數(shù)據(jù)中心集群發(fā)生分裂,進而兩個中心之間的存儲虛擬化平臺發(fā)生“腦裂”,存儲虛擬化平臺從一個大集群分裂為兩個小集群;
根據(jù)集群“腦裂”的通用原理,當大集群分裂為兩個小集群時,每個小集群分別搶占第三方仲裁服務器,搶占成功的小集群“獲勝”,將繼續(xù)對外提供服務,為應用提供存儲訪問空間;
未搶占到仲裁信息的小集群則自動退出集群,不再對外提供服務;
當中間鏈路恢復時,“自動退出的小集群”檢測到中間鏈路由故障變?yōu)檎?,嘗試與“繼續(xù)服務的小集群”握手通信,經(jīng)過握手通信兩個小集群再次組成一個大集群,以Active-Active模式提供服務,互相之間實現(xiàn)冗余。
B.無仲裁站點
若無第三方仲裁站點,用戶在某個數(shù)據(jù)中心部署仲裁服務器,業(yè)務表現(xiàn)和上述的描述大致一致,但如果仲裁服務器所在的數(shù)據(jù)中心整體故障,雙活業(yè)務停止。
若無仲裁服務器,用戶可以設置其中一端陣列為優(yōu)先站點。另一端為非優(yōu)先站點。
當發(fā)生腦裂場景,或者非優(yōu)先站點故障時,優(yōu)先站點上的LUN續(xù)提供服務,非優(yōu)先站點的LUN停止提供服務。
不足之處在于當兩陣列之間失去聯(lián)系,可能是站點間鏈路丟失或其中一個陣列故障。系統(tǒng)不能區(qū)分這兩種情況,當優(yōu)先站點陣列故障時,非優(yōu)先站點不能接管雙活業(yè)務,雙活業(yè)務停止。
(6)異構磁盤陣列高可靠性設計
OceanStor系列還具備虛擬化功能,實現(xiàn)對各種磁盤陣列的統(tǒng)一接管,將數(shù)據(jù)中心內不同類型的磁盤陣列資源池化,實現(xiàn)存儲資源的整合和優(yōu)化,提高資源利用率[8]。
異構虛擬化就是把異構陣列映射到本端陣列的LUN,作為可為本端陣列提供存儲空間的邏輯盤LD,再在該邏輯盤LD上創(chuàng)建為可對主機映射的異構設備LUN eDevLun,邏輯盤LD為eDevLun的數(shù)據(jù)卷Data Volume提供了全部的數(shù)據(jù)存儲空間,eDevLun的元數(shù)據(jù)卷Meta Volume的存儲空間由本地存儲提供。
(7)異地應用容災設計。雙活數(shù)據(jù)中心實現(xiàn)同城容災,同一關鍵業(yè)務負載均衡到雙數(shù)據(jù)中心,單數(shù)據(jù)中心發(fā)生故障,業(yè)務零中斷,數(shù)據(jù)零丟失。為了抵御地域性重大災難,為關鍵業(yè)務提供更高的業(yè)務連續(xù)性保障。雙活數(shù)據(jù)中心支持平滑擴展為兩地三中心,同城實現(xiàn)雙活,異地采用異步復制方式。
2.2存儲層高性能設計。為了保證兩個數(shù)據(jù)中心存儲的數(shù)據(jù)實時一致,寫操作都需要等待兩端存儲同時寫成功之后再返回給主機“寫成功”。因此,將對IO寫操作帶來一定的時延增加,必須提供多種措施,以減小對寫時延的影響。
(1)傳輸協(xié)議優(yōu)化設計。支持存儲協(xié)議優(yōu)化,正常的SCSI流程中,寫IO有“寫分配”和“寫數(shù)據(jù)”這兩次交互,經(jīng)過優(yōu)化變?yōu)橹灰?次交互,該特性將時延縮短一半。該特性對于跨站點寫IO交互次數(shù)減少一半,提升整體雙活性能。
A.讀寫緩存設計
支持同時的讀寫緩存,數(shù)據(jù)分別寫入本地LUN和遠端LUN。通常情況下LUN是回寫狀態(tài),數(shù)據(jù)會寫入該LUN的Cache就會返回,響應更快。不像業(yè)界有些網(wǎng)關是采用透寫的方式,沒有寫緩存。
B.地域優(yōu)化訪問設計
針對雙活數(shù)據(jù)中心場景,兩站點的距離較遠,網(wǎng)絡傳輸時間成為影響系統(tǒng)性能的主要瓶頸,減少跨數(shù)據(jù)中心訪問次數(shù)是優(yōu)化性能的重點。
雙活數(shù)據(jù)中心的跨站點訪問的代價相當高,假如兩個數(shù)據(jù)中心的鏈路距離為100km,一次往返傳輸理論需要消耗1ms時間。本方案提供地域優(yōu)化的訪問技術,可以大幅減少跨站點訪問,從而減少時延提供性能。
(2)優(yōu)化讀設計。針對雙活數(shù)據(jù)中心場景,主機能夠從本地或異地存儲讀取數(shù)據(jù),本方案需要設計“Site Read”模式,以避免主機跨數(shù)據(jù)中心讀取數(shù)據(jù),提升方案整體性能。其讀I/O流程如下:
申請讀權限:陣列收到主機讀請求,先確認HyperMetro的本地讀權限[9];