MySQL常用的4種主從複製架構
目錄
複製的4中常見架構有一主多從複製架構、多級複製架構、雙主(Dual Master)複製架構和多源(Multi-Source)複製架構。
一主多從複製架構
在主庫讀取請求壓力非常大的場景下,可以通過配置一主多從複製架構實現讀寫分離,把大量的對實時性要求不是特別高的讀請求通過負載均衡分部到多個從庫上(對於實時性要求很高的讀請求可以讓從主庫去讀),降低主庫的讀取壓力,如下圖所示。
在主庫出現異常宕機的情況下,可以把一個從庫切換為主庫繼續提供服務。
在主從複製場景下會出現主從延遲,想想該怎麼解決?
多級複製架構
一主多從的架構能夠解決大部分讀請求壓力特別大的的場景的需求,考慮到MySQL的複製需要主庫傳送BINLOG日誌到從庫的I/O執行緒,主庫的I/O壓力和網路壓力會隨著從庫的增加而增長(每個從庫都會在主庫上有一個獨立的BINLOG Dump執行緒來發送事件),而多級複製架構解決了一主多從場景下的,主庫額外的I/O和網路壓力。MySQL的多級複製架構如下圖所示。
對比一主多從的架構,多級複製僅僅是在主庫Master1複製到從庫Slave1、Slave2、Slave3的中間增加了一個二級主庫Master2,這樣,主庫Master1只需要給一個從庫Master2傳送BINLOG日誌即可,減輕了主庫Master1的壓力。二級主庫Master2再發送BINLOG日誌給所有的從庫Slave1、Slave2和Slave3的I/O執行緒。
多級複製解決了一主多從場景下,主庫的I/O負載和網路壓力,當然也有缺點:MySQL的傳統複製是非同步的,多級複製場景下主庫的資料是經歷兩次複製才到達從庫Slave1、Slave2、Slave3的,期間的延遲要比一主多從複製場景下只經歷一次複製的還大。
可以通過在二級主庫Master2上選擇表引擎為BLACKHOLE來降低多級複製的延遲。顧名思義,BLACKHOLE引擎是一個“黑洞”引擎,寫入BLACKHOLE表的資料並不會寫會到磁碟上,BLACKHOLE表永遠都是空表,INSERT、UPDATE、DELETE操作僅僅在BINLOG中記錄事件。
CREATE TABLE `user` ( `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` varchar(255) NOT NULL DEFAULT '', `age` tinyint unsigned NOT NULL DEFAULT 0 )ENGINE=BLACKHOLE charset=utf8mb4; INSERT INTO `user` (`name`,`age`) values("itbsl", "26"); SELECT * FROM `user`;
可以看到,儲存引擎為BLACKHOLE的user表裡沒有資料。
BLACKHOLE引擎非常適合二級主庫Masger2的場景:Master2並不承擔讀寫請求,僅僅負責將BINLOG日誌儘快傳送給從庫。
雙主(Dual Master)複製架構
雙主(Dual Master)複製架構適用於DBA做維護時需要主從切換的場景,通過雙主複製架構避免了重複搭建從庫的麻煩,雙主複製架構如下圖所示。
主庫Master1和Master互為主從,所有Web Client的寫請求都訪問主庫Master1或Master2。加入,DBA需要做日常維護操作,為了避免影響服務,需進行一下操作。
- 首先,在Master1庫上停止Slave執行緒(STOP SLAVE),避免後續對Master2庫的維護操作操作被實時複製到Master1庫上對服務造成影響。
- 其次,在Master2庫上停止Slave執行緒(STOP SLAVE),開始日常維護操作,例如修改varchar欄位從長度10增加到200。
- 然後,在Master2庫上完成維護操作之後,開啟Master2庫上的Slave執行緒(STRART SLAVE),讓Master2的資料和Master1庫同步,同步完成後,把應用的寫操作切換到Master2庫上。
- 最後,確認Master1庫上沒有應用訪問後,開啟Master1的Slave執行緒(START SLAVE)即可。
通過雙主複製架構能夠大大減輕一主多從架構下對主庫進行維護帶來的額外搭建從庫的工作。
當然雙主架構還能和主從複製聯合起來使用:在Master2庫下配置從庫Slave1、Slave2等,這樣既可通過從庫Slave1等來分擔讀取壓力,同時在DBA做維護的同時,避免了重建從庫的額外工作,但需要注意從庫的複製延遲。MySQL雙主多級複製架構如下所示。
多源(Multi-Source)複製架構
多源(Multi-Source)複製架構適用於複雜的業務需求,既可以支撐OLTP(聯機事務處理),也可以滿足OLAP(聯機分析處理)。MySQL的多源複製架構我就暫時不畫啦,等有空再畫好補充上(畫圖也是個體力活呀)。有興趣的可以看《深入淺出MySQL資料庫開發、優化與管理維護》這本書。
如何優化主從延遲問題?
- 優化網路環境
- 在MySQL5.5~MySQL5.6中,使用半同步複製
- 在MySQL5.7中,可以使用增強半同步複製(也稱為無損複製)
關於MySQL主從延遲的具體資訊,可以看我的另一篇文章聊聊MySQL主從複製的幾種複製方式。
轉載請註明連結:https://www.cnblogs.com/itbsl/p/13508625.html
如果該文章對您有幫助,請點選推薦,感謝。