Keepalived實(shí)現(xiàn)高可用

1、keepalived實(shí)現(xiàn)原理

Keepalived是一個(gè)基于VRRP協(xié)議來實(shí)現(xiàn)的服務(wù)高可用方案,可以利用其來避免單點(diǎn)故障。一個(gè)WE服務(wù)至少會(huì)有2臺(tái)服務(wù)器運(yùn)行Keepalived,一臺(tái)為主服務(wù)器(MASTER),一臺(tái)為備份服 務(wù)器(BACKUP),但是對(duì)外表現(xiàn)為一個(gè)虛擬IP,主服務(wù)器會(huì)發(fā)送特定的消息給備份服務(wù)器,當(dāng)備份服務(wù)器收不到這個(gè)消息的時(shí)候,即主服務(wù)器宕機(jī)的時(shí)候, 備份服務(wù)器就會(huì)接管虛擬IP,繼續(xù)提供服務(wù),從而保證了高可用性。主/備節(jié)點(diǎn)輪流在對(duì)外發(fā)布vrrp通告(vrrp通告地址224.0.0.18),理論上備節(jié)點(diǎn)如果收到主節(jié)點(diǎn)的通告,通告中優(yōu)先級(jí)高于自己,就不會(huì)主動(dòng)對(duì)外發(fā)送通告

2、VRRP的原理

2.1 VRRP協(xié)議簡介

在現(xiàn)實(shí)的網(wǎng)絡(luò)環(huán)境中,兩臺(tái)需要通信的主機(jī)大多數(shù)情況下并沒有直接的物理連接。對(duì)于這樣的情況,它們之間路由怎樣選擇?主機(jī)如何選定到達(dá)目的主機(jī)的下一跳路由,這個(gè)問題通常的解決方法有二種:

·????????在主機(jī)上使用動(dòng)態(tài)路由協(xié)議(RIP、OSPF等)

·????????在主機(jī)上配置靜態(tài)路由

很明顯,在主機(jī)上配置路態(tài)路由是非常不切實(shí)際的,因?yàn)楣芾?、維護(hù)成本以及是否支持等諸多問題。配置靜態(tài)路由就變得十分流行,但路由器(或者說默認(rèn)網(wǎng)關(guān)default gateway)卻經(jīng)常成為單點(diǎn)。

VRRP的目的就是為了解決靜態(tài)路由單點(diǎn)故障問題。

VRRP通過一競(jìng)選(election)協(xié)議來動(dòng)態(tài)的將路由任務(wù)交給LAN中虛擬路由器中的某臺(tái)VRRP路由器。

2.2 工作機(jī)制

在一個(gè)VRRP虛擬路由器中,有多臺(tái)物理的VRRP路由器,但是這多臺(tái)的物理的機(jī)器并不能同時(shí)工作,而是由一臺(tái)稱為MASTER的負(fù)責(zé)路由工作,其它的都是BACKUP,MASTER并非一成不變,VRRP讓每個(gè)VRRP路由器參與競(jìng)選,最終獲勝的就是MASTER。MASTER擁有一些特權(quán),比如 擁有虛擬路由器的IP地址,我們的主機(jī)就是用這個(gè)IP地址作為靜態(tài)路由的。擁有特權(quán)的MASTER要負(fù)責(zé)轉(zhuǎn)發(fā)發(fā)送給網(wǎng)關(guān)地址的包和響應(yīng)ARP請(qǐng)求。

VRRP通過競(jìng)選協(xié)議來實(shí)現(xiàn)虛擬路由器的功能,所有的協(xié)議報(bào)文都是通過IP多播(multicast)包(多播地址224.0.0.18)形式發(fā)送的。虛擬路由器由VRID(范圍0-255)和一組IP地址組成,對(duì)外表現(xiàn)為一個(gè)周知的MAC地址。所以,在一個(gè)虛擬路由 器中,不管誰是MASTER,對(duì)外都是相同的MAC和IP(稱之為VIP)??蛻舳酥鳈C(jī)并不需要因?yàn)镸ASTER的改變而修改自己的路由配置,對(duì)他們來 說,這種主從的切換是透明的。

在一個(gè)虛擬路由器中,只有作為MASTER的VRRP路由器會(huì)一直發(fā)送VRRP廣告包(VRRPAdvertisement message),BACKUP不會(huì)搶占MASTER,除非它的優(yōu)先級(jí)(priority)更高。當(dāng)MASTER不可用時(shí)(BACKUP收不到廣告包), 多臺(tái)BACKUP中優(yōu)先級(jí)最高的這臺(tái)會(huì)被搶占為MASTER。這種搶占是非常快速的(<1s),以保證服務(wù)的連續(xù)性。

由于安全性考慮,VRRP包使用了加密協(xié)議進(jìn)行加密。

初始化:

路由器啟動(dòng)時(shí),如果路由器的優(yōu)先級(jí)是255(最高優(yōu)先級(jí),路由器擁有路由器地址),要發(fā)送VRRP通告信息,并發(fā)送廣播ARP信息通告路由器IP地址對(duì)應(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的通告信息。

主機(jī):

主機(jī)狀態(tài)下的路由器要完成如下功能:

設(shè)置定時(shí)通告定時(shí)器;

用VRRP虛擬MAC地址響應(yīng)路由器IP地址的ARP請(qǐng)求;

轉(zhuǎn)發(fā)目的MAC是VRRP虛擬MAC的數(shù)據(jù)包;

如果是虛擬路由器IP的擁有者,將接受目的地址是虛擬路由器IP的數(shù)據(jù)包,否則丟棄;

當(dāng)收到shutdown的事件時(shí)刪除定時(shí)通告定時(shí)器,發(fā)送優(yōu)先權(quán)級(jí)為0的通告包,轉(zhuǎn)初始化狀態(tài);

如果定時(shí)通告定時(shí)器超時(shí)時(shí),發(fā)送VRRP通告信息;

收到VRRP通告信息時(shí),如果優(yōu)先權(quán)為0,發(fā)送VRRP通告信息;否則判斷數(shù)據(jù)的優(yōu)先級(jí)是否高于本機(jī),或相等而且實(shí)際IP地址大于本地實(shí)際IP,設(shè)置定時(shí)通告定時(shí)器,復(fù)位主機(jī)超時(shí)定時(shí)器,轉(zhuǎn)BACKUP狀態(tài);否則的話,丟棄該通告包;

備機(jī):

備機(jī)狀態(tài)下的路由器要實(shí)現(xiàn)以下功能:

設(shè)置主機(jī)超時(shí)定時(shí)器;

不能響應(yīng)針對(duì)虛擬路由器IP的ARP請(qǐng)求信息;

丟棄所有目的MAC地址是虛擬路由器MAC地址的數(shù)據(jù)包;

不接受目的是虛擬路由器IP的所有數(shù)據(jù)包;

當(dāng)收到shutdown的事件時(shí)刪除主機(jī)超時(shí)定時(shí)器,轉(zhuǎn)初始化狀態(tài);

主機(jī)超時(shí)定時(shí)器超時(shí)的時(shí)候,發(fā)送VRRP通告信息,廣播ARP地址信息,轉(zhuǎn)MASTER狀態(tài);

收到VRRP通告信息時(shí),如果優(yōu)先權(quán)為0,表示進(jìn)入MASTER選舉;否則判斷數(shù)據(jù)的優(yōu)先級(jí)是否高于本機(jī),如果高的話承認(rèn)MASTER有效,復(fù)位主機(jī)超時(shí)定時(shí)器;否則的話,丟棄該通告包;

ARP查詢處理

當(dāng)內(nèi)部主機(jī)通過ARP查詢虛擬路由器IP地址對(duì)應(yīng)的MAC地址時(shí),MASTER路由器回復(fù)的MAC地址為虛擬的VRRP的MAC地址,而不是實(shí)際網(wǎng)卡的MAC地址,這樣在路由器切換時(shí)讓內(nèi)網(wǎng)機(jī)器覺察不到;而在路由器重新啟動(dòng)時(shí),不能主動(dòng)發(fā)送本機(jī)網(wǎng)卡的實(shí)際MAC地址。如果虛擬路由器開啟的ARP代理(proxy_arp)功能,代理的ARP回應(yīng)也回應(yīng)VRRP虛擬MAC地址

3、Keepalived配置

抓包查看: tcpdump -i eth0 vrrp -n

garp_master_delay 10-- 當(dāng)切為主狀態(tài)后多久更新ARP緩存,默認(rèn)5秒。

preempt_delay 5

3.1 配置iptables

# 配置iptables,允許vrrp流量,或者允許組播流量[root@psql_standby ~]# vim /etc/sysconfig/iptables-A INPUT -p vrrp -j ACCEPT

# 或者:-A INPUT -m pkttype --pkt-type multicast -j ACCEPT# 重啟iptables:

3.2 設(shè)置vrrp單播通告(單播方式必須配置對(duì)端,keepalived集群僅能2節(jié)點(diǎn))

# 如果兩節(jié)點(diǎn)的上聯(lián)交換機(jī)禁用了組播,則只能采用vrrp單播通告的方式[root@psql_master ~]# vim /etc/keepalived/keepalived.conf?

?priority 100? ?

?unicast_src_ip? ##source ip? ??

unicast_peer {

? ? ? ? ? ? ##dest ip? ? }

[root@psql_standby ~]# vim /etc/keepalived/keepalived.conf??

?priority 90? ??

unicast_src_ip??

##source ip? ??

unicast_peer {

? ##dest ip}


3.3 配置示例

global_defs {

? ? router_id 10.1.235.81

}

vrrp_script chk_apiserver {

? ? script "/data/ips/app/kubernetes/bin/check"

? ? interval 2

? ? weight -5

? # fall 3

? # rise 2

}

vrrp_instance VI_1 {

? ? state BACKUP

? ? interface eth0

? ? mcast_src_ip 10.1.235.81

? ? virtual_router_id 88

? ? priority 100

? ? advert_int 2

? ? garp_master_delay 120

? ? preempt_delay 20

? ? authentication {

? ? ? ? auth_type PASS

? ? ? ? auth_pass 4be37dc3b4c90194d1600c483e10ad1d

? ? }

? ? virtual_ipaddress {

? ? ? 10.1.235.7

? ? }

? ? track_script {

? ? ? chk_apiserver

? ? }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容