系統環境:CentOS 5.6 32位(最小安裝) 架構圖如上圖
試過在64位時編譯會出錯,提示找不到一些核心庫檔案,檔案名稱含了64字樣的緣故,編譯有問題,逐一修改修改原安裝包很麻煩。還不知道會有其他未知BUG。
關鍵點:keepalived 是運作在LVS基礎上的,LVS 安裝ipvsadmin #yum install ipvsadmin (省去編譯版本配對問題)
很多朋友使用編譯安裝不成功,是由于ipvsadmin的版本跟你使用的linux核心不一緻。
首先請檢視自己 Linux 作業系統核心的版本 指令: uname -a 指令: cat /proc/version 指令:lsb_release -a
下面看我怎麼編譯安裝的。(linux應用中編譯安裝是我力薦)
下載下傳軟體ipvsadm
下載下傳後,安裝ipvsadmin
編譯時候報 make[1]: *** [libipvs.o] Error 1 錯誤
但是下了ipvsadm後編譯出了問題:
解決辦法可能不隻一種;我是用的下面的辦法搞定的:
ln -s /usr/src/kernels/2.6.x-xx.EL-i686/ /usr/src/linux
cd ipvsadm-1.24
make && make install
ipvsadmin -v 應該能看到如下資訊:
[root@localhost ipvsadm-1.24]# ipvsadm -v
ipvsadm v1.24 2005/12/10 (compiled with popt and IPVS v1.2.0)
說明編譯安裝成功!
另外注意 keepalived 在Linux下的(VRRP)虛拟路由備援協定 ,keepalived采用VRRP機制,那麼就會涉及負載均衡伺服器連接配接的路由器(交換機)
VRRP協定将兩台或多台路由器裝置虛拟成一個裝置,對外提供虛拟路由器IP(一個或多個)。
實際使用中,如果你連接配接的使用的路由器是傻瓜型的話,可以忽略這個問題。
如果你用是智能路由器,設定了規則的話,那就要注意了,一些規則會将VRRP發出的狀态檢測包,當做病毒屏蔽掉,最後導緻的結果是keepalived 負載均衡器之間的失敗切換failover,是通過VRRPv2(Virtual Router Redundancy Protocol) stack實作的。
還可能導緻不能檢測後端真實伺服器的存活狀态(檢測web伺服器的狀态)。
簡單知道
1.keepalived 通過對伺服器池對象的健康檢查,實作對失效機器/服務的故障隔離 (官方專用名詞“Checkers”負責真實伺服器的健康檢查healthchecking)
2.負載均衡器之間的失敗切換failover,是通過VRRPv2(Virtual Router Redundancy Protocol) stack實作的。
不就是(LVS-DR,LVS-NAT,LVS-TUN)3種模式!
VS/DR: 即(Virtual Server via Direct Routing)
也就是用直接路由技術實作虛拟伺服器。它的連接配接排程和管理與VS/NAT和VS/TUN中的一樣,但它的封包轉發方法又有不同,VS/DR通過改寫請求封包的MAC位址,将請求發送到Real Server,而Real Server将響應直接傳回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載排程機制中性能最高最好的,但是必須要求Director Server與Real Server都有一塊網卡連在同一實體網段上。
測試環境 :
lvs-master:192.168.9.201 (主)
lvs-backup:192.168.9.202 (備)
vip:192.168.9.200 (虛拟ip)
web1:192.168.9.203 (後端真實WEB伺服器1)
web2:192.168.9.204 (後端真實WEB伺服器2)
netmask:255.255.255.0 (掩碼)
gateway:192.168.9.1 (網關)
網絡拓撲:詳細見“LVS叢集的體系結構,建構強壯的體系結構裡負載均衡層、真實伺服器層、後端共享存儲層都是相輔相成”文章 如圖
echo "============================ 更新系統時間 ======================"
yum install -y ntp
ntpdate time.nist.gov
echo "00 01 * * * /usr/sbin/ntpdate time.nist.gov" /etc/crontab
echo “========================= 安裝ipvsadm、keepalived ==================”
[root@master ~]# cd /usr/local/src
[root@master ~]# ln -sv /usr/src/kernels/2.6.18-194.el5-i686/ /usr/src/linux
[root@master ~]# tar -zxvf ipvsadm-1.24.tar.gz
[root@master ~]# cd ipvsadm-1.24
[root@master ~]# make;make install
[root@master ~]# cd ..
[root@master ~]# tar -zxvf keepalived-1.1.17.tar.gz
[root@master ~]# cd keepalived-1.1.17
[root@master ~]# ./configure
configure: error:
!!! OpenSSL is not properly installed on your system. !!!
!!! Can not include OpenSSL headers files.
解決辦法:
[root@master ~]# yum -y install openssl-devel
[root@master ~]# ./configure
編譯的時候出現這個提示,說明keepalived和核心結合了,如果不是這樣的,需要加上這個參數./configure --with-kernel-dir=/kernel/path
Keepalived configuration
------------------------
Keepalived version : 1.1.17
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
Use VRRP Framework : Yes
Use LinkWatch : No
Use Debug flags : No
echo “======================= 配置keepalived ===========================”
[root@master ~]# cp /usr/local/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
[root@master ~]# cp /usr/local/etc/sysconfig/keepalived /etc/sysconfig/
[root@master ~]# mkdir /etc/keepalived
[root@master ~]# cp /usr/local/sbin/keepalived /usr/sbin/
[root@master ~]# vi /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
}
notification_email_from [email protected] #http://jimmyli.blog.51cto.com/
smtp_server jimmyli.blog.51cto.com
# smtp_connect_timeout 30
router_id LVS_DEVEL
}
# VIP1
vrrp_instance VI_1 {
state MASTER #備份伺服器上将MASTER改為BACKUP
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 51
priority 100 # 備份服務上将100改為90
advert_int 5
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.9.200
#(如果有多個VIP,繼續換行填寫.)
virtual_server 192.168.9.200 80 {
delay_loop 6 #(每隔6秒查詢realserver狀态)
lb_algo wlc #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP的連接配接60秒内被配置設定到同一台realserver)
protocol TCP #(用TCP協定檢查realserver狀态)
real_server 192.168.9.203 80 {
weight 100 #(權重)
TCP_CHECK {
connect_timeout 10 #(10秒無響應逾時)
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
real_server 192.168.9.204 80 {
weight 100
connect_timeout 10
}
[root@master ~]# service keepalived start|stop
[root@master ~]# chkconfig –level 2345 keepalived on
echo “====================== 配置realserver =========================”
[root@web_1 ~]# vi /root/lvs_real.sh
#!/bin/bash
#http://jimmyli.blog.51cto.com/
#Config realserver
SNS_VIP=192.168.9.200
/etc/rc.d/init.d/functions
case "$1" in
start)
/sbin/ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_VIP dev lo:0
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
sysctl -p >/dev/null 2>&1
echo "RealServer Start OK"
;;
stop)
/sbin/ifconfig lo:0 down
/sbin/route del $SNS_VIP >/dev/null 2>&1
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
echo "RealServer Stoped"
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
[root@web_1 ~]# chmod +x /roo/lvs_real.sh
[root@web_1 ~]# /root/lvs_real.sh start
[root@web_1 ~]# ifconfig
[root@web_1 ~]# echo “/root/lvs_real.sh start” >> /etc/rc.local
echo “===================== 測試LVS+keepalived ========================”
#LVS_master、LVS_backup上開啟keepalived,LVS_master先綁定VIP
LVS_master:
LVS_backup:
#解析域名,測試通路
#測試關閉LVS_master,短暫的掉包後,LVS_backup馬上接替工作
LVS_backup接替LVS_master綁定VIP
LVS_backup負責轉發
LVS_master重新開機完成後,就會自動接回控制權,繼續負責轉發
#測試關閉其中一台realserver
通過上面測試可以知道,當realserver故障或者無法提供服務時,負載均衡器通過健康檢查自動把失效的機器從轉發隊列删除掉,實作故障隔離,保證使用者的通路不受影響
#重新開機被關閉的realserver
當realserver故障恢複後,負載均衡器通過健康檢查自動把恢複後的機器添加到轉發隊列中
實際生産環境中,keepalived是非常穩定的,并且能夠承受巨量并發數。
文章中沒有涉及到後端真實伺服器的架構配置,我認為一個完整的高性能WEB架構應該,後端也是重中之重的,完整的一部分,必備可少。歡迎朋友一起交流,讨論。扣扣:柒⑥柒陸叁⑤叁伍
本文轉自jimmy_lixw 51CTO部落格,原文連結:http://blog.51cto.com/jimmyli/601701,如需轉載請自行聯系原作者