數(shù)據(jù)庫高可用漫談
前幾天,在首席群里討論,某些人已經(jīng)實現(xiàn)了在常去的城市都有房產(chǎn)了,出差都有自己的房住(當(dāng)然有沒有其他的目的就不得而知了)。相較于外出住酒店,兩種方式各有優(yōu)劣:
- 自有房產(chǎn)是自己的,住著安全放心
- 自有房產(chǎn)需要持續(xù)維護:平時需要打掃衛(wèi)生,交物業(yè)費,裝修家具等等
- 在不同城市的自有房產(chǎn)水平不同:房屋面積,裝修家具水平,交通,周邊等等
- 酒店不是自己的,可能有安全風(fēng)險
- 酒店不需要持續(xù)投入,隨到隨住
- 酒店可以提供更多的選擇
- …
上面的內(nèi)容借用德哥今天公眾號結(jié)尾的一句話“其實這段內(nèi)容(原文為:這篇文章)的內(nèi)容和標(biāo)題是匹配的, 只是我還沒想好到底有什么關(guān)聯(lián)”。
數(shù)據(jù)庫的高可用究竟是什么,我覺得還是得從實際需求場景來:
- 如果你的業(yè)務(wù)不允許中斷,那么數(shù)據(jù)庫的高可用目標(biāo)就是能夠持續(xù)提供數(shù)據(jù)庫能力
- 如果你的業(yè)務(wù)允許短時間中斷,那么數(shù)據(jù)庫的高可用目標(biāo)就是能夠快速恢復(fù)拉起的能力
- 如果你的業(yè)務(wù)允許較長時間中斷,那么數(shù)據(jù)庫高可用的目標(biāo)就是有辦法能夠恢復(fù)數(shù)據(jù)庫即可
- 如果你的業(yè)務(wù)無關(guān)緊要,那么數(shù)據(jù)庫高可用的目標(biāo)就是…可以算沒有目標(biāo)
(Oracle Maximum Availability Architecture (MAA))
那么從我個人角度以盡可能高的要求來看看數(shù)據(jù)庫的高可用。
1 主從架構(gòu)
(MySQL Replication)
主從架構(gòu)是我們用的比較多的高可用架構(gòu),除了上圖MySQL Replication,Oracle有(Active) DataGuard,PostgreSQL也有類似的主從架構(gòu)。主從架構(gòu)的優(yōu)點其實是架構(gòu)簡單,大多數(shù)主從架構(gòu)除了可以實現(xiàn)異地的數(shù)據(jù)容災(zāi)以外,也可以提供讀寫分離的能力(即主寫備讀),提升數(shù)據(jù)庫整體性能表現(xiàn)。
主從架構(gòu)主要需要考慮的問題是在switchover或failover后,應(yīng)用能夠正確連接到正確角色的數(shù)據(jù)庫上,在這一點上MySQL提供了MySQL Router,三方開源則有MHA和Orchestrator等;Oracle則有TAC和GDS等。
2 集群
這里說的集群要區(qū)分于分布式架構(gòu),主要涉及MySQL Group Replication(MGR)和Oracle RAC架構(gòu)等。
(Oracle Real Application Cluster (RAC))
這里的集群主要是在實例級別提供高可用,即集群內(nèi)部分實例故障,不影響數(shù)據(jù)庫提供服務(wù)。但在RAC架構(gòu)中仍可能有存儲的單點故障,因此存儲側(cè)也應(yīng)該實現(xiàn)高可用。當(dāng)然在集群之上也可以和主從架構(gòu)配合使用,提供異地容災(zāi)能力。
(Oracle RAC+DG)
3 分布式
無論是Redis、MongoDB還是大量的國產(chǎn)數(shù)據(jù)庫,都提供了分布式數(shù)據(jù)庫架構(gòu)。
(OceanBase 4.x)
其實簡單來看,就是每個分片內(nèi)以主從或者副本的方式,分片每個節(jié)點可以在不同的地域,實現(xiàn)高可用。而數(shù)據(jù)庫的訪問接口則一般通過分布式集群本身來管理并提供服務(wù)。分布式架構(gòu)中,只要不是某個分片的所有節(jié)點全掛的情況出現(xiàn),理論上不會出現(xiàn)數(shù)據(jù)庫異常。
4 誤區(qū)
前兩天一朋友的數(shù)據(jù)庫通過主從架構(gòu)上線實現(xiàn)了國產(chǎn)數(shù)據(jù)庫的上線,本是一件好事,但是有些人卻說,不是分布式,高可用不行啊。其實反觀下整體架構(gòu),這些人為啥看不到,別人用1+1的節(jié)點解決了分布式需要10+臺服務(wù)器才能解決的問題。不得不說,分布式數(shù)據(jù)庫在高可用上看似非常美好,但是節(jié)點數(shù)量的提升帶來的管理壓力提升、元數(shù)據(jù)維護增加、網(wǎng)絡(luò)壓力增大等,而且分布式不一定適合所有應(yīng)用場景產(chǎn)生的數(shù)據(jù)結(jié)構(gòu)和業(yè)務(wù)場景(這里還不考慮業(yè)務(wù)代碼變更)。
5 光是數(shù)據(jù)庫?
舉個栗子,數(shù)據(jù)庫實現(xiàn)異地容災(zāi),且前端應(yīng)用可以自動連接到對應(yīng)角色的實例。但是業(yè)務(wù)應(yīng)用程序卻只部署在了一個地方,那么如果這個地方整個IDC出現(xiàn)異常,那么前端業(yè)務(wù)同樣不可能實現(xiàn)容災(zāi)切換,所以應(yīng)用程序也需要多地部署。
總結(jié)
本期淺談了一下數(shù)據(jù)庫的高可用,我認(rèn)為一切還是從需求出發(fā),結(jié)合可接受成本來做高可用。
老規(guī)矩,知道寫了些啥。






























