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