Keepalived 軟件起初是專爲 LVS 負載均衡軟件設計的,用來管理並監控 LVS 集羣系統中各個服務節點的狀態,後來又加入了能夠實現高可用的 VRRP 功能。所以,Keepalived除了可以管理 LVS 軟件外,還能夠做爲其餘服務(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件。html
Keepalived 軟件主要經過 VRRP 協議實現高可用功能的,VRRP 是 Virtual Router Redundancy Protocol (虛擬路由器冗餘協議)的縮寫,VRRP 出現的目的就是爲了解決動態路由單點故障問題的,它可以保證當個別節點宕機時,整個網絡能夠不間斷的運行。因此,Keepalived 一方面具備配置管理 LVS 的功能,同時還具備對LVS 下面節點進行健康檢查的功能,另外一方面也能夠實現系統網絡服務的高可用功能。安全
Keepalived 軟件的官方站點: http://www.keepalived.org服務器
1)管理 LVS 負載均衡軟件網絡
早期的 LVS 軟件,須要經過命令行或腳本實現管理,而且沒有針對 LVS 節點的健康檢查功能。爲了解決 LVS 的這些使用不便的問題,Keepalived就誕生了,能夠說,Keepalived軟件起初是專爲了解決 LVS 的問題而誕生的。所以,Keepalived和LVS的感情很深,它們的關係如同夫妻同樣,能夠緊密的結合,愉快的工做。Keepalived 能夠經過讀取自身的配置文件實現經過更底層的接口直接管理 LVS 的配置以及控制服務的啓動、中止等功能,這使得 LVS 的應用就更加簡單方便了。負載均衡
2)實現對 LVS 集羣節點健康檢查功能(healthcheck)加密
Keepalived 能夠經過在自身的keepalived.conf文件裏配置 LVS 的節點 IP 和相關參數實現對 LVS 的直接管理;除此以外,當 LVS 集羣中的某一個甚至是幾個節點服務器同時發生故障沒法提供服務時,Keepalived 服務會自動將失效的節點服務器從 LVS 的正常轉發隊列中清楚出去,並轉換到別的正常節點服務器上,從而保證最終用戶的訪問不受影響;當故障的節點服務器被修復後,Keepalived 服務又會自動地把它們加入到正常轉發隊列中,對客戶提供服務。spa
3)做爲系統網絡服務的高可用功能(failover)命令行
Keepalived 能夠實現任意兩臺主機之間,例如 Master 和 Backup 主機之間的故障轉移和自動切換,這個主機能夠是普通的不能停機的業務服務器,也能夠是 LVS 負載均衡、Nginx 反向代理這樣的服務器。設計
Keepalived 高可用功能實現的原理爲:兩臺主機同時安裝好 keepalived 軟件並啓動服務,開始正常工做時,由角色爲 Master 的主機得到全部資源並對用戶提供服務,角色 Backup 的主機做爲 Master 主機的熱備;當角色爲 Master 的主機失效或出現故障時,角色爲 Backup 的主機將自動接管 Master 主機的全部工做,包括接管 VIP 資源及相應資源服務;而當角色爲 Master 的主機故障修復後,又會自動接管回它原來處理的工做,角色爲 Backup 的主機則同時釋放 Master 主機失效它接管的工做,此時,兩臺主機將恢復到最初啓動時各自的原始角色及工做狀態。代理
Keepalived 高可用服務對之間的故障切換轉移,是經過 VRRP 協議(虛擬路由冗餘協議)來實現的。
在 Keepalived 服務正常工做時,主 Master 節點會不斷地向備節點發送(多播的方式)心跳消息,用以告訴備 Backup 節點本身還活着,當主 Master 節點發生故障時,就沒法發送心跳消息了,備節點也就所以沒法繼續檢測到來自Master 節點的心跳了,進而調用自身的接管程序,接管主 Master 節點的 IP 資源及服務。而當主 Master 節點恢復時,備 Backup 節點又會釋放主節點故障時自身接管的 IP 資源及服務,恢復到原來備用角色。
VRRP 協議,全稱 Virtual Router Redundancy Protocol,中文名爲虛擬路由冗餘協議,VRRP 的出現就是爲了解決靜態路由的單點故障問題,VRRP 協議是經過一種競選機制來將路由的任務交給某臺 VRRP 路由器的。VRRP 協議早期是用來解決交換機、路由器等設備單點故障的。
1)VRRP 原理描述(一樣適用於 Keepalived 的工做原理)
在一組 VRRP 路由器集羣中,有多臺物理 VRRP 路由器,可是這多臺物理的機器並非同時工做的,而是由一臺稱爲 MASTER 的機器負責路由工做,其餘的機器都是 BACKUP。MASTER 角色並不是一成不變,VRRP 協議會讓每一個 VRRP 路由參與競選,最終獲勝的就是 MASTER。MASTER 擁有虛擬路由器的 IP 地址,咱們把這個 IP 地址稱爲 VIP,MASTER 負責轉發發送給網關地址的數據包和響應 ARP 請求。
2)VRRP 是如何工做的?
VRRP 協議經過競選機制來實現虛擬路由器的功能,全部的協議報文都是經過 IP 多播(默認的多播地址:224.0.0.18)形式進行發送。虛擬路由器由 VRID (範圍0-255)和一組 IP 地址組成,對外表現爲一個周知的 MAC 地址:00-00-5E-00-01-{VRID}。因此,在一個虛擬路由器中,無論誰是 MASTER,對外都是相同的 MAC 地址和 IP 地址,若是其中一臺虛擬路由器宕機,角色發生切換,那麼客戶端並不須要由於 MASTER 的變化修改本身的路由設置,能夠作到透明的切換。這樣就實現了若是一臺機器宕機,那麼備用的機器會擁有 MASTER 上的 IP 地址,實現高可用功能。
3)VRRP 是如何通訊的?
在一組虛擬路由器中,只有做爲 MASTER 的 VRRP 路由器會一直髮送 VRRP 廣播包,此時 BACKUP 不會搶佔 MASTER 。當 MASTER 不可用時,這個時候 BACKUP 就收不到來自 MASTER 的廣播包了,此時多臺 BACKUP 中優先級最高的路由器會去搶佔爲 MASTER。這種搶佔是很是快速的(可能只有1秒甚至更少),以保證服務的連續性。出於安全性考慮,VRRP 數據包使用了加密協議進行了加密。
什麼是腦裂?
因爲某些緣由,致使兩臺高可用服務器在指定時間內,沒法檢測到對方的心跳消息,各自取得資源及服務的全部權,而此時的兩臺高可用服務器都還活着並在正常運行,這樣就會致使同一個 IP 或服務在兩端同時存在發生衝突,最嚴重的是兩臺主機佔用同一個 VIP 地址,當用戶寫入數據時可能會分別寫入到兩端,這可能會致使服務器兩端的數據不一致或形成數據丟失,這種狀況就被稱爲腦裂。
致使腦裂發生的緣由
通常來講,腦裂的發生,有如下幾種緣由:
1)高可用服務器之間心跳線鏈路故障,致使沒法正常通訊。
2)高可用服務器上開啓了 iptables 防火牆阻擋了心跳消息傳輸。
3)高可用服務器上心跳網卡地址等信息配置不正確,致使發送心跳失敗。
4)其餘服務配置不當等緣由,如心跳方式不一樣,心跳廣播衝突、軟件 BUG等。
注意:Keepalived 配置裏同一 VRRP 實例若是 virtual_router_id 參數兩端配置不一致,也會致使腦裂問題發生。
解決腦裂的具體方案
在實際生產環境中,能夠從如下幾個方面來防止腦裂問題的發生
1)同時使用串行電纜和以太網電纜鏈接,同時用兩條心跳線路,這樣一條線路壞了,另外一個仍是好的,依然可以傳送心跳消息
2)當檢測到腦裂時強行關閉一個心跳節點(這個功能須要特殊設備支持,如Stonith、fence)。至關於備節點接收不到心跳消息,發送關機命令經過單獨的線路關閉主節點的電源。
3)作好對腦裂的監控報警(如郵件及手機短信等或值班),在問題發生時人爲第一時間介入仲裁,下降損失。例如,百度的監控報警短信就有上行和下行的區別。報警信息報到管理員手機上,管理員能夠經過手機回覆對應數字或簡單的字符串操做返回給服務器,讓服務器根據指令自動處理相應故障,這樣解決故障的時間更短。
4)若是開啓防火牆,必定要讓心跳消息經過,通常經過容許 IP 段的形式。
Keepalived >>>配置詳解