Keepalived是爲了實現LVS(持久連接)高可用而應運而生的一款獨具特色的軟件,以其獨特的使用方式受到廣大愛好者的追捧,下邊我本就詳細講解一下其內容。
Keepalived簡介
正如開頭所說,keepalived主要是爲了實現LVS的高可用而產生的,爲此他實現瞭如下三個功能:ip地址轉移、LVS規則轉移和後端服務器健康狀況檢測。我們來一一分析。
VRRP協議
Keepalived如何實現ip地址轉移的功能呢?這裏就不得不提到VRRP協議(虛擬路由冗餘協議)了,它是一種爲了解決網絡高可用的實現機制,它能實現路由網關地址的漂移,以解決網關損壞而帶來的網絡故障。而keepalived的ip地址轉移功能正是通過軟件的方式模擬了VRRP協議的實現,其工作示意圖如下:
圖1
一旦master出現故障,VRRP會根據優先級的高低在多個路由上選擇master,並嘗試重新獲取原來master信息,如果在規定時間段內沒有應答,新的網關將漂移到新master上。而多個路由之間則通過互傳在線信息以確保自己的狀態,一旦發現沒有信息,在等待一定時間段後便可頂替成爲master。這就是VRRP的工作流程。它還有很多的定義,如:
備份組:將多個網關設備組成一個虛擬設備,這個虛擬設備就叫備份組
角色:分爲主設備和從設備,與其優先級有關。只能有一個主,可以有多個從。等
雙主模型:使多臺設備互爲主從關係來實現其功能。
這些都能在官方文檔中找到,就不在多講了。主要在於keepalived正是藉助於這個協議,運用內部模塊虛擬出其功能,來實現ip地址轉移功能。
LVS規則轉移和後端服務器健康狀況檢測
Keepalived的另外兩個功能則是通過內部機制來模擬實現的,我們將在後邊的實現配置下詳細講解,這裏就不羅嗦了。要注意的是,根據LVS的特性,keepalived分爲主從模型和雙主模型。
Keepalived的作用
說到其作用,我們就不得不先看一張圖,如下:
圖2 官方工作模型
從圖上我們不難看出,keepalived設計的最初目的就是爲了實現LVS的高可用。但是我們知道如果要實現其高可用我們還可以用corosync等來實現,爲什麼要用keepalived呢?因爲其使用簡單,所以深受大家喜歡。另外它還用作RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現。高可用web架構:LVS+keepalived+nginx+apache+php+eaccelerator
Keepalived實現和配置
Keepalived的實現依賴於其配置文件和諸多的腳本,其不同模型的配置不同,下邊我們用Keepalived+HAProxy配置高可用負載均衡:
1、在節點上安裝keepalived。
2、查看主從模型的配置文件;cat /etc/keepalived/keepalived.conf 格式如下:
! Configuration File for keepalived
global_defs {
notification_email {
}
notification_email_from [email protected]
smtp_connect_timeout 3
smtp_server 127.0.0.1
router_id LVS_DEVEL
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 1
weight 2
}
vrrp_script chk_mantaince_down {
script "[[ -f /etc/keepalived/down ]] && exit 1 || exit0"
interval1
weight 2
}
vrrp_instance VI_1 {
interface eth0
state MASTER # BACKUP for slaverouters
priority 101 # 100 for BACKUP
virtual_router_id 51
garp_master_delay 1
authentication {
auth_type PASS
auth_pass password
}
track_interface {
eth0
}
virtual_ipaddress {
172.16.100.1/16 dev eth0 label eth0:0
}
track_script {
chk_haproxy
chk_mantaince_down
}
notify_master "/etc/keepalived/notify.sh master"
notify_backup "/etc/keepalived/notify.sh backup"
notify_fault "/etc/keepalived/notify.sh fault"
}
注意:
1、上面的state爲當前節點的起始狀態,通常在master/slave的雙節點模型中,其一個默認爲MASTER,而別一個默認爲BACKUP。
2、priority爲當關節點在當前虛擬路由器中的優先級,master的優先級應該大於slave的;
其中global_defs表示全局模式,vrrp_instance用來定義虛擬路由組的。
3、提供notify.sh腳本
#!/bin/bash
#
vip=172.16.100.1
contact='root@localhost'
Notify() {
mailsubject="`hostname` to be $1: $vip floating"
mailbody="`date '+%F %H:%M:%S'`: vrrp transition, `hostname` changed to be $1"
echo $mailbody | mail -s "$mailsubject" $contact
}
case "$1" in
master)
notify master
/etc/rc.d/init.d/haproxy start
exit 0
;;
backup)
notify backup
/etc/rc.d/init.d/haproxy restart
exit 0
;;
fault)
notify fault
exit 0
;;
*)
echo 'Usage: `basename $0` {master|backup|fault}'
exit 1
;;
esac
4、安裝HAProxy
tar
cd
make
cd
mkdir
cd
vim
/usr/local/haproxy/sbin/haproxy
haproxy.cfg
=============
global
defaults
listen
#cookie
#check
#rise
#fall
5、測試負載均衡效果以及高可用性 負載均衡測試:
啓動真實服務器的web服務,在2個真實服務器上創建2個首頁文件,內容分別爲test1和test2,如果在瀏覽器上訪問web服務每次刷新既顯示test1又顯示tetst2就說明負載均衡已經生效了.
6、高可用性測試:
拔掉主調度服務器的網線或者關閉主調度服務器,看下VIP是否順利的切換到從調度器,假如切換正常,那就說明keepalived已經成功生效了