1.1、Keepalived簡介
Keepalived是Linux下一個輕量級別的高可用解決方案。高可用(High Avalilability,HA),其實兩種不同的含義:廣義來講,是指整個系統的高可用行,狹義的來講就是之主機的冗余和接管,
它與HeartBeat RoseHA 實現相同類似的功能,都可以實現服務或者網絡的高可用,但是又有差別,HeartBeat是一個專業的、功能完善的高可用軟件,它提供了HA 軟件所需的基本功能,比如:心跳檢測、資源接管,檢測集群中的服務,在集群節點轉移共享IP地址的所有者等等。HeartBeat功能強大,但是部署和使用相對比較麻煩,
與HeartBeat相比,Keepalived主要是通過虛擬路由冗余來實現高可用功能,雖然它沒有HeartBeat功能強大,但是Keepalived部署和使用非常的簡單,所有配置只需要一個配置文件即可以完成,
1.2、Keepalived是什么?
Keepalived起初是為LVS設計的,專門用來監控集群系統中各個服務節點的狀態,它根據TCP/IP參考模型的第三、第四層、第五層交換機制檢測每個服務節點的狀態,如果某個服務器節點出現異常,或者工作出現故障,Keepalived將檢測到,並將出現的故障的服務器節點從集群系統中剔除,這些工作全部是自動完成的,不需要人工干涉,需要人工完成的只是修復出現故障的服務節點。
后來Keepalived又加入了VRRP的功能,VRRP(Vritrual Router Redundancy Protocol,虛擬路由冗余協議)出現的目的是解決靜態路由出現的單點故障問題,通過VRRP可以實現網絡不間斷穩定運行,因此Keepalvied 一方面具有服務器狀態檢測和故障隔離功能,另外一方面也有HA cluster功能,下面介紹一下VRRP協議實現的過程。
1.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出現故障,接着多台BAKCUP就會進行選舉,優先級最高的BACKUP將稱為新的MASTER,這種選舉角色切換非常之快,因而保證了服務的持續可用性。
1.4、Keepalvied的工作原理
上面我們介紹了Keepalived通過VRRP實現高可用性的工作原理,而Keepalived作為一個高性能集群軟件,它還能實現對集群中服務器運行狀態的監控以及故障隔離,下面我們介紹一下Keepalived對服務器運行狀態和故障隔離的工作原理。
Keepalived工作在TCP/IP 參考模型的 三層、四層、五層,也就是分別為:網絡層,
傳輸層和應用層,根據TCP、IP參數模型隔層所能實現的功能,Keepalived運行機制如下:
在網絡層:我們知道運行這4個重要的協議,互聯網絡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將把對應的服務器從服務器集群中剔除
1.5、Keepalived體系結構
Keepalived體系結構圖
Keepalived起初是為LVS設計的,由於Keeplalived可以實現對集群節點的狀態檢測,而IPVS可以實現負載均衡功能,因此,Keepalived借助於第三方模塊IPVS就可以很方便地搭建一套負載均衡系統,在這里有個誤區,由於Keepalived可以和IPVS一起很好的工作,很多學員都以為Keepalived就是一個負載均衡軟件,這種理解是錯誤,
在Keepalived當中IPVS模塊是可配置的,如果需要負載均衡功能,可以在編譯Keepalived時開打負載均衡功能,也可以通過編譯參數關閉。
NetLINK模塊主要用於實現一些高級路由框架和一些相關參數的網絡功能,完成用戶空間層Netlink Reflector模塊發來的各種網絡請求。
這個圖我們可以看到用戶空間層,是建立在內核空間層之上的,
(1)用戶空間層,主要有4個部分:
Scheduler I/O Multiplexer 是一個I/O復用分發調度器,它負載安排Keepalived所有內部的任務請求,
Memory Mngt 是一個內存管理機制,這個框架提供了訪問內存的一些通用方法
Control Plane 是keepalived的控制版面,可以實現對配置文件編譯和解析
Core componets 這部分主要保護呢了5個部分
Watchdog:是計算機可靠領域中極為簡單又非常有效的檢測工具,Keepalived正是通過它監控Checkers和VRRP進程的。
Checkers: 這是Keepalived最基礎的功能,也是最主要的功能,可以實現對服務器運行狀態檢測和故障隔離。
VRRP Stack: 這時keepalived后來引用VRRP功能,可以實現HA集群中失敗切換功能。
IPVS wrapper: 這個是IPVS功能的一個實現,IPVS warrper模塊將可以設置好的IPVS規則發送的內核空間並且提供給IPVS模塊,最終實現IPVS模塊的負載功能。
Netlink Reflector:用來實現高可用集群Failover時虛擬IP(VIP)的設置和切換 ,
Netlink Reflector的所有請求最后都發送到內核空間層的NETLINK 模塊來完成。
http://blog.chinaunix.net/uid-26575352-id-3529109.html
http://www.elecfans.com/d/700023.html