在高可用軟件領(lǐng)域,我們可能常會聽到Heartbeat、Corosync、Pacemaker、keepalived等軟件。常見有人問Heartbeat、Corosync、Keepalived這三個(gè)集群組件我們到底選哪個(gè)好呢?
首先我想說明的是,Heartbeat、Corosync是屬于同一類型,Keepalived與Heartbeat、Corosync,根本不是同一類型的。Keepalived使用的vrrp協(xié)議方式,虛擬路由冗余協(xié)議 (Virtual Router Redundancy Protocol,簡稱VRRP);Heartbeat或Corosync是基于主機(jī)或網(wǎng)絡(luò)服務(wù)的高可用方式;
簡單的說就是,Keepalived的目的是模擬路由器的高可用,Heartbeat或Corosync的目的是實(shí)現(xiàn)Service的高可用。所以一般Keepalived是實(shí)現(xiàn)前端高可用,常用的前端高可用的組合有,就是我們常見的LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived。而Heartbeat或Corosync是實(shí)現(xiàn)服務(wù)的高可用,常見的組合有Heartbeat v3(Corosync)+Pacemaker+NFS+Httpd 實(shí)現(xiàn)Web服務(wù)器的高可用、Heartbeat v3(Corosync)+Pacemaker+NFS+MySQL 實(shí)現(xiàn)MySQL服務(wù)器的高可用。
總結(jié)一下,Keepalived中實(shí)現(xiàn)輕量級的高可用,一般用于前端高可用,且不需要共享存儲,一般常用于兩個(gè)節(jié)點(diǎn)的高可用。而Heartbeat(或Corosync)一般用于服務(wù)的高可用,且需要共享存儲,一般用于多節(jié)點(diǎn)的高可用。
下面主要介紹下keepalived。
Keepalived是什么?
Keepalived是集群管理中保證集群高可用的一個(gè)服務(wù)軟件,用來防止單點(diǎn)故障。Keepalived起初就是為了LVS調(diào)度節(jié)點(diǎn)高可用而設(shè)計(jì)的,專門用來監(jiān)控集群系統(tǒng)中各個(gè)服務(wù)節(jié)點(diǎn)的狀態(tài)。如果某個(gè)服務(wù)節(jié)點(diǎn)出現(xiàn)異常,或工作出現(xiàn)故障,Keepalived將檢測到,并將出現(xiàn)故障的服務(wù)節(jié)點(diǎn)從集群系統(tǒng)中剔除,也就是替LVS做了對后端realserver的健康狀態(tài)監(jiān)測。而當(dāng)故障節(jié)點(diǎn)恢復(fù)正常后,Keepalived又可以自動將此服務(wù)節(jié)點(diǎn)重新加入到服務(wù)器集群中。這些工作全部自動完成,不需要人工干涉,需要人工完成的只是修復(fù)出現(xiàn)故障的服務(wù)節(jié)點(diǎn)。
Keepalived后來實(shí)現(xiàn)了VRRP協(xié)議的功能,基于VRRP協(xié)議來實(shí)現(xiàn)的LVS服務(wù)高可用方案,可以利用其來避免單點(diǎn)故障。一個(gè)LVS服務(wù)會有2臺服務(wù)器運(yùn)行Keepalived,一臺為主服務(wù)器(MASTER),一臺為備份服務(wù)器(BACKUP),但是對外表現(xiàn)為一個(gè)虛擬IP,主服務(wù)器會發(fā)送特定的消息給備份服務(wù)器,當(dāng)備份服務(wù)器收不到這個(gè)消息的時(shí)候,即主服務(wù)器宕機(jī)的時(shí)候, 備份服務(wù)器就會接管虛擬IP,繼續(xù)提供服務(wù),從而保證了高可用性。Keepalived是VRRP的完美實(shí)現(xiàn),因此在介紹keepalived之前,先介紹一下VRRP的原理。
先看兩個(gè)概念:VRRP路由器和VRRP虛擬路由器
1. VRRP路由器
就是一臺物理路由器,只不過上面運(yùn)行了VRRP協(xié)議實(shí)現(xiàn)的程序,一臺VRRP物理路由器可以位于多個(gè)虛擬路由器。
2 .VRRP虛擬路由器
所謂虛擬就是說并不是實(shí)際存在的,虛擬路由器通常由多臺物理的VRRP路由器通過某種方式組成的,就好比這些物理的路由器都丟到一個(gè)池里面去,整個(gè)pool對外看起來就像是一臺路由器,其實(shí)內(nèi)部有多臺虛擬路由器。
然后再來看一下VRRP的工作機(jī)制?
VRRP全稱Virtual Router Redundancy Protocol,即虛擬路由冗余協(xié)議??梢哉J(rèn)為是實(shí)現(xiàn)路由器高可用的協(xié)議,目的就是為了解決靜態(tài)路由單點(diǎn)故障。VRRP通過一種競選協(xié)議來動態(tài)的將路由任務(wù)交給LAN中的虛擬路由器的某臺VRRP路由器。將N臺提供相同功能的路由器組成一個(gè)路由器組,這個(gè)組里面有一個(gè)master和多個(gè)backup,master上面有一個(gè)對外提供服務(wù)的vip(該路由器所在局域網(wǎng)內(nèi)其他機(jī)器的默認(rèn)路由為該vip),master會發(fā)組播,當(dāng)backup收不到vrrp包時(shí)就認(rèn)為master宕掉了,這時(shí)就需要根據(jù)VRRP的優(yōu)先級來選舉一個(gè)backup當(dāng)master。這樣的話就可以保證路由器的高可用了。Keepalived就是巧用VRRP協(xié)議來實(shí)現(xiàn)高可用性(HA)的。
VRRP所有的協(xié)議報(bào)文都是通過IP多播(multicast)包(多播地址224.0.0.18)形式發(fā)送的。虛擬路由器由VRID(范圍0-255)和一組IP地址組成,對外表現(xiàn)為一個(gè)周知的MAC地址。所以,在一個(gè)虛擬路由 器中,不管誰是MASTER,對外都是相同的MAC和IP(稱之為VIP)??蛻舳酥鳈C(jī)并不需要因?yàn)镸ASTER的改變而修改自己的路由配置,對客戶端來說,這種主從的切換是透明的。
在一個(gè)虛擬路由器中,只有作為MASTER的VRRP路由器會一直發(fā)送VRRP通告信息(VRRPAdvertisement message),BACKUP不會搶占MASTER,除非它的優(yōu)先級(priority)更高。當(dāng)MASTER不可用時(shí)(BACKUP收不到通告信息), 多臺BACKUP中優(yōu)先級最高的這臺會被搶占為MASTER。這種搶占是非??焖俚?<>
VRRP工作流程?
1) 初始化
路由器啟動時(shí),如果路由器的優(yōu)先級是255(最高優(yōu)先級,路由器擁有路由器地址),要發(fā)送VRRP通告信息,并發(fā)送廣播ARP信息通告路由器IP地址對應(yīng)的MAC地址為路由虛擬MAC,設(shè)置通告信息定時(shí)器準(zhǔn)備定時(shí)發(fā)送VRRP通告信息,轉(zhuǎn)為MASTER狀態(tài);否則進(jìn)入BACKUP狀態(tài),設(shè)置定時(shí)器檢查定時(shí)檢查是否收到MASTER的通告信息。
2) Master
3)Backup
VRRP ARP查詢處理?
當(dāng)內(nèi)部主機(jī)通過ARP查詢虛擬路由器IP地址對應(yīng)的MAC地址時(shí),MASTER路由器回復(fù)的MAC地址為虛擬的VRRP的MAC地址,而不是實(shí)際網(wǎng)卡的 MAC地址,這樣在路由器切換時(shí)讓內(nèi)網(wǎng)機(jī)器覺察不到;而在路由器重新啟動時(shí),不能主動發(fā)送本機(jī)網(wǎng)卡的實(shí)際MAC地址。如果虛擬路由器開啟的ARP代理 (proxy_arp)功能,代理的ARP回應(yīng)也回應(yīng)VRRP虛擬MAC地址。
keepalived也是模塊化設(shè)計(jì)不同模塊負(fù)責(zé)不同的功能,下面是keepalived的相關(guān)模塊:core、check、vrrp、libipfwc、libipvs-2.4、libipvs-2.6。
core:是keepalived的核心,負(fù)責(zé)主進(jìn)程的啟動和維護(hù)及全局配置文件的加載解析等。
check:負(fù)責(zé)healthchecker(健康檢查),包括了各種健康檢查方式以及對應(yīng)的配置的解析(包括LVS的配置解析)。
vrrp:VRRPD子進(jìn)程就是來實(shí)現(xiàn)VRRP協(xié)議的。
libipfwc:liipfwc庫是配置LVS時(shí)會用到的。
libipvs*:配置LVS時(shí)會用到。
PS:注意keepalived和LVS完全是兩碼事只不過他們各負(fù)其責(zé)相互配合而已。