MySQL MHA原始碼解析
MySQL的高可用方案很多,MHA算是其中最流行的一種方案之一。目前最新的版本是0.57,它分為兩部分,一部分水himanager,另外一部分是node.
瞭解學習一個開源專案,閱讀原始碼是一個很不錯的開始,所以MHA就成為了我學習的一個重點內容。我們先從manager開始,當然因為這個開源專案是基於perl開發,磨刀不誤砍柴工,我們可以在開發IDE裡面檢視,這樣效率更高一些,比如使用eclipse,下載個外掛即可。
整個工程的情況如下,bin目錄下是可執行的perl指令碼,引用的包體邏輯在lib下面的.pm檔案中。
對於node節點來說,也是類似的方式,只是node節點的邏輯內容少了很多,主要集中在對於binlog的處理上。
使用MHA,啟停manager是一個基本的入口,所以我們可以在masterha_manager裡檢視。會發現指令碼其實主要分為兩部分,masterMonitor和MasterFailover。我們就透過main方法來逐步瞭解。
我們切換到MasterMonitor中,檢視main方法的內容。
如果是在IDE裡面就很容易看到對應的.pm檔案MasterMonitor.pm的一個結構概覽,從main方法入手。
整個Monitor的核心邏輯就是下面的方法了。這個邏輯是一個迴圈中進行心跳的檢測機制。其中wait_until_master_is_dead就是一個重要方法了。可以順著這個方向繼續往裡面看。
另外一個重要的指令碼就是masterha_master_switch了,主要是完成切換的內容,如果檢視指令碼的基本結構會發現,透過檢測主節點的狀態,會分別呼叫MasterFailover和MasterRotate來處理。
failover的邏輯如下,我們可以檢視對應的pm檔案MasterFailover.pm來檢視邏輯。整體的邏輯如下圖所示,會分為幾個階段。每個階段會有一個整體的校驗步驟。
透過上面的部分可以看到,整個切換的過程中,後臺會進行一些列的邏輯檢查,比如查到當前最新的slave節點,如何補齊日誌資訊(本質上就是透過mysqlbinlog基於時間戳來處理)
在這個基礎上,透過原始碼我們可以看到很多不曾注意的細節,比如如果在8個小時內再次切換,是會直接拋錯的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2145884/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MHA選擇主庫原始碼解析原始碼
- 【MySQL】MHA原始碼之主庫選取(二)MySql原始碼
- MHA原始碼分析原始碼
- 【MySQL】MHA原始碼之監控檢查(一)MySql原始碼
- MHA原始碼分析——環境部署原始碼
- 【MHA】mysql高可用之MHAMySql
- Mysql MHA部署-04MHA配置MySql
- mysql之MHAMySql
- MySQL MHA配置MySql
- MySQL MHA部署 Part 5 MHA部署指南MySql
- 【Mysql】MHA的原理MySql
- MySQL MHA介紹MySql
- 【MySQL】MHA安裝MySql
- MySQL核心原始碼解讀-SQL解析一MySql原始碼
- Mysql MHA部署-03MHA軟體安裝MySql
- Mysql 5.7 MHA 高可用MySql
- MySQL MHA部署實戰MySql
- MySQL MHA高可用方案MySql
- mysql HA 方案(2):MHAMySql
- mysql HA 方案(3):MHAMySql
- mysql5.7MHA配置MySql
- MySQL MHA部署 Part 6 MHA故障轉移測試MySql
- MySQL核心原始碼解讀-SQL解析之解析器淺析MySql原始碼
- 【原始碼解析】- ArrayList原始碼解析,絕對詳細原始碼
- 深入解析:從原始碼窺探MySQL優化器原始碼MySql優化
- MySQL MHA部署 Part 7 MHA手動切換測試MySql
- MYSQL + MHA +keepalive + VIP安裝配置(二)--MHA的配置MySql
- 【Mysql】MHA配置虛擬ipMySql
- Spark原始碼-SparkContext原始碼解析Spark原始碼Context
- CountDownLatch原始碼解析CountDownLatch原始碼
- LeakCanary原始碼解析原始碼
- vuex原始碼解析Vue原始碼
- ArrayBlockQueue原始碼解析BloC原始碼
- AsyncTask原始碼解析原始碼
- CopyOnWriteArrayList原始碼解析原始碼
- Express原始碼解析Express原始碼
- Observer原始碼解析Server原始碼
- SparseArray 原始碼解析原始碼