突破存儲(chǔ)跨中心雙活方案設(shè)計(jì)階段難點(diǎn)之一:腦裂風(fēng)險(xiǎn)
近年來,作為災(zāi)備方案中高級(jí)別的雙活數(shù)據(jù)中心解決方案逐漸成為了應(yīng)對(duì)傳統(tǒng)災(zāi)備難題的一把利劍,它能夠解決傳統(tǒng)的災(zāi)備方案中資源利用率低、可用性差、出現(xiàn)故障時(shí)停機(jī)時(shí)間長(zhǎng)、數(shù)據(jù)恢復(fù)慢、風(fēng)險(xiǎn)高等問題,但同時(shí)也帶來了很多難點(diǎn)問題。這其中,存儲(chǔ)跨數(shù)據(jù)中心雙活的方案更是雙活數(shù)據(jù)中心架構(gòu)方案中最重要且最艱難的一項(xiàng),能否在方案架構(gòu)選型和設(shè)計(jì)階段,順利地解決和盡量規(guī)避這些存儲(chǔ)雙活的難點(diǎn)問題,對(duì)企業(yè)IT架構(gòu)師團(tuán)隊(duì)的能力有著極大的考驗(yàn)。
為了幫助企業(yè)IT架構(gòu)師理清和解決存儲(chǔ)跨中心雙活方案架構(gòu)的難點(diǎn),IT架構(gòu)師和存儲(chǔ)專家整理出一些方案設(shè)計(jì)中較為典型的難點(diǎn),并特別組織線上交流,邀請(qǐng)專家逐一對(duì)這些難點(diǎn)進(jìn)行解析和解答。
這些難點(diǎn)將包括:
腦裂風(fēng)險(xiǎn)問題、性能影響問題、數(shù)據(jù)一致性風(fēng)險(xiǎn)問題、雙中心間通訊不可控問題、數(shù)據(jù)同步邏輯錯(cuò)誤問題、存儲(chǔ)網(wǎng)絡(luò)故障泛濫問題、集群仲裁一致性問題、存儲(chǔ)多路徑控制的策略問題、存儲(chǔ)雙活后的集群保護(hù)問題、私有云存儲(chǔ)解決方案相結(jié)合的問題等。
突破存儲(chǔ)跨中心雙活方案設(shè)計(jì)階段難點(diǎn)(一):腦裂風(fēng)險(xiǎn)
存儲(chǔ)跨中心雙活方案設(shè)計(jì)階段該如何盡量避免腦裂?
如何避免腦裂是每個(gè)雙機(jī)系統(tǒng)都要重視的問題,存儲(chǔ)雙活系統(tǒng)尤其如此,腦裂會(huì)帶來長(zhǎng)時(shí)間的存儲(chǔ)讀寫IO HANG住,輕則導(dǎo)致業(yè)務(wù)性能下降,重則因磁盤IO超時(shí),導(dǎo)致數(shù)據(jù)庫掛起甚至宕機(jī),對(duì)生產(chǎn)業(yè)務(wù)系統(tǒng)造成重大影響。所以在存儲(chǔ)跨中心雙活架構(gòu)設(shè)計(jì)時(shí),究竟應(yīng)該如何盡量避免腦裂?
解析和解答:
鄧毓 某農(nóng)信社資深骨干工程師
數(shù)據(jù)中心腦裂簡(jiǎn)單說就是兩個(gè)數(shù)據(jù)中心間的網(wǎng)絡(luò)和存儲(chǔ)鏈路同時(shí)發(fā)生中斷,導(dǎo)致兩個(gè)數(shù)據(jù)中心內(nèi)的應(yīng)用、數(shù)據(jù)庫或者操作系統(tǒng)同時(shí)搶占和利用共享的資源,造成資源的數(shù)據(jù)不一致,產(chǎn)生重大影響。
這個(gè)問題是存儲(chǔ)跨中心雙活方案設(shè)計(jì)、實(shí)施階段不可避免要遇到的問題。各個(gè)存儲(chǔ)廠商、存儲(chǔ)虛擬化產(chǎn)品廠商都有自己的避免腦裂的方式:
(1)IBM SVC ESC/HYPERSWAP 或者IBM V9000/V7000/V5000 HYPERSWAP
對(duì)于上述存儲(chǔ)雙活方案架構(gòu)來說,呈現(xiàn)的是一種對(duì)稱式的整體架構(gòu),為了防范腦裂,仲裁站點(diǎn)是必需的。在仲裁站點(diǎn)中,基于IP的quorum節(jié)點(diǎn)和物理quorum磁盤都可以提供腦裂的仲裁服務(wù),存儲(chǔ)雙活集群最多能夠擁有3個(gè)物理quorum磁盤,也可以選擇最多5個(gè)基于IP的quorum節(jié)點(diǎn),這個(gè)基于IP的quorum節(jié)點(diǎn)可以是任何站點(diǎn)的任何服務(wù)器,或者公有云的一個(gè)虛擬機(jī),在這個(gè)服務(wù)器內(nèi)運(yùn)行一個(gè)簡(jiǎn)單的仲裁JAVA程序即可。所以可以看到,基于IP的仲裁服務(wù)其實(shí)大大提高了仲裁站點(diǎn)的選擇空間,節(jié)省了企業(yè)雙活建設(shè)成本,只要求IP可達(dá),延時(shí)在80MS內(nèi)即可。
但是,只有物理quorum磁盤的仲裁方式才能夠被用來做T3 Recovery,所有的SVC節(jié)點(diǎn)都會(huì)將節(jié)點(diǎn)的相關(guān)信息同步至該物理quorum磁盤,當(dāng)節(jié)點(diǎn)或者集群出現(xiàn)故障時(shí),可以通過該物理quorum磁盤進(jìn)行T3 Recovery
在SVC集群中有一個(gè)概念configuration node---配置節(jié)點(diǎn),是配置SVC集群后,系統(tǒng)自動(dòng)產(chǎn)生的保存著所有系統(tǒng)配置行為的節(jié)點(diǎn),不能人工更改配置節(jié)點(diǎn),當(dāng)配置節(jié)點(diǎn)失效后,系統(tǒng)會(huì)自動(dòng)選擇新的配置節(jié)點(diǎn),配置節(jié)點(diǎn)十分重要,它對(duì)SVC節(jié)點(diǎn)仲裁勝利起著決定性作用,仲裁勝利的排序規(guī)則通常如下:
1.配置節(jié)點(diǎn)(配置節(jié)點(diǎn)獲得仲裁勝利的概率***)
2.距離仲裁站點(diǎn)近的節(jié)點(diǎn)(探測(cè)延時(shí)較低的SVC節(jié)點(diǎn)獲得仲裁勝利的概率次之)
3.距離仲裁站點(diǎn)遠(yuǎn)的節(jié)點(diǎn)(探測(cè)延時(shí)較低的SVC節(jié)點(diǎn)獲得仲裁勝利的概率***)
舉例:
當(dāng)兩站點(diǎn)間光纖鏈路中斷,第三站點(diǎn)仲裁節(jié)點(diǎn)活動(dòng)時(shí),腦裂發(fā)生,將通過投票仲裁選舉獲勝的站點(diǎn),按照上述的仲裁勝利規(guī)則,configuration node位于節(jié)點(diǎn)2,選舉站點(diǎn)2優(yōu)先贏得仲裁,通過站點(diǎn)2恢復(fù)業(yè)務(wù)的正常存儲(chǔ)訪問。
當(dāng)?shù)谌军c(diǎn)仲裁節(jié)點(diǎn)不活動(dòng)時(shí),不影響主機(jī)的正常存儲(chǔ)訪問,但是此時(shí),兩站點(diǎn)間光纖鏈路也中斷了,發(fā)生腦裂,這時(shí)因?yàn)楣?jié)點(diǎn)2為configuration node,它所擁有候選的Quorum將變?yōu)閍ctive Quorum,該Quorum選舉站點(diǎn)2為仲裁勝利站點(diǎn),通過站點(diǎn)2恢復(fù)業(yè)務(wù)的正常存儲(chǔ)訪問。
(2)EMC VPLEX Metro
VPLEX有著自己專屬的防腦裂規(guī)則:
1.分離規(guī)則
分離規(guī)則是在與遠(yuǎn)程群集的連接中斷(例如,網(wǎng)絡(luò)分區(qū)或遠(yuǎn)程群集故障)時(shí),確定一致性組 I/O 處理語義的預(yù)定義規(guī)則。在這些情況下,在恢復(fù)通信之前,大多數(shù)工作負(fù)載需要特定虛擬卷集,才能在一個(gè)群集上繼續(xù) I/O 并在另一個(gè)群集上暫停I/O。在 VPLEX Metro 配置中,分離規(guī)則可以描述靜態(tài)***群集,方法是設(shè)置:winner:cluster-1、winner:cluster-2或 No Automatic Winner(無自動(dòng)優(yōu)勝者)(其中,***一項(xiàng)指定無***群集)。如果部署的系統(tǒng)沒有 VPLEX Witness,一致性組設(shè)備 I/O 將在***群集中繼續(xù),并在非***群集中暫停。
2.VPLEX Witness
VPLEX Witness 通過管理 IP 網(wǎng)絡(luò)連接至兩個(gè) VPLEX Metro 群集。VPLEX Witness通過將其自身的觀察與群集定期報(bào)告的信息進(jìn)行協(xié)調(diào),讓群集可區(qū)分群集內(nèi)網(wǎng)絡(luò)分區(qū)故障和群集故障,并在這些情況下自動(dòng)繼續(xù)相應(yīng)站點(diǎn)上的 I/O。VPLEX Witness 僅影響屬于 VPLEX Metro 配置中同步一致性組成員的虛擬卷,并且僅當(dāng)分離規(guī)則指明群集1或群集 2 是一致性組***群集時(shí)才會(huì)影響(也就是說,“無自動(dòng)優(yōu)勝者”規(guī)則未生效時(shí),VPLEX Witness 不影響一致性組)。沒有 VPLEX Witness 時(shí),如果兩個(gè)VPLEX 群集失去聯(lián)系,生效中的一致性組分離規(guī)則將定義哪個(gè)群集繼續(xù)操作以及哪個(gè)暫停 I/O,如上所述。僅使用分離規(guī)則來控制哪個(gè)站點(diǎn)是優(yōu)勝者時(shí),可能會(huì)在出現(xiàn)站點(diǎn)故障時(shí)增加不必要的復(fù)雜性,因?yàn)榭赡苄枰謩?dòng)干預(yù)才能恢復(fù)仍正常運(yùn)行的站點(diǎn) I/O。VPLEX Witness會(huì)動(dòng)態(tài)地自動(dòng)處理此類事件,這也是它成為擴(kuò)展 Oracle RAC 部署絕對(duì)必要項(xiàng)的原因。它提供了以下幾項(xiàng)內(nèi)容:
a.在數(shù)據(jù)中心之間自動(dòng)實(shí)現(xiàn)負(fù)載平衡
b.主動(dòng)/主動(dòng)使用兩個(gè)數(shù)據(jù)中心
c.存儲(chǔ)層的完全自動(dòng)故障處理
為了讓 VPLEX Witness 能夠正確區(qū)分各種故障情況,必須使用互不相同的網(wǎng)絡(luò)接口在獨(dú)立于任意群集的故障域中安裝它。這將消除單個(gè)故障同時(shí)影響群集和 VPLEX Witness 的可能性。例如,如果將 VPLEX Metro 配置的兩個(gè)群集部署在同一數(shù)據(jù)中心的兩個(gè)不同樓層,請(qǐng)?jiān)诓煌瑯菍硬渴?VPLEX Witness。另一方面,如果將 VPLEX Metro 配置的兩個(gè)群集部署在兩個(gè)不同的數(shù)據(jù)中心,請(qǐng)?jiān)诘谌齻€(gè)數(shù)據(jù)中心部署VPLEX Witness。
(3)HDS HAM/GAD
HDS的HAM/GAD存儲(chǔ)雙活方案是建立在VSP TrueCopy同步復(fù)制技術(shù)之上的,整個(gè)架構(gòu)也需要仲裁機(jī)制防止腦裂,能保證心跳故障后,整個(gè)集群系統(tǒng)能對(duì)外提供數(shù)據(jù)一致性存儲(chǔ)服務(wù)。目前,HAM/GAD仲裁的實(shí)現(xiàn)方式有下面幾種:
1、優(yōu)先級(jí)站點(diǎn)方式。這種方式最簡(jiǎn)單,在沒有第三方站點(diǎn)的情況下使用,從兩個(gè)站點(diǎn)中選一個(gè)優(yōu)先站點(diǎn),發(fā)生腦裂后優(yōu)先站點(diǎn)仲裁成功。但如集群果發(fā)生腦裂后,優(yōu)先站點(diǎn)也發(fā)生故障,就是導(dǎo)致業(yè)務(wù)中斷,因此這種方案并非推薦的方案。
2、軟件仲裁方式。這種方式應(yīng)用比較普遍,采用專門的仲裁軟件來實(shí)現(xiàn),仲裁軟件放在第三站點(diǎn),可以跑在物理服務(wù)器或VM上,甚至可以部署到公有云上,PureStorage的ActiveCluster就把仲裁軟件以O(shè)VF文件部署在公有云上。
3、陣列仲裁盤方式。這種方式是在第三站點(diǎn)采用另外一臺(tái)陣列創(chuàng)建仲裁盤。這種方式穩(wěn)定性,可靠性比較高。GAD的仲裁機(jī)制原理是采用仲裁盤的方式實(shí)現(xiàn)。
(4)NETAPP Clustered Metro Cluster(MCC)
MCC的MetroCluster的仲裁軟件TieBreak支持裝在第三站點(diǎn)的linux的主機(jī)上,通過檢查對(duì)節(jié)點(diǎn)Ssh的session對(duì)HA pair和集群進(jìn)行狀態(tài)監(jiān)控。TieBreak軟件能夠在3到5秒內(nèi)檢查到ssh session的故障,重試的時(shí)間間隔為3秒。所以這種方式也很靈活,第三站點(diǎn)可以選擇兩個(gè)數(shù)據(jù)中心中的一個(gè),也可以選擇公有云中的一個(gè)虛擬機(jī),保證SSH網(wǎng)絡(luò)可達(dá),還可以選擇其他建筑內(nèi)的任意一臺(tái)Linux虛擬機(jī)。
(5)IBM DS8800系列HYPERSWAP
DS8800 HYPERSWAP架構(gòu)下的存儲(chǔ)為ACTIVE-STANDBY模式,整體是對(duì)稱式的架構(gòu),但是卻沒有第三仲裁站點(diǎn),在雙數(shù)據(jù)中心間鏈路全部中斷時(shí),要恢復(fù)業(yè)務(wù)需要人為關(guān)閉非存活站點(diǎn)的集群服務(wù),并且修復(fù)鏈路,如下紅皮書原文:
Unplanned HyperSwap: Site partition
In the scenario of Site parttion, the workload continues to run on Site_A.Because both sites are partitioned, each site thinks it is the only surviving site, as such, the nodes in each site try to start the workload on each site.
Running the workload at the same time on both nodes results in data corruption. To maintain data integrity, PowerHA SystemMirror supports recovery mode for HyperSwap through manual workload activation. This option indicates that when the link between the sites is down (both sites are down), user intervention for manual recovery is needed, therefore
maintaining data integrity.
When the site is down, because Auto Recovery Action is not supported, the resource groups(RGs) will remain in the ERROR state. User intervention is needed to correct the problem.
The user has to shut down the cluster services on Site_B and fix the connectivity issues. When done, the user can start the cluster services on Site_B.
趙海 大連農(nóng)商銀行 架構(gòu)師
其實(shí)這個(gè)問題,我覺得還是要看整體的架構(gòu)是什么樣的?
假設(shè)定位到存儲(chǔ)雙活,那么是不是就割裂了數(shù)據(jù)庫層的仲裁問題。實(shí)際上存儲(chǔ)最終是為上層數(shù)據(jù)庫及應(yīng)用服務(wù),如果這個(gè)夸中心的架構(gòu)涉及到數(shù)據(jù)庫、存儲(chǔ)兩層的組合,比如說存儲(chǔ)雙活之上是oracle rac,那么就比較復(fù)雜了。
首先對(duì)于存儲(chǔ)本身的仲裁,應(yīng)該有自己的算法,例如:
1)仲裁中心
2)最壞情況下,默認(rèn)的算法。
對(duì)于夸中心的rac集群,同樣有自己的規(guī)則:
1)仲裁盤
2)通過網(wǎng)絡(luò)和磁盤心跳保證獲得票數(shù)最多的子集活著。
3)實(shí)例小的節(jié)點(diǎn)存活。
但是當(dāng)二者結(jié)合的時(shí)候,就有更復(fù)雜的場(chǎng)景可能會(huì)出現(xiàn),尤其是出現(xiàn)兩層架構(gòu)仲裁的結(jié)果不一致。
為了避免這個(gè)結(jié)果出現(xiàn),那么我們需要攻克以下問題:
1. 如何保障仲裁觸發(fā)的時(shí)間序列一致。
2. 極端情況下的仲裁算法一致性。
例如,你可以通過oracle的仲裁參數(shù)misscount結(jié)合vplex的仲裁timeout參數(shù)來保障時(shí)間序列的一致性。
例如,你也可以調(diào)整各自默認(rèn)算法的最終結(jié)果落到一邊。
例如,你也可以通過二次開發(fā)來實(shí)現(xiàn)二者的聯(lián)動(dòng)。
***,所有的前提條件和策略都需要得到模擬實(shí)踐的檢驗(yàn)。