keepalived介紹
keepalived觀察其名可知,保持存活,在網絡里面就是保持在線了,也就是所謂的高可用或熱備,它集群管理中保證集群高可用的一個服務軟件,其功能類似於heartbeat,用來防止單點故障(單點故障是指一旦某一點出現故障就會導致整個系統架構的不可用)的發生。說到keepalived就不得不說VRRP協議,可以說這個協議就是keepalived實現的基礎,那么首先我們來看看VRRP協議。
VRRP協議介紹
學過網絡的朋友都知道,網絡在設計的時候必須考慮到冗余容災,包括線路冗余,設備冗余等,防止網絡存在單點故障,那在路由器或三層交換機處實現冗余就顯得尤為重要。
在網絡里面有個協議就是來做這事的,這個協議就是VRRP協議,Keepalived就是巧用VRRP協議來實現高可用性(HA)的發生。
VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協議。對於VRRP,需要清楚知道的是:
1)VRRP是用來實現路由器冗余的協議。
2)VRRP協議是為了消除在靜態缺省路由環境下路由器單點故障引起的網絡失效而設計的主備模式的協議,使得發生故障而進行設計設備功能切換時可以不影響內外數據通信,不需要再修改內部網絡的網絡參數。
3)VRRP協議需要具有IP備份,優先路由選擇,減少不必要的路由器通信等功能。
4)VRRP協議將兩台或多台路由器設備虛擬成一個設備,對外提供虛擬路由器IP(一個或多個)。然而,在路由器組內部,如果實際擁有這個對外IP的路由器如果工作正常的話,就是master,或者是通過算法選舉產生的,MASTER實現針對虛擬路由器IP的各種網絡功能,如ARP請求,ICMP,以及數據的轉發等,其他設備不具有該IP,狀態是BACKUP。除了接收MASTER的VRRP狀態通告信息外,不執行對外的網絡功能,當主級失效時,BACKUP將接管原先MASTER的網絡功能。
5)VRRP協議配置時,需要配置每個路由器的虛擬路由ID(VRID)和優先權值,使用VRID將路由器進行分組,具有相同VRID值的路由器為同一個組,VRID是一個0-255的整整數,;同一個組中的路由器通過使用優先權值來選舉MASTER。,優先權大者為MASTER,優先權也是一個0-255的正整數。
keepalived工作原理
keepalived可提供vrrp以及health-check功能,可以只用它提供雙機浮動的vip(vrrp虛擬路由功能),這樣可以簡單實現一個雙機熱備高可用功能;keepalived是以VRRP虛擬路由冗余協議為基礎實現高可用的,可以認為是實現路由器高可用的協議,即將N台提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在局域網內其他機器的默認路由為該vip),master會發組播,當backup收不到VRRP包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。
下圖是keepalived的組件圖
keepalived也是模塊化設計,不同模塊復雜不同的功能,它主要有三個模塊,分別是core、check和VRRP,其中:
core模塊:為keepalived的核心組件,負責主進程的啟動、維護以及全局配置文件的加載和解析;
check:負責健康檢查,包括常見的各種檢查方式;
VRRP模塊:是來實現VRRP協議的。
system call:系統調用
watch dog:監控check和vrrp進程的看管者,check負責檢測器子進程的健康狀態,當其檢測到master上的服務不可用時則通告vrrp將其轉移至backup服務器上。
除此之外,keepalived還有下面兩個組件:
libipfwc:iptables(ipchains)庫,配置LVS會用到
libipvs*:配置LVS會用到
注意,keepalived和LVS完全是兩碼事,只不過他們各負其責相互配合而已。
keepalived正常啟動的時候,共啟動3個進程:
一個是父進程,負責監控其子進程;一個是VRRP子進程,另外一個是checkers子進程;
兩個子進程都被系統watchlog看管,兩個子進程各自負責復雜自己的事。
Healthcheck子進程檢查各自服務器的健康狀況,,例如http,lvs。如果healthchecks進程檢查到master上服務不可用了,就會通知本機上的VRRP子進程,讓他刪除通告,並且去掉虛擬IP,轉換為BACKUP狀態。
Keepalived作用
Keepalived主要用作RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現。Keepalived的作用是檢測web服務器的狀態,如果有一台web服務器死機,或工作出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工作正常后Keepalived自動將web服務器加入到服務器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的web服務器。
----------------------------------------------------------------------------------------------------------------------------
Keepalived和Heartbeat之間的對比
1)Keepalived使用更簡單:從安裝、配置、使用、維護等角度上對比,Keepalived都比Heartbeat要簡單得多,尤其是Heartbeat2.1.4后拆分成3個子項目,安裝、配置、使用都比較復雜,尤其是出問題的時候,都不知道具體是哪個子系統出問題了;而Keepalived只有1個安裝文件、1個配置文件,配置文件也簡單很多;
2)Heartbeat功能更強大:Heartbeat雖然復雜,但功能更強大,配套工具更全,適合做大型集群管理,而Keepalived主要用於集群倒換,基本沒有管理功能;
3)協議不同:Keepalived使用VRRP協議進行通信和選舉,Heartbeat使用心跳進行通信和選舉;Heartbeat除了走網絡外,還可以通過串口通信,貌似更可靠;
Keepalived使用的vrrp協議方式,虛擬路由冗余協議 ;Heartbeat是基於主機或網絡的服務的高可用方式;
Keepalived的目的是模擬路由器的雙機;Heartbeat的目的是用戶service的雙機
4)使用方式基本類似:如果要基於兩者設計高可用方案,最終都要根據業務需要寫自定義的腳本,Keepalived的腳本沒有任何約束,隨便怎么寫都可以;Heartbeat的腳本有約束,即要支持service start/stop/restart這種方式,而且Heartbeart提供了很多默認腳本,簡單的綁定ip,啟動apache等操作都已經有了;
使用建議:
優先使用Keepalived,當Keepalived不夠用的時候才選擇Heartbeat
lvs的高可用建議用Keepavlived
業務的高可用用Heartbeat