1. 程式人生 > 其它 >java人才飽和,詳細的Java學習指南

java人才飽和,詳細的Java學習指南

java人才飽和,詳細的Java學習指南

主備同步的實現原理

我們先來了解一下主備同步的原理,下面以一個update語句來介紹主庫與備庫間是如何進行同步的。

上圖是一個update語句在節點A執行,然後同步到節點B的完整流程圖,具體步驟有:

  1. 主庫接受到客戶端傳送的一條update語句,執行內部事務邏輯,同時寫binlog。
  2. 備庫通過 change master 命令,設定主庫的IP、埠、使用者名稱和密碼,以及要從哪個位置開始請求 binlog。這個位置包含檔名和偏移量。
  3. 在備庫上執行start slave命令,啟動兩個執行緒 io_thread 和 sql_thread,其中 io_thread 負責與主機進行連線。
  4. 主庫校驗完使用者名稱和密碼,按照接收到的位置去讀取binlog,發給備庫。
  5. 備庫接收到binlog後,寫到本地檔案(relay log,中轉檔案)。
  6. 備庫讀取中轉檔案,解析出命令,然後執行。

主備同步的工作原理其實就是一個完全備份加上二進位制日誌備份的還原。不同的是這個二進位制日誌的還原操作基本上是實時的。

備庫通過兩個執行緒來實現同步:

  • 一個是 I/O 執行緒,負責讀取主庫的二進位制日誌,並將其儲存為中繼日誌。
  • 一個是 SQL 執行緒,負責執行中繼日誌。

從上面的流程可以看出,主備同步的關鍵是binlog。

常見的兩種主備切換流程

M-S結構

M-S結構,兩個節點,一個當主庫、一個當備庫,不允許兩個節點互換角色。

在狀態1中,客戶端的讀寫都直接訪問節點A,而節點B是A的備庫,只是將A的更新都同步過來,到本地執行。這樣可以保持節點B和A的資料是相同的。

當需要切換的時候,就切成狀態2。這時候客戶端讀寫訪問的都是節點B,而節點A是B的備庫。

雙M結構

雙M結構,兩個節點,一個當主庫,一個當備庫,允許兩個節點互換角色。

對比前面的M-S結構圖,可以發現,雙M結構和M-S結構,其實區別只是多了一條線,即節點A和B之間總是互為主備關係。這樣在切換的時候就不用再修改主備關係。

雙M結構的迴圈複製問題

在實際生產使用中,多數情況是使用雙M結構的。但是,雙M結構還有一個問題需要解決。

業務邏輯在節點A執行更新,會生成binlog並同步到節點B。節點B同步完成後,也會生成binlog。(log_slave_updates設定為on,表示備庫也會生成binlog)。

當節點A同時也是節點B的備庫時,節點B的binlog也會發送給節點A,造成迴圈複製。

解決辦法:

  • 設定節點的server-id,必須不同,不然不允許設定為主備結構
  • 備庫在接到binlog後重放時,會記錄原記錄相同的server-id,即誰產生即為誰的。
  • 每個節點在接受binlog時,會判斷server-id,如果是自己的就丟掉。

解決後的流程:

  1. 業務邏輯在節點A執行更新,會生成帶有節點A的server-id的binlog。
  2. 節點B接受到節點A發過來的binlog,並執行完成後,會生成帶有節點A的server-id的binlog。
  3. 節點A接受到binlog後,發現是自己的,就丟掉。死迴圈就在這裡斷掉了。

最後在出來放一波福利吧!希望可以幫助到大家!

戳此獲取免費學習資料

千千萬萬要記得:多刷題!!多刷題!!

之前演算法是我的硬傷,後面硬啃了好長一段時間才補回來,演算法才是程式設計師的靈魂!!!!

篇幅有限,以下只能截圖分享部分的資源!!

(1)多執行緒(這裡以多執行緒為代表,其實整理了一本JAVA核心架構筆記集)

(2)刷的演算法題(還有左神的演算法筆記)

(3)面經+真題解析+對應的相關筆記(很全面)

(4)視訊學習(部分)

ps:當你覺得學不進或者累了的時候,視訊是個不錯的選擇

其實以上我所分享的所有東西,有需要的話我這邊可以免費分享給大家,但請一定記住獲取方式:點選這裡前往免費獲取

在這裡,最後只一句話:祝大家offer拿到手軟!!