文章大綱
前言
VRRP介紹
Keepalived詳解
前言
Keepalived 是一個(gè)基于VRRP協(xié)議來(lái)實(shí)現(xiàn)的LVS服務(wù)高可用方案,可以利用其來(lái)避免單點(diǎn)故障。我們都知道,在一個(gè)LVS集群中,雖然LVS能夠?qū)蛻舳说恼?qǐng)求基于IP進(jìn)行調(diào)度,但是LVS自身并不能提供高可靠性,即不能進(jìn)行容錯(cuò)。并且LVS只能將客戶端的服務(wù)基于某種調(diào)度算法調(diào)度至后端服務(wù)器進(jìn)行處理,卻不能檢查后端服務(wù)器的狀態(tài),所以我們需要一個(gè)工具能夠?qū)崿F(xiàn)這些功能,而keepalived剛好能夠提供這些功能,在keepalived與LVS配合組成高可用集群中(HAC),至少需要2臺(tái)服務(wù)器運(yùn)行Keepalived,一臺(tái)為主服務(wù)器(MASTER),一臺(tái)為備份服務(wù)器(BACKUP),但是對(duì)外表現(xiàn)為一個(gè)虛擬IP(即LVS中的VIP),主服務(wù)器會(huì)發(fā)送特定的消息給備份服務(wù)器,當(dāng)備份服務(wù)器收不到這個(gè)消息的時(shí)候,即主服務(wù)器宕機(jī)的時(shí)候, 備份服務(wù)器就會(huì)接管虛擬IP,繼續(xù)提供服務(wù),從而保證了高可用性。Keepalived是VRRP的完美實(shí)現(xiàn),因此在介紹keepalived之前,先介紹一下VRRP的原理。
VRRP介紹
1 VRRP概念
VRRP是英文”Virtual Router Redundancy Protocol”的縮寫,即虛擬路由冗余協(xié)議,他是一種容錯(cuò)協(xié)議,它保證當(dāng)主機(jī)的下一跳路由器出現(xiàn)故障時(shí),由另一臺(tái)路由器來(lái)代替出現(xiàn)故障的路由器進(jìn)行工作,從而保持網(wǎng)絡(luò)通信的連續(xù)性和可靠性。VRRP具有如下優(yōu)點(diǎn):
簡(jiǎn)化網(wǎng)絡(luò)管理。在具有多播或廣播能力的局域網(wǎng)(如以太網(wǎng))中,借助VRRP 能在某臺(tái)設(shè)備出現(xiàn)故障時(shí)仍然提供高可靠的缺省鏈路,有效避免單一鏈路發(fā)生故障后網(wǎng)絡(luò)中斷的問(wèn)題,而無(wú)需修改動(dòng)態(tài)路由協(xié)議、路由發(fā)現(xiàn)協(xié)議等配置信息,也無(wú)需修改主機(jī)的默認(rèn)網(wǎng)關(guān)配置。
適應(yīng)性強(qiáng)。VRRP 報(bào)文封裝在 IP 報(bào)文中,支持各種上層協(xié)議。
網(wǎng)絡(luò)開銷小。VRRP 只定義了一種報(bào)文——VRRP 通告報(bào)文,并且只有處于Master 狀態(tài)的路由器可以發(fā)送 VRRP 報(bào)文。
2 VRRP工作過(guò)程
1) 虛擬路由器中的路由器根據(jù)優(yōu)先級(jí)選舉出 Master。Master 路由器通過(guò)發(fā)送免費(fèi) ARP 報(bào)文,將自己的虛擬 MAC 地址通知給與它連接的設(shè)備或者主機(jī),從而承擔(dān)報(bào)文轉(zhuǎn)發(fā)任務(wù);
2) Master 路由器周期性發(fā)送 VRRP 報(bào)文,以公布其配置信息(優(yōu)先級(jí)等)和工作狀況;
3) 如果 Master 路由器出現(xiàn)故障,虛擬路由器中的 Backup 路由器將根據(jù)優(yōu)先級(jí)重新選舉新的 Master;
4) 虛擬路由器狀態(tài)切換時(shí),Master 路由器由一臺(tái)設(shè)備切換為另外一臺(tái)設(shè)備,新的 Master路由器只是簡(jiǎn)單地發(fā)送一個(gè)攜帶虛擬路由器的 MAC 地址和虛擬 IP地址信息的免費(fèi) ARP報(bào)文,這樣就可以更新與它連接的主機(jī)或設(shè)備中的ARP 相關(guān)信息。網(wǎng)絡(luò)中的主機(jī)感知不到Master 路由器已經(jīng)切換為另外一臺(tái)設(shè)備。
5) Backup 路由器的優(yōu)先級(jí)高于 Master 路由器時(shí),由 Backup 路由器的工作方式(搶占方式和非搶占方式)決定是否重新選舉 Master。
終上所述,為了保證Master路由器和Backup路由器能夠協(xié)調(diào)工作,VRRP需要實(shí)現(xiàn)以下功能:
Master 路由器的選舉;
Master 路由器狀態(tài)的通告;
同時(shí),為了提高安全性,VRRP 還提供了認(rèn)證功能;
3 MSTER選舉方式
VRRP根據(jù)優(yōu)先級(jí)來(lái)確定虛擬路由器中每臺(tái)路由器的角色(Master路由器或Backup路由器)。優(yōu)先級(jí)越高,則越有可能成為Master路由器。初始創(chuàng)建的路由器工作在Backup狀態(tài),通過(guò)VRRP報(bào)文的交互獲知虛擬路由器中其他成員的優(yōu)先級(jí):
如果 VRRP 報(bào)文中 Master 路由器的優(yōu)先級(jí)高于自己的優(yōu)先級(jí),則路由器保持在 Backup 狀態(tài);
如果 VRRP 報(bào)文中 Master 路由器的優(yōu)先級(jí)低于自己的優(yōu)先級(jí),采用搶占工作方式的路由器將搶占成為 Master 狀態(tài),周期性地發(fā)送 VRRP 報(bào)文,采用非搶占工作方式的路由器仍保持 Backup 狀態(tài);
如果在一定時(shí)間內(nèi)沒有收到 VRRP 報(bào)文,則路由器切換為 Master
VRRP優(yōu)先級(jí)的取值范圍為0到255(數(shù)值越大表明優(yōu)先級(jí)越高),可配置的范圍是1到254,優(yōu)先級(jí)0為系統(tǒng)保留給路由器放棄Master位置時(shí)候使用,255則是系統(tǒng)保留給IP地址擁有者使用。當(dāng)路由器為IP地址擁有者時(shí),其優(yōu)先級(jí)始終為255。因此,當(dāng)虛擬路由器內(nèi)存在IP地址擁有者時(shí),只要其工作正常,則為Master路由器。
4 VRRP的三種認(rèn)證方式
無(wú)認(rèn)證:不進(jìn)行任何 VRRP 報(bào)文的合法性認(rèn)證,不提供安全性保障。
簡(jiǎn)單字符認(rèn)證:在一個(gè)有可能受到安全威脅的網(wǎng)絡(luò)中,可以將認(rèn)證方式設(shè)置為簡(jiǎn)單字符認(rèn)證。發(fā)送 VRRP 報(bào)文的路由器將認(rèn)證字填入到 VRRP 報(bào)文中,而收到 VRRP 報(bào)文的路由器會(huì)將收到的 VRRP 報(bào)文中的認(rèn)證字和本地配置的認(rèn)證字進(jìn)行比較。如果認(rèn)證字相同,則認(rèn)為接收到的報(bào)文是合法的 VRRP 報(bào)文;否則認(rèn)為接收到的報(bào)文是一個(gè)非法報(bào)文。
MD5 認(rèn)證:在一個(gè)非常不安全的網(wǎng)絡(luò)中,可以將認(rèn)證方式設(shè)置為 MD5 認(rèn)證。發(fā)送 VRRP 報(bào)文的路由器利用認(rèn)證字和 MD5 算法對(duì) VRRP 報(bào)文進(jìn)行加密,加密后的報(bào)文保存在 Authentication Header(認(rèn)證頭)中。收到 VRRP報(bào)文的路由器會(huì)利用認(rèn)證字解密報(bào)文,檢查該報(bào)文的合法性。
Keepalived
1 keepalived工作原理
Keepalived是基于vrrp的原理開發(fā)的可實(shí)現(xiàn)高可用的服務(wù)軟件,并且就有health-check功能,可以使用它提供雙機(jī)浮動(dòng)的vip(vrrp虛擬路由功能),這樣可以簡(jiǎn)單實(shí)現(xiàn)一個(gè)雙機(jī)熱備高可用功能;keepalived在VRRP虛擬路由冗余協(xié)議為基礎(chǔ)實(shí)現(xiàn)高可用,也可以認(rèn)為是實(shí)現(xiàn)路由器高可用的協(xié)議,即將N臺(tái)提供相同功能的路由器組成一個(gè)路由器組,這個(gè)組里面有一個(gè)master和多個(gè)backup,master上面有一個(gè)對(duì)外提供服務(wù)的vip(該路由器所在局域網(wǎng)內(nèi)其他機(jī)器的默認(rèn)路由為該vip),master會(huì)發(fā)組播,當(dāng)backup收不到VRRP包時(shí)就認(rèn)為master宕掉了,這時(shí)就需要根據(jù)VRRP的優(yōu)先級(jí)來(lái)選舉一個(gè)backup當(dāng)master。這樣的話就可以保證路由器的高可用了。下面是官方給出的KeepAlived組件圖
由上圖可以看出,keepalived也是模塊化設(shè)計(jì),不同模塊實(shí)現(xiàn)不同的功能,它主要有三個(gè)模塊,分別是core、check和VRRP,其中:
core模塊:為keepalived的核心組件,負(fù)責(zé)主進(jìn)程的啟動(dòng)、維護(hù)以及全局配置文件的加載和解析;
check模塊:負(fù)責(zé)健康檢查,包括常見的各種檢查方式;
VRRP模塊:是來(lái)實(shí)現(xiàn)VRRP協(xié)議的。
system call:系統(tǒng)調(diào)用
watch dog:監(jiān)控check和vrrp進(jìn)程的管理進(jìn)程,他是用來(lái)對(duì)check和vrrp進(jìn)程實(shí)現(xiàn)高可用的。
checkers:負(fù)責(zé)檢測(cè)器子進(jìn)程的健康狀態(tài),當(dāng)其檢測(cè)到master上的服務(wù)不可用時(shí)則通告vrrp將其轉(zhuǎn)移至backup服務(wù)器上。
2 keepalived作用
Keepalived主要用作RealServer的健康狀態(tài)檢查以及LoadBalance主機(jī)和BackUP主機(jī)之間failover的實(shí)現(xiàn)。Keepalived的作用是檢測(cè)web服務(wù)器的狀態(tài),如果有一臺(tái)web服務(wù)器死機(jī),或工作出現(xiàn)故障,Keepalived將檢測(cè)到,并將有故障的web服務(wù)器從系統(tǒng)中剔除,當(dāng)web服務(wù)器工作正常后Keepalived自動(dòng)將web服務(wù)器加入到服務(wù)器群中,這些工作全部自動(dòng)完成,不需要人工干涉,需要人工做的只是修復(fù)故障的web服務(wù)器。
3 keepalived配置文件
Keepalived是一個(gè)相對(duì)輕量級(jí)的服務(wù),而且與LVS配合的非常好,它只有一個(gè)配置文件,主要包括global_defs、static_ipaddress、static_routes、VRRP_script、VRRP_instance和virtual_server的設(shè)置,而這個(gè)這些配置又可分為三大類:全局配置,VRRP的配置以及LVS配置。
1)全局配置
global_defs { # Block id notification_email { admin@example1.com # 指明接收keepalived信息的郵箱 ... } notification_email_from admin@example.com # 郵箱名 smtp_server 127.0.0.1 # 收郵件的主機(jī)地址 smtp_connect_timeout 30 # integer, seconds router_id my_hostname # 一個(gè)標(biāo)記該主機(jī)的字符串,可以不是主機(jī)名,建議使用主機(jī)名 vrrp_mcast_group4 224.0.0.18 # 多播組地址, 默認(rèn)是 224.0.0.18 vrrp_mcast_group6 ff02::12 # ipv6多播組地址, 默認(rèn)是 ff02::12 enable_traps # 啟用SNMP陷阱,可以不啟用 }2)VRRP配置
VRRPD配置包括三個(gè)類:VRRP同步組(synchroization group)、VRRP實(shí)例(VRRP Instance)、VRRP腳本
******VRRP instance(s)******* # describes the moveable IP for each instance of a group in vrrp_sync_group. Here are described two IPs # (on inside_network and on outside_network), on machine "my_hostname", which belong to the group VG_1 and which # will transition together on any state change. vrrp_instance inside_network { state MASTER # interface eth0 # use_vmac <VMAC_INTERFACE> # Use VRRP Virtual MAC. # vmac_xmit_base # VMAC interface dont_track_primary # track_interface { eth0 eth2 ... } mcast_src_ip <IPADDR> # 多播組源ip unicast_src_ip <IPADDR> unicast_peer { <IPADDR> ... } lvs_sync_daemon_interface eth2 garp_master_delay 10 # secs, default 5 virtual_router_id 51 priority 100 # 優(yōu)先級(jí) advert_int 1 authentication { # 認(rèn)證信息模塊 auth_type PASS auth_pass 1234 # 認(rèn)證密碼,建議使用"openssl rand -hex 4"生成8位隨機(jī)密碼 } virtual_ipaddress { # vrrp實(shí)例 <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL> # 地址定義格式 172.18.14.77/24 dev eth2 # 地址+interface 172.18.14.66/24 dev eth3 label eth3:1 172.18.14.55/24 # 也可以直接寫地址即可 } virtual_ipaddress_excluded { <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> <IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> ... } virtual_routes { # 虛擬網(wǎng)關(guān),在配置中可不定義 src 192.168.100.1 to 192.168.109.0/24 via 192.168.200.254 dev eth2 192.168.110.0/24 via 192.168.200.254 dev eth2 192.168.111.0/24 dev eth3 192.168.112.0/24 via 192.168.100.254 or 192.168.113.0/24 via 192.168.200.254 or 192.168.100.254 dev eth2 blackhole 192.168.114.0/24 } nopreempt nopreempt preempt_delay 300 # waits 5 minutes debug # Debug level, not implemented yet. # notify scripts, alert as above notify_master <STRING>|<QUOTED-STRING> notify_backup <STRING>|<QUOTED-STRING> notify_fault <STRING>|<QUOTED-STRING> notify <STRING>|<QUOTED-STRING> smtp_alert }3)LVS配置
如果你沒有配置LVS+keepalived,那么無(wú)需配置這段區(qū)域,如果你用的是nginx來(lái)代替LVS,這無(wú)需配置這項(xiàng),這里的LVS配置是專門為keepalived+LVS集成準(zhǔn)備的。它是用keepalived的配置文件來(lái)代替ipvsadm來(lái)配置LVS,并不是利用ipvsadm來(lái)配置,這樣會(huì)方便很多,一個(gè)配置文件搞定這些,維護(hù)也方便。這里L(fēng)VS配置也有兩個(gè)配置:一個(gè)是集群的定義,即VIP指定;二是添加真實(shí)服務(wù)器地址。
************Virtual server(s)*********** fwmark <INT> #防火墻標(biāo)記,如果你是基于防火墻標(biāo)記的LVS需要設(shè)置這一項(xiàng) virtual_server group string { # 配置虛擬服務(wù)器,可以是virtual_server IP port | virtual_server fwmark int delay_loop <INT> # delay timer for service polling lb_algo rr|wrr|lc|wlc|lblc|sh|dh # LVS scheduler ops # Enable One-Packet-Scheduling for UDP (-O in ipvsadm) lb_kind NAT|DR|TUN # LVS forwarding method persistence_timeout <INT> # LVS persistence timeout, sec persistence_granularity <NETMASK> # LVS granularity mask (-M in ipvsadm) protocol TCP # Only TCP is implemented ha_suspend # If VS IP address is not set,suspend healthchecker's activity virtualhost <STRING> # VirtualHost string for HTTP_GET or SSL_GET,eg virtualhost www.firewall.loc alpha omega quorum <INT> hysteresis <INT> quorum_up <STRING>|<QUOTED-STRING> quorum_down <STRING>|<QUOTED-STRING> sorry_server <IPADDR> <PORT> # RS to add when all realservers are down real_server <IPADDR> <PORT> { weight <INT> # relative weight to use, default: 1 notify_up <STRING>|<QUOTED-STRING> notify_down <STRING>|<QUOTED-STRING> HTTP_GET|SSL_GET { # 如果是http則選擇HTTP_GET,https時(shí)選擇SSL_GET url { # 做做健康性檢查時(shí)訪問(wèn)的url,可以定多個(gè)url digest <STRING> # A url to test can have multiple entries here status_code <INT> # status code returned in the HTTP headereg status_code 200 } delay_before_retry <INT> # 失敗后判斷為宕機(jī)的延時(shí) connect_ip <IP ADDRESS> # 連接IP地址 connect_port <PORT> # 連接端口 bindto <IP ADDRESS> bind_port <PORT> connect_timeout <INTEGER> # 連接超時(shí)時(shí)間 fwmark <INTEGER> warmup <INT> } TCP_CHECK { # 基于TCP_CHECK的健康性檢測(cè)模塊定義 connect_ip <IP ADDRESS> connect_port <PORT> bindto <IP ADDRESS> bind_port <PORT> connect_timeout <INTEGER> fwmark <INTEGER> warmup <INT> } SMTP_CHECK { # 基于郵件服務(wù)的健康性檢查模塊 host { connect_ip <IP ADDRESS> connect_port <PORT> bindto <IP ADDRESS> bind_port <PORT> connect_timeout <INTEGER> fwmark <INTEGER> } retry <INTEGER> delay_before_retry <INTEGER> helo_name <STRING>|<QUOTED-STRING> warmup <INT> } MISC_CHECK { misc_path <STRING>|<QUOTED-STRING> misc_timeout <INT> warmup <INT> misc_dynamic } } }本章小結(jié)
上面分析幾乎所有keepalived.conf的配置信息,有些地方我直接援引的官方說(shuō)明,而沒有翻譯,我感覺英文說(shuō)的更為準(zhǔn)確。當(dāng)然還有一些選項(xiàng)沒有做詳細(xì)的說(shuō)明,我會(huì)在隨后的文章中加以說(shuō)明,接下來(lái)的文章會(huì)從實(shí)例出發(fā),從實(shí)際案例中領(lǐng)悟這些指令的含義,當(dāng)然了,在實(shí)際生產(chǎn)中并不是所有的指令都會(huì)使用,我們會(huì)選取最主要的進(jìn)行定義,那時(shí)在看就會(huì)想得很輕松。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享名稱:keepalived知識(shí)梳理-創(chuàng)新互聯(lián)
URL分享:http://chinadenli.net/article46/peoeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、手機(jī)網(wǎng)站建設(shè)、企業(yè)建站、移動(dòng)網(wǎng)站建設(shè)、小程序開發(fā)、網(wǎng)站維護(hù)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容