1、原理
一、概要介紹
若是將TCP/IP劃分爲5層,則Keepalived就是一個相似於3~5層交換機制的軟件,具備3~5層交換功能,其主要做用是檢測web服務器的狀態,若是某臺web服務器故障,Keepalived將檢測到並將其從系統中剔除,當該web服務器工做正常後Keepalived自動將其加入到服務器羣中,這些工做所有自動完成,而不須要人工干預,只須要人工修復故障的web服務器便可。
二、工做原理
Keepalived基於VRRP協議來實現高可用解決方案,利用其避免單點故障,一般這個解決方案中,至少有2臺服務器運行Keepalived,即一臺爲MASTER,另外一臺爲BACKUP,但對外表現爲一個虛擬IP,MASTER會發送特定消息給BACKUP,當BACKUP收不到該消息時,則認爲MASTER故障了,BACKUP會接管虛擬IP,繼續提供服務,從而保證了高可用性,具體以下圖:
linux
圖1 Keepalived原理圖web
3層機理是發送ICMP數據包即PING給某臺服務器,若是不痛,則認爲其故障,並從服務器羣中剔除。
4層機理是檢測TCP端口號狀態來判斷某臺服務器是否故障,若是故障,則從服務器羣中剔除。
5層機理是根據用戶的設定檢查某個服務器應用程序是否正常運行,若是不正常,則從服務器羣中剔除。
三、實際做用
主要用做RealServer的健康檢查,以及負載均衡設備MASTER和BACKUP之間failover的實現。
2、架構
本系列文章以CentOS Linux release 6.0 (Final)爲例,介紹用LVS+Keepalived實現高可用負載均衡。具體業務需求是用虛擬IP轉發8080、2五、21端口請求到後端的真實服務器來處業務邏輯,系統拓撲以下圖所示:
後端
圖2 系統拓撲圖bash
客戶端經過VIP(Virtual IP)(172.28.14.227/228/229)來訪問負載均衡服務器,負載均衡服務器經過MASTER/172.28.19.92或BACKUP/172.28.19.93將請求分別轉發給真實服務器(Web服務器/172.28.19.100/101/10二、郵件服務器/172.28.19.103/104/10五、文件服務器/172.28.19.106/107/108)。
負載均衡服務器的MASTER和BACKUP上都必須安裝LVS+Keepalived,下面開始安裝和配置之旅。
3、LVS安裝
Master和Backup都必須安裝LVS,安裝ipvsadm步驟以下:
(1)依賴包安裝
執行以下命令查看依賴包是否安裝:
(A)#rpm -qa|grep popt
popt-static-1.13-7.el6.x86_64
popt-devel-1.13-7.el6.x86_64
popt-1.13-7.el6.x86_64
若是沒有上述包,則須要依次安裝,具體以下:
#yum install popt
#yum install popt-devel
#yum install popt-static
(B)rpm -qa|grep libnl
libnl-1.1-14.el6.x86_64
libnl-devel-1.1-14.el6.x86_64
若是沒有上述包,則須要依次安裝,具體以下:
#yum install libnl
#yum install libnl-devel
(2)ipvsadm安裝
#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
#tar zxvf ipvsadm-1.26.tar.gz
#ln -s /usr/src/kernels/2.6.32-71.el6.x86_64 /usr/src/linux //注意:每一個系統這個路徑可能會不同
#cd ipvsadm-1.26
#make
#make install
OK,LVS就這麼安裝好了。
4、Keepalived安裝
Master和Backup都必須安裝Keepalive,安裝步驟以下:
#wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
#tar zxvf keepalived-1.2.7.tar.gz
#cd keepalived-1.2.7
#./configure
#make
#make install
OK,Keepalived安裝好了。
若是#./configure時出現下面錯誤:
configure: error:
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files. !!!
則須要安裝OpenSSL相關包:
#yum install openssl
#yum install openssl-devel
而後從#./configure步驟開始執行如下後續步驟就行。
5、配置
一、服務腳本
將Keepalived作成服務啓動(MASTER和BACKUP都是必須的),具體步驟以下:
(1)拷貝服務啓動腳本
#cp ./keepalived/etc/init.d /etc/init.d
(2)拷貝配置文件
#mkdir /etc/keepalived
#cp ./keepalived/etc/keepalived/keepalived.conf /etc/keepalived
(3)拷貝可執行文件
#cp ./bin/keepalived /usr/bin
(4)啓動/中止服務
#service keepalived start
#service keepalived stop
二、配置MASTER
備份並打開配置文件修改部份內容,尤爲注意紅色部分,具體以下:
#cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
#vi /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state MASTER # 狀態實際MASTER
interface eth0 # 監聽網卡切換
virtual_router_id 51
priority 100 # 優先級(越大優先級越高)
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 虛擬IP地址列表,即VIP
172.28.14.227
172.28.14.228
172.28.14.229
}
}
virtual_server 172.28.14.227 8080 {
delay_loop 6
lb_algo wlc
lb_kind DR # DR模式
persistence_timeout 50
protocol TCP
real_server 172.28.19.100 8080 {
weight 1 # 權重(權重越高處理的請求越多)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 8080
}
}
real_server 172.28.19.101 8080 {
weight 1 # 權重(權重越高處理的請求越多)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 8080
}
}
real_server 172.28.19.102 8080 {
weight 1 # 權重(權重越高處理的請求越多)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 8080
}
}
}
virtual_server 172.28.14.228 25 {
delay_loop 6
lb_algo wlc
lb_kind DR # DR模式
persistence_timeout 50
protocol TCP
real_server 172.28.19.103 25 {
weight 1 # 權重(權重越高處理的請求越多)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 25
}
}
real_server 172.28.19.104 25 {
weight 1 # 權重(權重越高處理的請求越多)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 25
}
}
real_server 172.28.19.105 25 {
weight 1 # 權重(權重越高處理的請求越多)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 25
}
}
}
virtual_server 172.28.14.229 21 {
delay_loop 6
lb_algo wlc
lb_kind DR # DR模式
persistence_timeout 50
protocol TCP
real_server 172.28.19.106 21 {
weight 1 # 權重(權重越高處理的請求越多)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 21
}
}
real_server 172.28.19.107 21 {
weight 1 # 權重(權重越高處理的請求越多)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 21
}
}
real_server 172.28.19.108 21 {
weight 1 # 權重(權重越高處理的請求越多)
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 21
}
}
}
三、配置BACKUP
BACKUP配置與MASTER基本一致,除了紅色部分外,具體以下:
#cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak
#vi /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
state BACKP # 狀態實際BACKUP
...
priority 99 # 優先級99(比MASTER優先級100低)
...
}
四、配置Realserver
爲Realserver的某塊網卡建立啓動腳本,腳本內容以下:
#vi realserverd
#!/bin/bash
VIP=172.28.14.227
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo:0
sysctl -p > /dev/null 2>&1
echo "realserver start OK"
;;
stop)
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
ifconfig lo:0 down
/sbin/route del $VIP > /dev/null 2>&1
echo "realserver stoped"
;;
*)
echo "Usage:$0 {start|stop}"
exit 1
esac
exit 0
注意腳本中紅色部分,每塊網卡綁定一個虛擬IP地址,若是綁定多個虛擬IP,則須要爲每塊網卡建立一個腳本,而且指定lo:X(好比:lo:0,lo:1等),另外,.和/etc/rc.d/funtions之間有空格。
啓動keepalived服務,並執行上述腳本,而後用ip a能確認是否有VIP地址。
輸入ipvsadm -Ln查看LVS工做狀態。
中止MASTER的keepalived服務,BACKUP能接管VIP地址,再次啓動MASTER的keepalived服務,MASTER又能再一次接管VIP地址。
若是這些你都搞定了,恭喜你,你已經擁有高可用服務了,!服務器