從分布式數(shù)據(jù)庫(kù)需要不需要備機(jī)談起
經(jīng)常有行業(yè)客戶和我討論分布式數(shù)據(jù)庫(kù)的備機(jī)問(wèn)題,實(shí)際上這個(gè)問(wèn)題與其說(shuō)是技術(shù)問(wèn)題,更可以說(shuō)是一個(gè)政治問(wèn)題。就像昨天各大群里都在討論的日本核污染水的問(wèn)題,有些人認(rèn)為是技術(shù)問(wèn)題,有些人認(rèn)為技術(shù)上沒(méi)問(wèn)題,是政治問(wèn)題。我不是核物理專(zhuān)家,也不是環(huán)境生態(tài)學(xué)家分辨不出哪個(gè)觀點(diǎn)對(duì),哪個(gè)觀點(diǎn)不對(duì)。我想哪怕是核物理學(xué)家和環(huán)境生態(tài)學(xué)家,面對(duì)這個(gè)人類(lèi)史無(wú)前例的舉動(dòng),也不一定能搞得明白。有些事情可能得十幾二十年后再來(lái)看才能看清楚。
與搞不清核污染水排放的問(wèn)題類(lèi)似,在數(shù)據(jù)安全領(lǐng)域有些時(shí)候也是很難搞清楚的。因?yàn)榻^對(duì)的可用性是不存在的,現(xiàn)實(shí)世界中的數(shù)據(jù)庫(kù)安全是投資與可用性之間的游戲。單一數(shù)據(jù)庫(kù)存在單點(diǎn)故障,那么主備機(jī)同時(shí)故障的可能性就不存在了嗎?當(dāng)然存在,只是概率低了一點(diǎn)而已。我在十多年前就遇到過(guò)客戶主數(shù)據(jù)庫(kù)、ADG備庫(kù)、磁帶備份三大保障措施同時(shí)失效的悲劇,這種低概率事件落到你頭上就是100%。二十多年前我和一個(gè)銀行的主管交流數(shù)據(jù)庫(kù)可用性的時(shí)候,他說(shuō)他們?yōu)榱舜_保可用性,主備機(jī)不能使用同一批次的小型機(jī),同一個(gè)磁盤(pán)組里的磁盤(pán)不能使用同一批次生產(chǎn)的磁盤(pán)。我問(wèn)他為什么,他說(shuō)他們?cè)?jīng)出過(guò)一次故障,是因?yàn)橐粋€(gè)批次購(gòu)買(mǎi)的幾臺(tái)小型機(jī)中同時(shí)有3臺(tái)在同一天里出現(xiàn)了內(nèi)存故障,不幸的是,其中兩臺(tái)是核心數(shù)據(jù)庫(kù)服務(wù)器,當(dāng)時(shí)使用HACMP高可用切換,切換時(shí)HANG死了,核心交易停了幾個(gè)小時(shí),事后就有了這個(gè)規(guī)定。
分布式數(shù)據(jù)庫(kù)自身具有高可用機(jī)制,比如Oceanbase在一些金融行業(yè)應(yīng)用時(shí)是采用5副本機(jī)制的,一種典型的配置是2副本在主機(jī)房,2副本在備機(jī)房,第五副本在第三機(jī)房。這樣的配置,在絕大多數(shù)情況下出現(xiàn)故障,都可以快速的通過(guò)切換來(lái)保證業(yè)務(wù)系統(tǒng)的正常運(yùn)行。不過(guò)有沒(méi)有可能存在2個(gè)機(jī)房同時(shí)故障甚至三個(gè)機(jī)房同時(shí)故障的可能性呢?雖然這種可能性存在,但是幾率很小。那么基于這個(gè)原則,使用分布式數(shù)據(jù)庫(kù)之后就不需要備機(jī)了嗎?好像也沒(méi)有那么簡(jiǎn)單,按照金融機(jī)構(gòu)的安全要求,兩地三中心、主備機(jī)高可用切換,這是監(jiān)管要求。雖然這個(gè)監(jiān)管要求出臺(tái)是在集中式數(shù)據(jù)庫(kù)大行其道的時(shí)候頒布的,但是只要一天不修改條款,金融機(jī)構(gòu)就必須嚴(yán)格的遵守。雙倍的可靠性更加安全也是十分肯定的,因此只要手頭的銀子夠,給分布式數(shù)據(jù)庫(kù)搞個(gè)備機(jī)也不是不可能的。
還有一個(gè)需要考慮的因素是,分布式數(shù)據(jù)庫(kù)本身會(huì)不會(huì)出問(wèn)題。相信分布式數(shù)據(jù)庫(kù)的高可用還要看數(shù)據(jù)庫(kù)本身有沒(méi)有問(wèn)題。就像以前我們通過(guò)extended RAC來(lái)做同城雙活一樣,這套雙機(jī)房四節(jié)點(diǎn)部署的extended RAC系統(tǒng),哪怕增加了第三機(jī)房的第五塊投票盤(pán),也不能確保任何時(shí)候都不出問(wèn)題,一旦整個(gè)集群出問(wèn)題了,那么數(shù)據(jù)庫(kù)就掛了。因此能做得起extended RAC的用戶我們都會(huì)讓用戶再上一個(gè)ADG,一旦整個(gè)RAC出問(wèn)題了,ADG還可以接管大部分核心業(yè)務(wù)。實(shí)際上分布式數(shù)據(jù)庫(kù)的可靠性也不會(huì)比Oracle RAC高多少,也會(huì)出現(xiàn)整個(gè)數(shù)據(jù)庫(kù)出問(wèn)題的可能性。因此哪怕監(jiān)管沒(méi)有需求,對(duì)于銀行賬務(wù)這樣的核心系統(tǒng),做個(gè)備機(jī)也是十分必要的,金融賬務(wù)安全,哪怕再小心都還是值得的。
對(duì)于絕大多數(shù)用戶來(lái)說(shuō),給RAC,分布式數(shù)據(jù)庫(kù)做一個(gè)備機(jī),能用上的概率都是極小的,我參與過(guò)的一些基于extended RAC的雙活項(xiàng)目,從來(lái)沒(méi)有發(fā)生過(guò)主數(shù)據(jù)庫(kù)故障必須切換到ADG的情況。不過(guò)extended RAC故障,沒(méi)有備機(jī),導(dǎo)致業(yè)務(wù)中斷的案例還是聽(tīng)說(shuō)過(guò)幾次的。要不要建備機(jī)與風(fēng)險(xiǎn)和投入的比例關(guān)系有關(guān),這是一個(gè)政治問(wèn)題,不是技術(shù)問(wèn)題。從技術(shù)底線上說(shuō),備機(jī)肯定更安全,不過(guò)也更花錢(qián)。誰(shuí)要是和我說(shuō)分布式數(shù)據(jù)庫(kù)不需要備機(jī),那我也只能說(shuō)你自己覺(jué)得就行,天底下沒(méi)有三十年不漏的磚瓦房,數(shù)據(jù)庫(kù)也是人一行行代碼寫(xiě)出來(lái)的,哪怕是有了備機(jī),也無(wú)法保證100%不出問(wèn)題,只要是出了問(wèn)題你能扛得住就行。