MySQL Replication可擴展設計
在 實際中,采用單機MySQL數據庫的系統可能會隨著數據量的不斷增長,造成讀寫壓力越來越大,效率越來越低,對外提供的服務也就越來越差。同時,由于沒有 冗余數據的存在,單機數據庫的數據安全性也有潛在的隱患。因此,我們可以采用MySQL提供的replication方案來對系統進行升級改造,在提高數 據安全性的同時,使系統具有良好的可擴展性。
在這里也說一下 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-Slaves
架構描述:該架構結合了Master-Master架構和Master-Slaves-Slaves架構的優點,減少了對單master節點的依賴,同時采用級聯復制,減小了master的壓力。
適用場景:讀寫壓力差別很大,master可能宕機或有需要進行master切換進行維護、升級、改造的場景。
架構圖:
上面的四種架構并不是一成不變的,需要結合業務場景進行選擇,或定制化。畢竟,適合業務的設計才是最好的設計。
參考文獻:
1.《MySQL性能調優與架構設計》
2.《MySQL 5.1參考手冊》
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!