回覆列表
  • 1 # 坐雲觀潮

    題主問題有意思,要玩轉資料庫高可用可不是件簡單的事情。簡單地說就是,資料庫高可用的關鍵是多副本如何保證一致性,而Paxos共識演算法則正好可以玩轉多副本一致性。

    具體將來,還是先從資料庫高可用性說起。

    高可用英文翻譯為“High Availability”,從字面上理解就是要做到服務的full-time的持續可用,但老實說,要做到full-time是不現實的,因為能夠影響系統服務可用性的因素實在是太多了,除了軟體BUG、硬體故障外還包括系統所依賴的一些第三方服務(如運營商提供的頻寬),甚至還包括天災人禍等。

    我理解的所謂高可用意味著“更少的停服時間”,而工業界也有一套測量系統可用性的標準,即大家所熟知的SLA(Service Level Agreement),也就是幾個9的可用性(如下表):

    在工業應用場景中,如當下提供線上服務的各大網際網路公司,號稱7*24小時的不間斷服務,想想如果只是達到一個99%的可用性將會是一種什麼樣的災難。而要做到5個9的可用性就意味著全年只能有一次服務宕機,而且得在5分鐘左右就恢復,其中的難度也是不言而喻的。只是採用技術手段是不足以做到,還需要透過一整套完備嚴謹的工程管理及相關配套工具、專業運維人員嚴謹的工作等。

    高可用資料庫關鍵技術點

    資料庫服務和很多工業服務在高可用技術方案是相通的,為了實現高可用首先實現服務的“冗餘”,即服務的叢集化。如果服務有冗餘備份,宕機後還有其它備份服務(熱備和冷備)可以使用,所以實現資料庫服務的“冗餘”也是高可用資料庫的核心準則。

    而有了“冗餘”備份後還不夠,如果每次宕機都需要人工恢復切換至備份服務,恢復時間得不到保證,同時人為的故障恢復過程中可能會引入新的風險(人為事故),從而降低了服務的可用性,因此必須還具備“自動故障轉移”功能。

    而資料庫服務相比於其它系統的高可用,在以上兩個關鍵技術點的實現上會更加的困難,因為傳統RDMS對資料和事務的永續性和穩定性是要求非常高的,從也提高了對冗餘資料的一致性的要求和實現難度。

    基於Paxos分散式一致性協議的方案

    Paxos協議主要以多數派投票的方式來就分散式系統中某個值達成一致,該演算法被業界認為唯一的分散式一致性演算法,包括其在內衍生出來的分散式一致性演算法(如Raft等),也在很多肯多開源分散式系統得到應用。Paxos與MySQL相結合可以實現在分散式的MySQL資料庫最終一致性從而保證高可用,而使用分散式演算法用來解決MySQL資料庫資料一致性的問題的方法,也越來越被人們所接受,一系列產品如PhxSQL、MariaDB Galera Cluster、Percona XtraDB Cluster等越來越多的被應用到生產環境,而最近Oracle官方所推出的MySQL Group Replication的GA,更使其在MySQL高可用領域成為了一種民用技術。因此使用分散式協議和多副本來解決資料庫一致性問題已經成為了主流的方向。

  • 中秋節和大豐收的關聯?
  • 鹹魚茄子煲怎麼弄?