keepalived介紹
keepalived觀察其名可知,保持存活,在網(wǎng)絡(luò)里面就是保持在線了,也就是所謂的高可用或熱備,它集群管理中保證集群高可用的一個服務(wù)軟件,其功能類似于heartbeat,用來防止單點故障(單點故障是指一旦某一點出現(xiàn)故障就會導(dǎo)致整個系統(tǒng)架構(gòu)的不可用)的發(fā)生。說到keepalived就不得不說VRRP協(xié)議,可以說這個協(xié)議就是keepalived實現(xiàn)的基礎(chǔ),那么首先我們來看看VRRP協(xié)議。
VRRP協(xié)議介紹
學(xué)過網(wǎng)絡(luò)的朋友都知道,網(wǎng)絡(luò)在設(shè)計的時候必須考慮到冗余容災(zāi),包括線路冗余,設(shè)備冗余等,防止網(wǎng)絡(luò)存在單點故障,那在路由器或三層交換機(jī)處實現(xiàn)冗余就顯得尤為重要。
在網(wǎng)絡(luò)里面有個協(xié)議就是來做這事的,這個協(xié)議就是VRRP協(xié)議,Keepalived就是巧用VRRP協(xié)議來實現(xiàn)高可用性(HA)的發(fā)生。
VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協(xié)議。對于VRRP,需要清楚知道的是:
1)VRRP是用來實現(xiàn)路由器冗余的協(xié)議。
2)VRRP協(xié)議是為了消除在靜態(tài)缺省路由環(huán)境下路由器單點故障引起的網(wǎng)絡(luò)失效而設(shè)計的主備模式的協(xié)議,使得發(fā)生故障而進(jìn)行設(shè)計設(shè)備功能切換時可以不影響內(nèi)外數(shù)據(jù)通信,不需要再修改內(nèi)部網(wǎng)絡(luò)的網(wǎng)絡(luò)參數(shù)。
3)VRRP協(xié)議需要具有IP備份,優(yōu)先路由選擇,減少不必要的路由器通信等功能。
4)VRRP協(xié)議將兩臺或多臺路由器設(shè)備虛擬成一個設(shè)備,對外提供虛擬路由器IP(一個或多個)。然而,在路由器組內(nèi)部,如果實際擁有這個對外IP的路由器如果工作正常的話,就是master,或者是通過算法選舉產(chǎn)生的,MASTER實現(xiàn)針對虛擬路由器IP的各種網(wǎng)絡(luò)功能,如ARP請求,ICMP,以及數(shù)據(jù)的轉(zhuǎn)發(fā)等,其他設(shè)備不具有該IP,狀態(tài)是BACKUP。除了接收MASTER的VRRP狀態(tài)通告信息外,不執(zhí)行對外的網(wǎng)絡(luò)功能,當(dāng)主級失效時,BACKUP將接管原先MASTER的網(wǎng)絡(luò)功能。
5)VRRP協(xié)議配置時,需要配置每個路由器的虛擬路由ID(VRID)和優(yōu)先權(quán)值,使用VRID將路由器進(jìn)行分組,具有相同VRID值的路由器為同一個組,VRID是一個0-255的整整數(shù),;同一個組中的路由器通過使用優(yōu)先權(quán)值來選舉MASTER。,優(yōu)先權(quán)大者為MASTER,優(yōu)先權(quán)也是一個0-255的正整數(shù)。
keepalived工作原理
keepalived可提供vrrp以及health-check功能,可以只用它提供雙機(jī)浮動的vip(vrrp虛擬路由功能),這樣可以簡單實現(xiàn)一個雙機(jī)熱備高可用功能;keepalived是以VRRP虛擬路由冗余協(xié)議為基礎(chǔ)實現(xiàn)高可用的,可以認(rèn)為是實現(xiàn)路由器高可用的協(xié)議,即將N臺提供相同功能的路由器組成一個路由器組,這個組里面有一個master和多個backup,master上面有一個對外提供服務(wù)的vip(該路由器所在局域網(wǎng)內(nèi)其他機(jī)器的默認(rèn)路由為該vip),master會發(fā)組播,當(dāng)backup收不到VRRP包時就認(rèn)為master宕掉了,這時就需要根據(jù)VRRP的優(yōu)先級來選舉一個backup當(dāng)master。這樣的話就可以保證路由器的高可用了。
下圖是keepalived的組件圖
keepalived也是模塊化設(shè)計,不同模塊復(fù)雜不同的功能,它主要有三個模塊,分別是core、check和VRRP,其中:
core模塊:為keepalived的核心組件,負(fù)責(zé)主進(jìn)程的啟動、維護(hù)以及全局配置文件的加載和解析;
check:負(fù)責(zé)健康檢查,包括常見的各種檢查方式;
VRRP模塊:是來實現(xiàn)VRRP協(xié)議的。
system call:系統(tǒng)調(diào)用
watch dog:監(jiān)控check和vrrp進(jìn)程的看管者,check負(fù)責(zé)檢測器子進(jìn)程的健康狀態(tài),當(dāng)其檢測到master上的服務(wù)不可用時則通告vrrp將其轉(zhuǎn)移至backup服務(wù)器上。
除此之外,keepalived還有下面兩個組件:
libipfwc:iptables(ipchains)庫,配置LVS會用到
libipvs*:配置LVS會用到
注意,keepalived和LVS完全是兩碼事,只不過他們各負(fù)其責(zé)相互配合而已。
keepalived正常啟動的時候,共啟動3個進(jìn)程:
一個是父進(jìn)程,負(fù)責(zé)監(jiān)控其子進(jìn)程;一個是VRRP子進(jìn)程,另外一個是checkers子進(jìn)程;
兩個子進(jìn)程都被系統(tǒng)watchlog看管,兩個子進(jìn)程各自負(fù)責(zé)復(fù)雜自己的事。
Healthcheck子進(jìn)程檢查各自服務(wù)器的健康狀況,,例如http,lvs。如果healthchecks進(jìn)程檢查到master上服務(wù)不可用了,就會通知本機(jī)上的VRRP子進(jìn)程,讓他刪除通告,并且去掉虛擬IP,轉(zhuǎn)換為BACKUP狀態(tài)。
Keepalived作用
Keepalived主要用作RealServer的健康狀態(tài)檢查以及LoadBalance主機(jī)和BackUP主機(jī)之間failover的實現(xiàn)。Keepalived的作用是檢測web服務(wù)器的狀態(tài),如果有一臺web服務(wù)器死機(jī),或工作出現(xiàn)故障,Keepalived將檢測到,并將有故障的web服務(wù)器從系統(tǒng)中剔除,當(dāng)web服務(wù)器工作正常后Keepalived自動將web服務(wù)器加入到服務(wù)器群中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復(fù)故障的web服務(wù)器。