成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Keepalived高可用切換過(guò)程

IT那活兒 / 1951人閱讀
Keepalived高可用切換過(guò)程
點(diǎn)擊上方“IT那活兒”公眾號(hào),關(guān)注后了解更多內(nèi)容,不管IT什么活兒,干就完了!?。?/strong>

keepalived簡(jiǎn)介

Keepalived對(duì)于運(yùn)維人員來(lái)說(shuō)是一款熟悉的高可用工具,在很多沒(méi)有原生實(shí)現(xiàn)分布式高可用的中間件和數(shù)據(jù)庫(kù)中都得到了廣泛的使用,例如keepalived+nginx實(shí)現(xiàn)對(duì)nginx的高可用,keepalived+MySQL實(shí)現(xiàn)對(duì)MySQL的高可用。
在各種分布式集群通過(guò)多副本多節(jié)點(diǎn)方式或者微服務(wù)的服務(wù)發(fā)現(xiàn)機(jī)制實(shí)現(xiàn)高可用大行其道的今天,keepalived實(shí)現(xiàn)高可用的方式較為傳統(tǒng),通過(guò)VIP飄逸的方式實(shí)現(xiàn)應(yīng)用的高可用。雖然這種方式有其存在的問(wèn)題,例如切換動(dòng)作較慢;沒(méi)有分布式選舉機(jī)制,容易在網(wǎng)絡(luò)環(huán)境較差的場(chǎng)景下產(chǎn)生腦裂等問(wèn)題;但也有其優(yōu)勢(shì),就是對(duì)中間件幾乎做到了0侵入,上手容易且適配簡(jiǎn)單。

由于keepalived存在的時(shí)間很長(zhǎng),所以網(wǎng)絡(luò)上對(duì)于其部署和應(yīng)用的案例很多,這里我不再贅述其安裝步驟,這里主要介紹其一些模式和使用場(chǎng)景,以及通過(guò)抓包的方式展現(xiàn)其高可用切換的流程。


Keepalived模式分類(lèi)

Keepalived可以按照搶占模式和心跳機(jī)制分為5種模式。

2.1 非搶占模式

非搶占意思為當(dāng)master宕機(jī),在backup中選取主機(jī)為新的master,并修改將VIP給予新的master后。當(dāng)原來(lái)的master恢復(fù)后,VIP依舊保持在新的master上,不再遷移。
這種情況主要針對(duì)崩潰主機(jī)恢復(fù)后依然會(huì)崩潰的場(chǎng)景下,例如需要對(duì)舊master的MySQL進(jìn)行檢查修復(fù),此時(shí)需要啟動(dòng)MySQL,防止啟動(dòng)后VIP進(jìn)行切換。

2.1.1 配置方式

  • 1)將所有主機(jī)的優(yōu)先級(jí)priority配置相同;
  • 2)將所有主機(jī)的主備模式配置為BACKUP。

2.1.2 適用場(chǎng)景

  • 1)適合master和backup的服務(wù)器配置相同,backup具有master相同的承載能力,能長(zhǎng)時(shí)間穩(wěn)定承載業(yè)務(wù)的場(chǎng)景。
  • 2)適合master與backup網(wǎng)絡(luò)波動(dòng)較大的場(chǎng)景,減少vip在master和backup上頻繁飄逸。

2.2 搶占模式

搶占意思為當(dāng)master宕機(jī),在backup中選取主機(jī)為新的master,并修改將VIP給予新的master后。當(dāng)原來(lái)的master恢復(fù)后,VIP從新的master轉(zhuǎn)移到舊的master上面。
這樣配置有缺點(diǎn):如果短時(shí)間內(nèi)網(wǎng)絡(luò)抖動(dòng)頻繁,vip會(huì)頻繁飄移,而vip的飄逸需要時(shí)間,進(jìn)而可能會(huì)影響業(yè)務(wù)。

2.2.1 配置方式

  • 1)將master主機(jī)的優(yōu)先級(jí)大于其他的BACKUP。
  • 2)將master主機(jī)的主備模式配置為BACKUP,將其他主機(jī)主備模式配置為BACKUP。

2.2.2 適用場(chǎng)景

  • 1)適合master與backup服務(wù)器配置不同,backup性能低于master,無(wú)法長(zhǎng)時(shí)間承載業(yè)務(wù)。backup僅作為master臨時(shí)備份的場(chǎng)景。
  • 2)適合master與backup網(wǎng)絡(luò)波動(dòng)較小的場(chǎng)景,當(dāng)master恢復(fù)后能及時(shí)切換回去。

2.3 靈活模式

靈活模式就是利用vrrp_script的weight值對(duì)節(jié)點(diǎn)的優(yōu)先級(jí)priority進(jìn)行重新計(jì)算。這種場(chǎng)景適用于腳本監(jiān)聽(tīng)的情況,例如當(dāng)腳本檢測(cè)到應(yīng)用宕機(jī)后,就給master優(yōu)先級(jí)減去相應(yīng)的優(yōu)先級(jí),此時(shí)就會(huì)發(fā)生切換。

2.3.1 配置方式

  • 1)將master主機(jī)的優(yōu)先級(jí)大于其他的BACKUP。
  • 2)在檢測(cè)腳本中配置weight值,可以影響每個(gè)節(jié)點(diǎn)的優(yōu)先級(jí)。
:當(dāng)兩個(gè)節(jié)點(diǎn)優(yōu)先級(jí)相同時(shí),發(fā)送VRRP通告報(bào)文的IP作為比較對(duì)象,IP較大者為MASTER。

2.3.2 適用場(chǎng)景

適合需要靈活配置的場(chǎng)景。

2.4 組播模式

組播模式是指keepalived發(fā)送VRRP心跳報(bào)文是通過(guò)組播的方式。
默認(rèn)情況下keepalived啟動(dòng)后會(huì)自動(dòng)加入設(shè)置的組播地址,進(jìn)而就能收到來(lái)自master的VRRP組播報(bào)文。組播地址可以在配置文件中通過(guò) vrrp_mcast_group 配置。同一虛擬路由組播地址必須配置相同,默認(rèn)的組播地址為 224.0.0.18。master每隔固定頻率向組播地址發(fā)送VRRP報(bào)文。BACKUP收到master的VRRP報(bào)文根據(jù)優(yōu)先級(jí)判斷是否需要搶占VIP,如果在規(guī)定時(shí)間3倍時(shí)間內(nèi)未收到來(lái)自master的VRRP報(bào)文,也會(huì)判斷master宕機(jī),進(jìn)而搶占VIP。
所有BACKUP節(jié)點(diǎn)只負(fù)責(zé)處理MASTER發(fā)出的多播包,當(dāng)發(fā)現(xiàn)master的優(yōu)先級(jí)沒(méi)自己高,或者沒(méi)收到master的VRRP通告時(shí),BACKUP將自己切換到master狀態(tài)。
#以下示例為三臺(tái)服務(wù)器都部署了keepalived組播模式,我們查看三臺(tái)服務(wù)器的組播地址發(fā)現(xiàn),三臺(tái)服務(wù)器都加入了組播地址

2.4.1 組播的優(yōu)勢(shì)

配置方便,由于配置文件中并未指定BACKUP的IP地址,而是通過(guò)組播的方式來(lái)進(jìn)行通訊。所以我們可以隨時(shí)向集群中添加節(jié)點(diǎn),而不用重啟已運(yùn)行的節(jié)點(diǎn)。

2.4.2 適用場(chǎng)景

  • 1)適用于支持組播的網(wǎng)絡(luò)的場(chǎng)景。
  • 2)適用于后期需要向keepalived組內(nèi)添加其他節(jié)點(diǎn)的場(chǎng)景??梢圆挥眯薷闹貑⑵渌膋eepalived,可以作為無(wú)感添加。

2.5 單播模式

keepalived不僅支持組播,還支持單播。組播是master在局域網(wǎng)內(nèi)向組播地址進(jìn)行發(fā)送VRRP報(bào)文,加入組播地址的BACKUP主機(jī)就會(huì)收到來(lái)自master的VRRP心跳報(bào)文,就可以判斷目前master的狀態(tài)。單播就是master通過(guò)點(diǎn)對(duì)點(diǎn)只向配置文件中指定的BACKUP發(fā)送VRRP報(bào)文。

2.5.1 單播的優(yōu)勢(shì)

  • 1)虛擬路由ID只是在組播的模式下有意義,因?yàn)樵诮M播模式下,BACKUP用來(lái)區(qū)分收到的組播VRRP報(bào)文是不是給自己的,所以在組播的模式下virtual_router_id在不同虛擬路由組不能重復(fù)。但是在單播中,采用的是點(diǎn)對(duì)點(diǎn)模式,所以在一個(gè)局域網(wǎng)內(nèi)virtual_router_id重復(fù)也是可以的。
  • 2)對(duì)環(huán)境的要求更低。可能某些環(huán)境下不支持組播。

2.5.2 適用場(chǎng)景

  • 1)適用于不支持組播的網(wǎng)絡(luò)環(huán)境,例如有些公有云不支持組播。
  • 2)適用于keepalived組內(nèi)成員后期變動(dòng)小場(chǎng)景。


組播模式配置

#這里進(jìn)行了配置的簡(jiǎn)化,只對(duì)關(guān)鍵的配置進(jìn)行了整理:
global_defs {
router_id k8s-11 #表示這臺(tái)主機(jī)的ID,默認(rèn)情況下為主機(jī)名
vrrp_skip_check_adv_addr #此配置為如果收到的報(bào)文和上一個(gè)報(bào)文是同一個(gè)路由器則跳過(guò)檢查報(bào)文中的源地址。主要為了提高性能
vrrp_iptables #避免生成iptables input鏈 規(guī)則
vrrp_strict #嚴(yán)格遵守VRRP協(xié)議,不允許狀況:1,沒(méi)有VIP地址,2.配置了單播,3.在VRRP版本2中有IPv6地址
vrrp_garp_interval 0 #ARP報(bào)文發(fā)送延遲
vrrp_gna_interval 0 #消息發(fā)送延遲
vrrp_mcast_group 224.0.0.18    #指定組播IP地址,默認(rèn)為224.0.0.18
}

vrrp_script check_nginx { #腳本配置
pass
}

vrrp_instance VI_1 {
state BACKUP #當(dāng)前節(jié)點(diǎn)在此虛擬路由器上的狀態(tài),狀態(tài)為MASTER或者BACKUP,一般都配置為backup,最終需要權(quán)重來(lái)進(jìn)行比較
interface ens33 #綁定為當(dāng)前虛擬路由器使用的物理接口,如eth0
virtual_router_id 11 #每個(gè)虛擬路由器唯一標(biāo)識(shí),范圍0-255。同一組虛擬路由器的vrid需要保持一致。
priority 100 #當(dāng)前物理節(jié)點(diǎn)在此虛擬路由器的優(yōu)先級(jí),范圍1-254
advert_int 1 #vrrp通告的時(shí)間間隔(心跳),默認(rèn)1s
authentication { #認(rèn)證機(jī)制
auth_type PASS
auth_pass 88888888
}

virtual_ipaddress { #配置虛擬IP
192.168.200.16 #指定VIP,不指定網(wǎng)卡,默認(rèn)為eth0。默認(rèn)為/32
192.168.200.17/24 dev ens33
#指定VIP的網(wǎng)卡
192.168.200.18/24 dev ens33 label ens33:1
#指定VIP的網(wǎng)卡label
}

track_script { #執(zhí)行腳本
check_nginx
}
}
注:最開(kāi)始學(xué)習(xí)keepalived的時(shí)候很好奇,keepalived是怎么知道其他BACKUP節(jié)點(diǎn)的。后來(lái)發(fā)現(xiàn)默認(rèn)情況下keepalived的組播地址為224.0.0.18,master只需要將VRRP報(bào)文發(fā)送到這個(gè)地址就能被同一局域網(wǎng)內(nèi)所有其他啟動(dòng)keepalived并加入相同組播地址的服務(wù)器接收到。

組播模式下服務(wù)器抓包情況:

以下三臺(tái)服務(wù)器192.168.100.11-13服務(wù)器配置了keepalived組播模式,分別對(duì)三臺(tái)服務(wù)器進(jìn)行了抓包。
我們可以看到,由于三臺(tái)服務(wù)器都加入了224.0.0.18這個(gè)組播地址,此時(shí)192.168.100.11為MASTER,192.168.100.11服務(wù)器向組播地址224.0.0.18發(fā)送了VRRP心跳報(bào)文,所以加入此組播地址的三臺(tái)服務(wù)器都收到了VRRP心跳報(bào)文。


單播模式配置

#和上面組播模式相似的配置不再進(jìn)行解釋。
global_defs {
router_id k8s-21
vrrp_skip_check_adv_addr
vrrp_iptables
# vrrp_strict #此選項(xiàng)必須關(guān)閉
vrrp_garp_interval 0
vrrp_gna_interval 0
}

vrrp_script check_nginx {
pass
}

vrrp_instance VI_2 {
state MASTER
interface ens33
virtual_router_id 21
priority 100
advert_int 2

authentication 
{
auth_type PASS
auth_pass 88888888
}

unicast_src_ip 192.168.100.21 #本機(jī)IP地址
unicast_peer {
192.168.100.22 #同一keepalived組內(nèi)其他節(jié)點(diǎn)IP地址
192.168.100.23 #同一keepalived組內(nèi)其他節(jié)點(diǎn)IP地址
}

virtual_ipaddress {
192.168.100.200/24 dev ens33 #虛擬VIP地址
}

track_script {
check_nginx
}
}

單播模式下服務(wù)器抓包情況:

以下三臺(tái)服務(wù)器192.168.100.21-23服務(wù)器配置了keepalived單播模式,此時(shí)192.168.100.21服務(wù)器為MASTER,我們?cè)谄渖线M(jìn)行抓包。發(fā)現(xiàn)在同一時(shí)刻,192.168.100.21分別向192.168.100.22-23發(fā)送了單播的VRRP心跳報(bào)文。


keepalived切換選舉過(guò)程

這里通過(guò)抓包的方式簡(jiǎn)單分析keepalived一些切換場(chǎng)景。

5.1 組播模式下master優(yōu)先級(jí)降低選舉過(guò)程

此處模擬192.168.100.11-13為一組keepalived,且192.168.11為master。
1)默認(rèn)情況下會(huì)master會(huì)一直發(fā)送組播消息,每隔一秒鐘向配置的組播地址發(fā)送報(bào)文,報(bào)文信息會(huì)包含此時(shí)master的優(yōu)先級(jí)的值。組播的默認(rèn)地址為224.0.0.18。
2)當(dāng)master上的檢測(cè)腳本發(fā)現(xiàn)nginx服務(wù)宕機(jī),此時(shí)master的優(yōu)先級(jí)由100變?yōu)?0。master還是依舊每秒一次向組播地址發(fā)送自己的優(yōu)先級(jí)報(bào)文,此時(shí)BACKUP收到網(wǎng)絡(luò)中優(yōu)先級(jí)變化(優(yōu)先級(jí)不高于自己)的VRRP組播報(bào)文,所有BACKUP會(huì)立即激活搶占功能,向組播地址發(fā)送VRRP報(bào)文,報(bào)文包含自身目前的優(yōu)先級(jí)。
注:可以看到,當(dāng)BACKUP收到master優(yōu)先級(jí)變化的報(bào)文,幾乎是立即向組播地址內(nèi)發(fā)送自己優(yōu)先級(jí)的VRRP報(bào)文。
3)兩個(gè)BACKUP經(jīng)過(guò)優(yōu)先級(jí)對(duì)比,最終由于192.168.100.12優(yōu)先級(jí)為80,獲得VIP。并開(kāi)始向組播地址發(fā)送優(yōu)先級(jí)VRRP報(bào)文。

5.2 組播模式下當(dāng)BACKUP超時(shí)未收到master的報(bào)文

#這種情況為master宕機(jī),或者master的keepalived進(jìn)程被kill。當(dāng)BACKUP超過(guò)配置文件中配置的VRRP報(bào)文頻率advert_int 3倍時(shí)長(zhǎng)后,BACKUP會(huì)發(fā)出VRRP報(bào)文,將VIP搶占。

通過(guò)以上抓包分析可見(jiàn),keepalived的選舉機(jī)制是很簡(jiǎn)單的,就是簡(jiǎn)單利用心跳報(bào)文+節(jié)點(diǎn)優(yōu)先級(jí)進(jìn)行選舉master,這種方式不可避免的會(huì)產(chǎn)生分區(qū)腦裂的故障。如果要避免分區(qū)腦裂的問(wèn)題,目前成熟的解決方案是采用分布式選舉算法,例如zookeeper使用的ZAB算法,kafka使用的Raft算法。


VRRP協(xié)議報(bào)文頭

#共20byte。
6.1 通過(guò)抓包可以發(fā)現(xiàn),VRRP協(xié)議是屬于網(wǎng)絡(luò)層上面的協(xié)議,不基于傳統(tǒng)的傳輸層TCP和UDP,所以它的通訊沒(méi)有端口的概念。VRRP協(xié)議內(nèi)置在Linux內(nèi)核的網(wǎng)絡(luò)協(xié)議棧中。
6.2 通過(guò)抓包我們可以發(fā)現(xiàn)VRRP報(bào)文只有20byte,但是包含了Virtual_ID,優(yōu)先級(jí)等信息。所以配置文件中這些配置非常重要。

6.3 通過(guò)抓包我們也可以很容易解釋為什么網(wǎng)上說(shuō)keepalived配置文件中的Virtual_ID必須要配置一樣,因?yàn)樵谕粋€(gè)組播地址中同一組keepalived的其他節(jié)點(diǎn)只會(huì)識(shí)別Virtual_ID與自己相同的VRRP報(bào)文。當(dāng)然,在同一個(gè)局域網(wǎng)中如果有多組keepalived都采用組播模式,那么必須滿(mǎn)足不同組keepalived的Virtual_ID必須不同,或者不同組keepalived的組播地址配置不同。不然會(huì)發(fā)生干擾,VIP可能會(huì)出現(xiàn)”跨組飄移”。

感謝大家的閱讀,VRRP還有一些小的細(xì)節(jié)處,需要大家共同的發(fā)掘探討。


本文作者:王旭東(上海新炬中北團(tuán)隊(duì))

本文來(lái)源:“IT那活兒”公眾號(hào)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/129110.html

相關(guān)文章

  • Nginx+Keepalived實(shí)現(xiàn)站點(diǎn)可用

    摘要:在協(xié)議實(shí)現(xiàn)里,虛擬路由器使用作為虛擬地址,就是唯一的,這個(gè)地址同一時(shí)間只有一個(gè)物理路由器占用。在虛擬路由器里面的物理路由器組里面通過(guò)多播地址來(lái)定時(shí)發(fā)送通告消息。負(fù)責(zé)健康檢查,包括常見(jiàn)的各種檢查方式。 公司內(nèi)部 OA 系統(tǒng)要做線(xiàn)上高可用,避免單點(diǎn)故障,所以計(jì)劃使用2臺(tái)虛擬機(jī)通過(guò) Keepalived 工具來(lái)實(shí)現(xiàn) nginx 的高可用(High Avaiability),達(dá)到一臺(tái)nginx...

    Songlcy 評(píng)論0 收藏0
  • MySQL可用方案測(cè)試

    MySQL高可用方案測(cè)試 img{ display:block; margin:0 auto !important; width:100%; } body{ width:75%; margin...

    IT那活兒 評(píng)論0 收藏2496
  • 基于騰訊云CVM自建可用Redis實(shí)踐

    摘要:環(huán)境說(shuō)明需求與目標(biāo)本文將通過(guò)對(duì)目前主流的幾種高可用方案進(jìn)行對(duì)比分析,并基于騰訊云和等基礎(chǔ)產(chǎn)品進(jìn)行搭建配置測(cè)試總結(jié)。 本文來(lái)源 | 云+社區(qū)專(zhuān)欄文章作者 | 萬(wàn)守兵,騰訊云資深架構(gòu)師。8年以上大型互聯(lián)網(wǎng)公司運(yùn)維工作經(jīng)驗(yàn),騰訊云資深遷云架構(gòu)師,一直從事大型互聯(lián)網(wǎng)服務(wù)端架構(gòu)設(shè)計(jì)和優(yōu)化工作。個(gè)人專(zhuān)注于云計(jì)算、k8s和 DevOps領(lǐng)域。 導(dǎo)讀:在企業(yè)實(shí)際生產(chǎn)環(huán)境中為了能夠給業(yè)務(wù)上層應(yīng)用提供高...

    DataPipeline 評(píng)論0 收藏0
  • 實(shí)現(xiàn)可用的兩種方案與實(shí)戰(zhàn)

    摘要:高可用的首要想法就是雙機(jī)熱備,故障時(shí)自動(dòng)切換,所以我們要給加一個(gè)備機(jī)。注下面實(shí)現(xiàn)高可用都用的是雙機(jī)熱備,為了方便,把調(diào)度服務(wù)器簡(jiǎn)稱(chēng)為主機(jī),把調(diào)度服務(wù)器的備機(jī)簡(jiǎn)稱(chēng)為備機(jī)。 我之前在一片文章 用Nginx+Redis實(shí)現(xiàn)session共享的均衡負(fù)載 中做了一個(gè)負(fù)載均衡的實(shí)驗(yàn),其主要架構(gòu)如下: showImg(https://segmentfault.com/img/bVushO); 把de...

    seal_de 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<