看多了應用服務的高可用架構,咱們來看看數據庫的高可用吧。mysql
數據存儲高可用的方案本質都是經過將數據複製到多個存儲設備,經過數據冗餘的方式來實現高可用。常見的高可用架構有主備、主從、主主、集羣、分區等,接下來咱們聊聊每種架構的優缺點。sql
一、基本架構拓撲圖以下 數據庫
總體架構簡單,幾乎全部的數據庫都提供了主備複製的功能,例如Mysql、Oracle、MongoDB等。在這種架構中備庫主要承擔數據備份的做用,不參與實際業務讀寫操做,若是把備機改爲主機須要人工操做。安全
二、優缺點分析 主備架構的優勢就是簡單,具體表現有:架構
這種架構的缺點也比較明顯:運維
主從架構與主備架構只有一字之差,可是對於實際應用架構差距卻很大。在主備架構中備庫不參與業務操做,而在主從架構中從庫是須要參與業務操做的,應用架構須要作讀寫分離,將寫操做寫入主庫,而讀操做從從庫讀。性能
一、主從基本架構拓撲圖以下 設計
二、優缺點分析 這種架構在少許寫和大量讀時很是有用。能夠把讀分攤到多個備庫上,減小主庫的壓力,直到從庫給主庫形成了太大的負擔,或者主從之間的帶寬成爲瓶頸爲止。code
相比於主備架構,它有以下優勢:blog
缺點:
上面兩種架構都存在兩個共同問題:
基於以上兩個問題咱們須要一個能自動切換的架構,當主庫出了故障後能自動將從庫切換成主庫,無需運維人員干預。 要實現主從切換架構必需要考慮一個關鍵點:必需要有一個機制能監測到數據庫節點的運行狀態,以此來決定是否切換。 這種架構咱們通常會引入一個第三方中介,數據庫節點定時向第三方中介彙報本身的狀態信息;或者第三方中介定時去數據庫節點拉取數據庫狀態;
優勢:
這裏推薦你們瞭解一下mysql的MHA
架構,或者使用ZK、Keepalived本身搭建主從切換架構。
主主架構又叫主主複製,兩臺數據庫都是主庫,互相將數據複製給對方,客戶端能夠挑選任意一臺數據庫進行讀寫操做。
相比於主從切換,主主架構有以下優勢:
可是容許向兩臺主數據庫寫入是一件很危險的事:
tb
都有1個字段col,數值爲1。如A庫執行 update tb set col = col +1
,B庫執行update tb set col = col * 2
,最終執行完一臺數據的值變成了4,另外一臺數據庫的值變成了3,並且沒有任何複製錯誤,一旦出了問題須要很久才能定位。 因此主主架構必需要保證數據可以雙向複製,對數據的設計有嚴格的要求,通常適用於那些臨時性,可丟失、可覆蓋的數據場景。歡迎關注個人我的公衆號:JAVA日知錄