MySQL Replication可擴展設計

   在實際中,採用單機MySQL數據庫的系統可能會隨着數據量的不斷增加,形成讀寫壓力愈來愈大,效率愈來愈低,對外提供的服務也就愈來愈差。同時,因爲沒有冗餘數據的存在,單機數據庫的數據安全性也有潛在的隱患。所以,咱們能夠採用MySQL提供的replication方案來對系統進行升級改造,在提升數據安全性的同時,使系統具備良好的可擴展性。mysql

   在這裏也說一下 MySQL Cluster和MySQL replication的區別
   MySQL Cluster:分佈式的,同步的,操做在全部的機器上提交是同步的,全部機器上的數據是一致的;
   MySQL replication:異步的,master和salve可能數據不一致(由於複製是有延時的,而且不會撤銷)。

    在討論設計方案前,先簡要介紹下 replication的實現原理
    MySQL的replication是一個異步複製過程,從master向slave進行日誌複製(所以必須打開master端binary log功能)。整個複製過程主要由三個線程完成,sql線程和一個IO線程在slave端,另外一個IO線程在master端。複製過程簡單地說,分爲三步:
    1.slave端的IO線程向master請求日誌。
    2.在收到slave的請求後,master端的IO線程讀取日誌信息,並返回給slave。
    3.slave端的sql線程對日誌進行解析,而後執行和master端同樣的操做。
    這樣就使得slave端的數據是master端的一個鏡像,提供了數據的冗餘備份。固然,實際過程遠比上面的描述複雜,能夠參考mysql的官方文檔,也能夠閱讀mysql的源碼獲取內部的具體祕密。

下面說說經常使用的 replication設計架構:   
1.Master-Slaves架構
  架構描述:使用一個master和一個或多個slave服務器,把master端的數據複製到一個或多個slave上。因爲只存在單
                  個master節點,所以對該master節點過於依賴,沒法進行master的切換。
  適用場景:讀壓力比較大的應用(能夠由多個slave進行分擔),寫壓力較小。
  架構圖:
 
    
2.Master-Master架構
  架構描述:在該方案中,每一個節點既充當master,也充當slave。當一個master有寫操做執行時,數據也會複製到其
                 他節點。
  適用場景:讀寫壓力適中,master可能宕機或有須要進行master切換進行維護、升級、改造的場景。
  架構圖:


3.Master-Slaves-Slaves級聯架構
 架構描述:在有些應用中,可能讀寫壓力差異特別大,須要不少slave服務器來支撐讀操做。所以單個master向不少
                 slave的複製操做會延時比較大,並且master壓力很大。改進方法是,master向第一級slave複製,第一級
                 slave向第二級slave複製,依次下去。
 適用場景:讀寫壓力相差特別大,須要不少slave服務器來承擔讀的壓力。
 架構圖:


4.Dual Master與級聯複製結合架構Master-Master-Slavesweb

    架構描述:該架構結合了Master-Master架構和Master-Slaves-Slaves架構的優勢,減小了對單master節點的依賴,同時採用級聯複製,減少了master的壓力。sql

      適用場景:讀寫壓力差異很大,master可能宕機或有須要進行master切換進行維護、升級、改造的場景。
      架構圖:
 

    上面的四種架構並非一成不變的,須要結合業務場景進行選擇,或定製化。畢竟,適合業務的設計纔是最好的設計。

參考文獻:
1.《MySQL性能調優與架構設計》
2.《MySQL 5.1參考手冊》
相關文章
相關標籤/搜索