MySQL的複製技術主要經歷了異步主從複製,半同步複製,組複製(Group Replication)3個階段。算法
(1)傳統的異步主從複製數據庫
傳統的MySQL提供了一種簡單的主從複製方法。有1個主服務器(master),有1個或多個從服務器(slave),主服務器執行事務,而後提交,從服務器異步接收日誌,並從新應用日誌。服務器
該架構存在的問題有:若是主服務器/數據庫crash了,日誌沒有完成傳送到備庫,那麼當備庫切換爲主庫的時候,可能存在數據丟失的風險。網絡
異步複製架構以下:架構
圖1.MySQL Asynchronous Replication併發
(2)半同步複製異步
半同步複製向同步協議添加一個步驟,這意味着主庫在執行提交的時候,須要等待從庫確認已經接收到事務,才能進行提交。分佈式
該架構存在的問題有:主庫必須等待備庫接收到日誌並返回響應纔算完成事物,形成了主庫的延遲,這個延遲最少是一個TCP/IP往返的時間,所以半同步複製最好在延遲低的網絡中使用spa
半同步複製架構以下:日誌
圖2.MySQL semisynchronous Replication
(3)組複製
組複製是一種可用於實施容錯系統的技術。組複製是一組服務器,每一個服務器都有本身的完整數據副本,並經過消息傳遞相互交互。一個組複製由多個服務器組成,該組中的每一個服務器均可以隨時獨立執行事務。可是,全部讀寫事務僅在得到組批准後才提交,換句話說,對於任何讀寫事務,該組都須要肯定提交,所以提交操做不是來自原始服務器的單方面決定。只讀事務不須要組內協調,能夠當即提交。
組複製能夠是單主模式和多主模式,多主模式意味全部組成員均可以執行寫操做,這樣就可能存在事務衝突,根據組複製衝突監測機制,若是存在兩個不一樣的server成員更新同一行的併發事務,排在最前面的能夠在全部server成員上提交,第二個事務在源server上回滾,並在組中的其它server上刪除。
圖3.MySQL Group Replication
關於三種複製技術,我的以爲:異步複製提供了主從方案,下降了單節點運行數據庫的風險;後續的半同步複製是異步主從複製的增強,解決了數據丟失的風險,可是依然存在網絡延遲,切換麻煩的問題(例如10個節點,1主9從,主節點宕機,當把一個從節點提高爲主節點後,其它節點須要手動修改master),而組複製則擁有了自動故障轉移failover的能力,當主節點發生故障(單主模式才需考慮)時,組內部會自動選擇主節點。
組複製創建在Paxos分佈式算法之上,以提供服務器之間的分佈式協調,所以,他須要大多數服務器處於活動狀態才能正常工做。若是有n臺服務器,最多容許故障的服務器數量爲f,那麼n與f之間的關係爲:n=2f+1。或許這麼看有些難以理解,能夠看下面的關係:
組複製服務器數量 | 多數 | 容許故障的服務器數量 |
1 | 1 | 0 |
2 | 2 | 0 |
3 | 2 | 1 |
4 | 3 | 1 |
5 | 3 | 2 |
6 | 4 | 2 |
7 | 4 | 3 |
對組複製有了必定的瞭解,接下來,咱們一塊兒來搭建組複製。。。