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