廖琴 文成玉


摘 要:文章分析了MYSQL數據庫高可用性的需求和實現方案,介紹了同步復制的工作原理、故障自動切換的原理與實現,并用keepalived,來實現虛擬IP的漂移,使服務器在故障切換時不用更改IP,來減少管理員的工作。
關鍵詞:同步復制;自動切換;keepalived
數據庫是現代企業的應用核心,它存儲了組織機構中的重要信息,例如訂單信息、客戶信息、產品信息等等。另外,組織機構的關鍵業務應用的運行還依賴于數據庫。這時數據庫的高可用性是需要考慮的事情。構建一個具有高可用性的IT基礎架構,對一個對于一個希望取得成功的企業來說是至關重要的。
1 同步復制
MySQL的主從同步復制時基于主服務器中的二進制日志中記錄所有對數據庫的操作(包括創建、刪除、更新等等)。而每個從服務器從主服務器中接受其已經記錄到的二進制日子的保存的更新,從而使得從服務器可以對主服務器的數據拷貝來執行相同的更新。然后封鎖并等待主服務器通知新的更新,從服務器在執行備份時不會干擾主服務器跟蹤對數據庫的操作,在備份過程中主服務器依然可以繼續處理更新。
2 故障自動切換
當主服務器發生宕機時,為了避免系統出現錯誤,MySQL數據庫要實現故障自動切換。本文介紹的故障切換方案為MHA[ 1 ]。MHA是一位日本人用Perl寫的一套關于MySQL的故障切換方案,來保證數據庫的高可用性。在主服務器宕機時,MHA能夠在較短時間內實現自動故障檢測和故障切換。通常在10-30秒以內,能夠很好地解決在復制過程中數據一致性的問題。由于不需要在現有的replication中添加額外的服務器,僅需要一個manager節點,而一個Manager能管理多套復制,所以能大大地節約服務器的數量;另外,安裝簡單,無性能損耗,以及不需要修改現有的復制部署也是它的優勢之處。MHA除了能實現自動故障檢測和切換外,還可以被定義成交互式(手動)故障切換、非交互式故障切換和在線切換Master到不同主機。
3 keepalived
利用虛擬路由冗余協議(vrrp)技術[ 2 ],實現LVS(Linux Virtual Server)和HA(High Aviailabitity)。VRRP(Virtual Router Redundancy Protocol,虛擬路由冗余協議)是一種容錯協議,這個協議內的所有路由分為主備,平時數據都是由主節點的IP接口接收轉發,一旦主節點故障,就自動啟動備用節點,奪取主節點的IP,接管主節點的所有轉發工作。本文主要介紹HA(高可用性)的應用。Keepalive的設計結構[ 3 ]如圖1所示。
有圖可知,兩個子進程都被系統WatchDog看管,兩個子進程各自復雜自己的事,healthchecker子進程復雜檢查各自服務器的健康程度,例如HTTP,LVS等等,如果healthchecker子進程檢查到MASTER上服務不可用了,就會通知本機上的兄弟VRRP子進程,讓他刪除通告,并且去掉虛擬IP,轉換為BACKUP狀。
4 應用與實現
為了實現MySQL數據庫的高可用性,采用了在主從同步復制的框架下,用MHA實現故障自動切換并用keepalived實現虛擬IP的漂移。主服務器宕機后,其二進制日志被從服務器接受,此時會選中應用二進制日志最全的一臺從服務器作為新的主服務器。但是主服務器上還有幾條記錄還沒有同步到二進制日志中,所以從服務器也沒有接收到這個事件,如果發生切換,將會丟失這個事件。但是如果切換發生在主從同步復制的框架下,極大的減少了此類的風險。
Keepalived將檢測到服務器的狀態,如果有一臺服務器出現故障時,keepalived將被檢測到并發出警告給指定的郵箱。設置一個虛擬的IP地址,在切換時,keepalived實現這個虛擬IP的漂移,這樣大大的減少了管理人員的工作。因為keepalived非常輕量級,速度非???,配置簡單,所以受到眾多企業運維人員青睞。
針對上文提到的高可用性需求,搭建并測試,結果如下表所示:
5 結論
經過多年的發展,MySQL作為一款開源軟件,已經形成了很多套的高可用性方案。根據不同拓撲環境和要求下,做出相應的改變,來解決一些實際的問題。本文在故障切換的需求下,通過同步復制、MHA和keepalived實現了預期的目標。
參考文獻:
[1] MHA官方文檔翻譯,2014.
[2] 錢景輝,廖鋰.基于keepalived的動態浮動IP集群實現[J].化工自動化及儀表,2012,39(7):926-928.
[3] Keepalived原理與實戰精講,2011.