您好,登錄后才能下訂單哦!
小編給大家分享一下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個小時內再次切換,是會直接拋錯的。
以上是“MySQL中MHA源碼的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。