Keepalived工作原理

2021-08-19 07:22:30 字數 4192 閱讀 9292

keepalived是以vrrp協議為實現基礎的,vrrp全稱virtual router redundancy protocol,即虛擬路由冗餘協議。

虛擬路由冗餘協議,可以認為是實現路由器高可用的協議,即將n臺提供相同功能的路由器組成乙個路由器組,這個組裡面有乙個master和多個backup,master上面有乙個對外提供服務的vip(該路由器所在區域網內其他機器的預設路由為該vip),master會發組播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據vrrp的優先順序來選舉乙個backup當master。這樣的話就可以保證路由器的高可用了。

keepalived主要有三個模組,分別是core、check和vrrp。core模組為keepalived的核心,負責主程序的啟動、維護以及全域性配置檔案的載入和解析。check負責健康檢查,包括常見的各種檢查方式。vrrp模組是來實現vrrp協議的

keepalived只有乙個配置檔案keepalived.conf,裡面主要包括以下幾個配置區域,分別是global_defs、static_ipaddress、static_routes、vrrp_script、vrrp_instance和virtual_server。

主要是配置故障發生時的通知物件以及機器標識

global_defs 

notification_email_from alert@abc

.com

smtp_server smtp

.abc

.com

smtp_connect_timeout

30enable_traps

router_id host163

}

注意: 同一網段中virtual_router_id的值不能重複,否則會出錯,相關錯誤資訊如下。  

keepalived_vrrp

[27120

]:ip address associated

with

vrid

notpresent

inreceived packet

:one

ormore vip associated

with

vrid mismatch actual master advert

bogus vrrp packet received on eth1

!!!receive an invalid ip number count associated

with

vrid

!vrrp_instance

(***

)ignoring received advertisment

...

可以用這條命令來檢視該網路中所存在的vrid:tcpdump -nn -i any net 224.0.0.0/8

當使用track_script時可以不用加nopreempt,只需要加上preempt_delay 5,這裡的間隔時間要大於vrrp_script中定義的時長。

virtual_server_group一般在超大型的lvs中用到,一般lvs用不過這東西,因此不多說。

virtual_server ip 

port

connect_port

<

port

>

connect_timeout

<

int>

nb_get_retry

<

int>

delay_before_retry

<

int>}}

}

其他選項暫時不作說明。

主從切換比較讓人蛋疼,需要將backup配置檔案的priority選項的值調整的比master高50個點,然後reload配置檔案就可以切換了。當時你也可以將master的keepalived停止,這樣也可以進行主從切換。

請看該文件同級目錄下的配置檔案示例。

說明:10.210.214.113 為keepalived的備機,其配置檔案為113.keepalived.conf

10.210.214.163 為keepalived的主機,其配置檔案為163.keepalived.conf

10.210.214.253 為virtual ip,即提供服務的內網ip位址,在網絡卡eth0上面

192.168.1.11 為模擬的提供服務的公網ip位址,在網絡卡eth1上面

用tcpdump命令來捕獲的結果如下:

17:20

:07.919419

ip 10.210

.214.163

>

224.0

.0.18

:vrrpv2

,advertisement

,vrid 1,

prio

200,

authtype ******

,intvl 1s,

length

20

注keepalived與lvs結合使用時一般還會用到乙個工具ipvsadm,用來檢視相關vs相關狀態,關於ipvsadm的用法可以參考man手冊。

10.67.15.95為keepalived master,vip為10.67.15.94,配置檔案為95-lvs-keepalived.conf

10.67.15.96為keepalived master,vip為10.67.15.94,配置檔案為96-lvs-keepalived.conf

10.67.15.195為real server  

注意:當使用lvs+dr+keepalived配置時,需要在real server上新增一條iptables規則(其中dport根據情況新增或缺省):

# iptables -t nat -a prerouting -p tcp -d 10.67.15.94 --dport 80 -j redirect
當使用lvs+nat+keepalived配置時,需要將real server的預設路由配置成director的vip10.67.15.94,必須確保client的請求是通過10.67.15.94到達real server的。

# cd keepalived-***

# ./configure --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --mandir=/usr/share

# make && make install

你也可以打成rpm包,然後安裝。

我們用到的ha場景如下: 兩台主機host113和host163,內網ip在eth1網絡卡上,分別是10.210.214.113和10.210.214.163,vip為公網ip在eth0上,ip位址是202.102.152.253,閘道器為202.102.152.1。當vip在host113上提供服務時,host113上的預設路由為202.102.152.1,提供服務的埠為202.102.152.253:443。host113發生故障需要將vip及服務切回到host163上的時候,需要以下幾步,第一將vip接管過來,第二新增預設路由202.102.152.1,第三啟動在埠202.102.152.253:443上的服務。

如此一來,keepalived需要另外的指令碼來完成新增預設路由和啟動服務工作,這點和heartbeat中的resources是相同的。目前我進行了測試,發現keepalived速度要比heartbeat快,也就是說效率比heartbeat高。並且,最重要的一點,keepalived支援多個backup。

不要問我為何有以上需求。要為兩個不同的網域名稱提供https服務,由於ssl證書問題,必須有兩個公網ip位址分別繫結443埠。

當然,通過sni也可以實現乙個公網ip繫結443埠來為多個網域名稱提供https服務,但是這需要瀏覽器支援(m$的ie瀏覽器不支援)。(nginx/apache)

keepalived的主從切換比較讓人蛋疼,需要修改配置檔案或停止一方的執行。但是由於keepalived是通過vrrp協議來實現failover(故障轉移)的,因此也決定了手動主從切換的不便。

keepalived的文件也很舊了,一直都找不到合適的文件,之前我就一直忽略了vrrp_script這個區域,導致很多事情想不通。

Keepalived工作原理

keepalived是以vrrp協議為實現基礎的 vrrp virtual router redundancy protocol 虛擬路由冗餘協議 可以認為是實現路由器高可用的協議,即將n臺提供相同功能的路由器組成乙個路由器組,這個組裡面有乙個master和多個backup,master上面有乙個對...

keepalived 工作原理

keepalived工作原理 keepalived是集群管理中保證集群高可用的乙個服務軟體,其功能類似於heartbeat,用來防止單點故障。keepalived是以vrrp協議為實現基礎的,vrrp全稱virtual router redundancy protocol,即虛擬路由冗餘協議。虛擬路...

keepalived的工作原理

目錄 keepalived 的介紹 keepalived 三個模組 vrrp 虛擬路由冗餘協議 keepalived 兩種模式 keepalived 的實現 由於工作中有用到keepalived 服務簡單記錄一下keepalived 簡單的原理 1.core 負責主程序的啟動維護,和全域性配置檔案的...