溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL中MHA源碼的示例分析

發(fā)布時間:2021-11-02 17:10:09 來源:億速云 閱讀:126 作者:小新 欄目:MySQL數(shù)據(jù)庫

小編給大家分享一下MySQL中MHA源碼的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

MySQL的高可用方案很多,MHA算是其中最流行的一種方案之一。目前最新的版本是0.57,它分為兩部分,一部分水himanager,另外一部分是node.

了解學(xué)習(xí)一個開源項目,閱讀源碼是一個很不錯的開始,所以MHA就成為了我學(xué)習(xí)的一個重點內(nèi)容。我們先從manager開始,當(dāng)然因為這個開源項目是基于perl開發(fā),磨刀不誤砍柴工,我們可以在開發(fā)IDE里面查看,這樣效率更高一些,比如使用eclipse,下載個插件即可。

整個工程的情況如下,bin目錄下是可執(zhí)行的perl腳本,引用的包體邏輯在lib下面的.pm文件中。

MySQL中MHA源碼的示例分析

對于node節(jié)點來說,也是類似的方式,只是node節(jié)點的邏輯內(nèi)容少了很多,主要集中在對于binlog的處理上。

使用MHA,啟停manager是一個基本的入口,所以我們可以在masterha_manager里查看。會發(fā)現(xiàn)腳本其實主要分為兩部分,masterMonitor和MasterFailover。我們就通過main方法來逐步了解。

MySQL中MHA源碼的示例分析

我們切換到MasterMonitor中,查看main方法的內(nèi)容。

MySQL中MHA源碼的示例分析

如果是在IDE里面就很容易看到對應(yīng)的.pm文件MasterMonitor.pm的一個結(jié)構(gòu)概覽,從main方法入手。

MySQL中MHA源碼的示例分析

整個Monitor的核心邏輯就是下面的方法了。這個邏輯是一個循環(huán)中進行心跳的檢測機制。其中wait_until_master_is_dead就是一個重要方法了??梢皂樦@個方向繼續(xù)往里面看。

MySQL中MHA源碼的示例分析

另外一個重要的腳本就是masterha_master_switch了,主要是完成切換的內(nèi)容,如果查看腳本的基本結(jié)構(gòu)會發(fā)現(xiàn),通過檢測主節(jié)點的狀態(tài),會分別調(diào)用MasterFailover和MasterRotate來處理。

MySQL中MHA源碼的示例分析

failover的邏輯如下,我們可以查看對應(yīng)的pm文件MasterFailover.pm來查看邏輯。整體的邏輯如下圖所示,會分為幾個階段。每個階段會有一個整體的校驗步驟。

MySQL中MHA源碼的示例分析

MySQL中MHA源碼的示例分析

通過上面的部分可以看到,整個切換的過程中,后臺會進行一些列的邏輯檢查,比如查到當(dāng)前最新的slave節(jié)點,如何補齊日志信息(本質(zhì)上就是通過mysqlbinlog基于時間戳來處理)

在這個基礎(chǔ)上,通過源碼我們可以看到很多不曾注意的細節(jié),比如如果在8個小時內(nèi)再次切換,是會直接拋錯的。

MySQL中MHA源碼的示例分析

以上是“MySQL中MHA源碼的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI