1、Keepalived介紹
Keepalived是Linux下一個輕量級的高可用解決方案,它與HeartBeat、RoseHA實現的功能相似,均可以實現服務或者網絡的高可用,可是又有差異:HeartBeat是一個專業的、功能完善的高可用軟件,它提供了HA軟件所需的基本功能,好比心跳檢測和資源接管,監測集羣中的系統服務,在羣集節點間轉移共享IP地址的全部者等,HeartBeat功能強大,可是部署和使用相對比較麻煩;與HeartBeat相比,Keepalived主要是經過虛擬路由冗餘來實現高可用功能,雖然它沒有HeartBeat功能強大,但Keepalived部署和使用很是簡單,全部配置只需一個配置文件便可完成。這也是本章重點介紹Keepalived的緣由。
2、Keepalived是什麼
Keepalived起初是爲LVS設計的,專門用來監控集羣系統中各個服務節點的狀態。它根據layer3, 4 & 5交換機制檢測每一個服務節點的狀態,若是某個服務節點出現異常,或工做出現故障,Keepalived將檢測到,並將出現故障的服務節點從集羣系統中剔除,而在故障節點恢復正常後,Keepalived又能夠自動將此服務節點從新加入到服務器集羣中,這些工做所有自動完成,不須要人工干涉,須要人工完成的只是修復出現故障的服務節點。
Keepalived後來又加入了VRRP的功能,VRRP是Virtual Router Redundancy Protocol(虛擬路由器冗餘協議)的縮寫,它出現的目的是爲了解決靜態路由出現的單點故障問題,經過VRRP能夠實現網絡不間斷地、穩定地運行。所以,Keepalived一方面具備服務器狀態檢測和故障隔離功能,另外一方面也具備HA cluster功能.下面詳細介紹下VRRP協議的實現過程。
3、 VRRP協議與工做原理
在現實的網絡環境中,主機之間的通訊都是經過配置靜態路由(默認網關)完成的,而主機之間的路由器一旦出現故障,通訊就會失敗,所以,在這種通訊模式中,路由器就成了一個單點瓶頸,爲了解決這個問題,就引入了VRRP協議。
熟悉網絡的讀者對VRRP協議應該並不陌生。它是一種主備模式的協議,經過VRRP能夠在網絡發生故障時透明地進行設備切換而不影響主機間的數據通訊,這其中涉及兩個概念:物理路由器和虛擬路由器。
VRRP能夠將兩臺或多臺物理路由器設備虛擬成一個虛擬路由器,這個虛擬路由器經過虛擬IP(一個或多個)對外提供服務,而在虛擬路由器內部,是多個物理路由器協同工做,同一時間只有一臺物理路由器對外提供服務,這臺物理路由器被稱爲主路由器(處於MASTER角色)。通常狀況下MASTER由選舉算法產生,它擁有對外服務的虛擬IP,提供各類網絡功能,如ARP請求、ICMP、數據轉發等。而其餘物理路由器不擁有對外的虛擬IP,也不提供對外網絡功能,僅僅接收MASTER的VRRP狀態通告信息,這些路由器被統稱爲備份路由器(處於BACKUP角色)。當主路由器失效時,處於BACKUP角色的備份路由器將從新進行選舉,產生一個新的主路由器進入MASTER角色繼續提供對外服務,整個切換過程對用戶來講徹底透明。
每一個虛擬路由器都有一個惟一標識,稱爲VRID,一個VRID與一組IP地址構成了一個虛擬路由器。在VRRP協議中,全部的報文都是經過IP多播形式發送的,而在一個虛擬路由器中,只有處於MASTER角色的路由器會一直髮送VRRP數據包,處於BACKUP角色的路由器只接收MASTER發過來的報文信息,用來監控MASTER運行狀態,所以,不會發生BACKUP搶佔的現象,除非它的優先級更高。而當MASTER不可用時,BACKUP也就沒法收到MASTER發過來的報文信息,因而就認定MASTER出現故障,接着多臺BACKUP就會進行選舉,優先級最高的BACKUP將成爲新的MASTER,這種選舉並進行角色切換的過程很是快,於是也就保證了服務的持續可用性。
4、Keepalived工做原理
上節簡單介紹了Keepalived經過VRRP實現高可用功能的工做原理,而Keepalived做爲一個高性能集羣軟件,它還能實現對集羣中服務器運行狀態的監控及故障隔離。下面繼續介紹下Keepalived對服務器運行狀態監控和檢測的工做原理。
Keepalived工做在TCP/IP參考模型的第3、第四和第五層,也就是網絡層、傳輸層和應用層。根據TCP/IP參考模型各層所能實現的功能,Keepalived運行機制以下。
在網絡層,運行着四個重要的協議:互連網協議IP、互連網控制報文協議ICMP、地址轉換協議ARP以及反向地址轉換協議RARP。Keepalived在網絡層採用的最多見的工做方式是經過ICMP協議向服務器集羣中的每一個節點發送一個ICMP的數據包(相似於ping實現的功能),若是某個節點沒有返回響應數據包,那麼就認爲此節點發生了故障,Keepalived將報告此節點失效,並從服務器集羣中剔除故障節點。
在傳輸層,提供了兩個主要的協議:傳輸控制協議TCP和用戶數據協議UDP。傳輸控制協議TCP能夠提供可靠的數據傳輸服務,IP地址和端口,表明一個TCP鏈接的一個鏈接端。要得到TCP服務,須在發送機的一個端口上和接收機的一個端口上創建鏈接,而Keepalived在傳輸層就是利用TCP協議的端口鏈接和掃描技術來判斷集羣節點是否正常的。好比,對於常見的Web服務默認的80端口、SSH服務默認的22端口等,Keepalived一旦在傳輸層探測到這些端口沒有響應數據返回,就認爲這些端口發生異常,而後強制將此端口對應的節點從服務器集羣組中移除。
在應用層,能夠運行FTP、TELNET、SMTP、DNS等各類不一樣類型的高層協議,Keepalived的運行方式也更加全面化和複雜化,用戶能夠經過自定義Keepalived的工做方式,例如用戶能夠經過編寫程序來運行Keepalived,而Keepalived將根據用戶的設定檢測各類程序或服務是否容許正常,若是Keepalived的檢測結果與用戶設定不一致時,Keepalived將把對應的服務從服務器中移除。
5、Keepalived的體系結構
Keepalived是一個高度模塊化的軟件,結構簡單,但擴展性很強,若有興趣的讀者,能夠閱讀下Keepalived的源碼。下圖是官方給出的Keepalived體系結構拓撲圖。
算法
從圖中能夠看出,Keepalived的體系結構從總體上分爲兩層,分別是用戶空間層(User Space)和內核空間層(Kernel Space).下面介紹Keepalived兩層結構的詳細組成及實現的功能。
內核空間層處於最底層,它包括IPVS和NETLINK兩個模塊。IPVS模塊是Keepalived引入的一個第三方模塊,經過IPVS能夠實現基於IP的負載均衡集羣。IPVS默認包含在LVS集羣軟件中。而對於LVS集羣軟件,相信作運維的朋友並不陌生:在LVS集羣中,IPVS安裝在一個叫作Director Server的服務器上,同時在Director Server上虛擬出一個IP地址來對外提供服務,而用戶必須經過這個虛擬IP地址才能訪問服務。這個虛擬IP通常稱爲LVS的VIP,即Virtual IP。訪問的請求首先通過VIP到達Director Server,而後由Director Server從服務器集羣節點中選取一個服務節點響應用戶的請求。
Keepalived最初就是爲LVS提供服務的,因爲Keepalived能夠實現對集羣節點的狀態檢測,而IPVS能夠實現負載均衡功能,所以,Keepalived藉助於第三方模塊IPVS就能夠很方便地搭建一套負載均衡系統。在這裏有個誤區,因爲Keepalived能夠和IPVS一塊兒很好地工做,所以不少初學者都覺得Keepalived就是一個負載均衡軟件,這種理解是錯誤的。
在Keepalived中,IPVS模塊是可配置的,若是須要負載均衡功能,能夠在編譯Keepalived時打開負載均衡功能,反正,也能夠經過配置編譯參數關閉。
NETLINK模塊主要用於實現一些高級路由框架和一些相關的網絡功能,完成用戶空間層Netlink Reflector模塊發來的各類網絡請求。
用戶空間層位於內核空間層之上,Keepalived的全部具體功能都在這裏實現,下面介紹、幾個重要部分所實現的功能。
在用戶空間層,Keepalived又分爲四個部分,分別是Scheduler I/O Multiplexer、Memory Management、Control Plane和Core components。其中,Scheduler I/O Multiplexer是一個I/O複用分發調度器,它負責安排Keepalived全部內部的任務請求。Memory Management是一個內存管理機制,這個框架提供了訪問內存的一些通用方法。Control Plane是Keepalived的控制面板,能夠實現對配置文件進行編譯和解析,Keepalived的配置文件解析比較特殊,它並非一次解析全部模塊的配置,而是隻有在用到某模塊時才解析相應的配置。最後詳細說一下Core components,這個部分是Keepalived的核心組件,包含了一些列功能模塊,主要有WatchDog、Checkers、VRRP Stack、IPVS wrapper和Netlink Reflector,下面介紹每一個模塊所實現的功能以下。
(1)WatchDog
WatchDog是計算機可靠性領域中一個極爲簡單又很是有效的檢測工具,它的工做原理是針對被監視的目標設置一個計數器和一個閾值,WatchDog會本身增長此計數值,而後等待被監視的目標週期性地重置該計數值。一旦被監控目標發生錯誤,就沒法重置此計數值,WatchDog就會檢測到,因而就採起對應的恢復措施,例如重啓或關閉。
在Linux中很早就引入了WatchDog功能,而Keepalived正是經過WatchDog的運行機制來監控Checkers和VRRP進程的。
(2)Checkers
這是Keepalived最基礎的功能,也是最主要的功能,可實現對服務器運行狀態檢測和故障隔離。
(3)VRRP Stack
這是Keepalived後來引入的VRRP功能,能夠實現HA集羣中失敗切換(Failover)功能。Keepalived經過VRRP功能再結合LVS負載均衡軟件便可部署一套高性能的負載均衡集羣系統。
(4)IPVS wrapper
這是IPVS功能的一個實現。IPVS wrapper模塊能夠將設置好的IPVS規則發送到內核空間並提交給IPVS模塊,最終實現IPVS模塊的負載均衡功能。
(5)Netlink Reflector
用來實現高可用集羣中Failover時虛擬IP(VIP)的設置和切換。Netlink Reflector的全部請求最後都發送到內核空間的NETLINK模塊來完成。服務器