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 負責主程序的啟動維護,和全域性配置檔案的...