LVS簡介
lvs有三種工作模式NAT(地址轉換),IP Tunneling(IP隧道)、Direct Routing(直接路由)。 工作效率最低的是NAT模式,但NAT模式可以用於各種系統,各種環境的負載均衡,只需要一個公網ip即可實現 IP Tunneling模式調度器將連接分發到不同的後端real server,然後由real server處理請求直接相應給用戶,大大提高了調度器的調度效率,後端real server沒有物理位置和邏輯關係的限制,後端real server可以在Lan/Wlan,但是後端real server必須支持IP隧道協議. DR(Direct Routing)是效率最高的,與IP Tunneling類似,都是處理一般連接,將請求給後端real server,然後由real server處理請求直接相應給用戶,Direct Routing與IP Tunneling相比,沒有IP封裝的開銷,但由於採用物理層,所以DR模式的調度器和後端realserver必須在一個物理網段裏,中間不能過路由器(也就是一個交換機相連).
lvs支持8種不同的調度算法輪叫(rr)、加權輪叫(wrr)、最小連接(lc)、加權最小連接(wlc)、基於局部性最小連接(lblc)、帶複製的基於局部性最少鏈接(lblcr)、目標地址散列(dh)和源地址散列(sh).
Keepalived是運行在lvs 之上,它的主要功能是實現真實機的故障隔離及負載均衡器間的失敗 切換,提高系統的可用性
系統平臺:Centos6.4
Keepalived版本:keepalived-1.2.4.
LVS版本:ipvsadm-1.2
LVS_Master:192.168.10.51
LVS_Slave:192.168.10.40
Apache1:192.168.10.41
Apache2:192.168.10.49
一、安裝apache
1.1我們採用yum安裝
#yum –y installhttpd
#/etc/init.d/httpdstart
1.2分別在兩臺web上建立測試頁
# echo "zhangfang111111">/var/www/html/index.html
# echo "zhangfang222222">/var/www/html/index.html
1.3 測試是否正常
Web1
Web2
訪問都ok
1.3執行lvs.sh腳本綁定VIP
#catlvs.sh
#!/bin/bash
#description:Config lvs.sh
VIP=192.168.10.180
/etc/rc.d/init.d/functions
case"$1" in
start)
/sbin/ifconfig lo:0 $VIP netmask255.255.255.255 broadcast $VIP
/sbin/route add -host $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 $VIP >/dev/null2>&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
#lvs.sh start
二、安裝lvs+keepalievd(兩臺調度器都安裝)
2.1安裝之前系統需要安裝popt-statickernel-devel make gcc openssl-devel lftp libnl* popt*
2.2 開啓路由轉發功能
#vim /etc/sysctl.conf
net.ipv4.ip_forward= 1
#sysctl -p
2.3.安裝ipvsadm
#wget http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.26.tar.gz
2.4做軟連接,防止make時出錯,找不到kernel文件
#ln -s/usr/src/kernels/2.6.32-504.16.2.el6.x86_64/ /usr/src/linux/
#tar ipvsadm-1.26.tar.gz
#cd ipvsadm
#make &&make install
Ipvsadm安裝完成
2.5安裝keepalived
#wgethttp://www.keepalived.org/software/keepalived-1.2.4.tar.gz
# tar zxvfkeepalived-1.2.4.tar.gz
#cdkeepalived-1.2.4
# ./configure&& make && make install
三、keepalived做成啓動服務,方便管理
# cp/usr/local/etc/rc.d/init.d/keepalived /etc/init.d/
# cp/usr/local/etc/sysconfig/keepalived /etc/sysconfig/
# mkdir/etc/keepalived/
cp /usr/local/etc/keepalived/keepalived.conf/etc/keepalived/
# cp/usr/local/sbin/keepalived /usr/sbin/
# servicekeepalived start | stop
3.1修改keepalived配置文件如下
! ConfigurationFile for keepalived
global_defs {
notification_email {
}
notification_email_from root@localhost
smtp_server 127.0.0.1
smpt_connect_timeout 30
router_id zhangfang
}
vrrp_instanceVI_1 {
state MASTER
interface eth0 #指定HA監測網絡的接口
virtual_router_id 20 #虛擬路由標示,這是標示是一個數字,同一個vrrp實例使用唯一的標示,即同一vrrp_instance下,MASTER和BACKUP必須是一致的
priority 100 #定義優先級,數字越大,優先級越高
advert_int 1 #設置MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
authentication { #設置驗證類型和密碼
auth_type PASS #設置認證類型,主要有PASS和AH兩種
auth_pass 1111 #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通行
}
virtual_ipaddress {
192.168.10.180
}
}
virtual_server192.168.10.180 80 {
delay_loop 6 #設置運行狀況的檢查時間
lb_algo rr
lb_kind DR
#persistence_timeout 50 #會話保持時間
protocol TCP #轉發協議類型
real_server 192.168.10.41 80 {
weight 3
TCP_CHECK { #realserver的狀態檢測設置部分
connect_timeout 10 #標示10s無響應超時
nb_get_retry 3 #重試次數
delay_before_retry 3 #重試間隔
connect_port 80
}
}
real_server 192.168.10.49 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
3.2將配置文件同步到LVS_Slave上
#scp /etc/keepalived/keepalived.conf [email protected]:/etc/keepalived/
修改內容如下:
state BACKUP #
狀態
priority 100 #
修改優先級
3.3
分別啓動兩臺lvs,我們來查看日誌
LVS_Master
注意,從劃紅線區域看到這臺主機綁定了VIR
通過ip addr 查看下VIP是否綁定
LVS_Slave
:日誌信息
3.4
我們在LVS_Master上看下羣集狀態
四、進行測試
在瀏覽器裏面輸入http://192.168.10.180
說明按照輪詢的算法,分別轉後至節點,從而達到負載均衡的效果
五、模擬故障
5.1停掉節點1
#/etc/init.d/httpdstop
5.2查看lvs狀態
#ipvsadm -ln
IP VirtualServer version 1.2.1 (size=4096)
ProtLocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.180:80 rr
->192.168.10.41:80 Route 3 0 2
注意出現故障的那臺機器,已經被踢出了,從而實現了健康檢查
測試一下
查看郵件
5.3 關掉MASTER上的keepalived
#/etc/init.d/keepalivedstop
5.4 查看SLAE的狀態
已經正常接管過來,
測試一下
訪問正常
注意,大家可以看到,經過上面的演示我們實現了LVS的高可用及前端負載均衡的高可用,同時實現對後端realserer監控,也實現後端resalserver宕機時會給管理員發送郵件,但是我們還有幾個問題沒有解決,問題如下
1. 所以realserver都宕機,怎麼處理,是不是用戶就沒法打開,還是提供一下爲何頁面
2. 怎麼完成爲何模式keepalived切換?
3. 如何在keepalived故障時,發送郵件給指定的管理員
六、我們在負載均衡器上提供維護頁面,這樣比較靠譜,也比較常用
6.1 分別在MASTER和SLAVE安裝httpd
#yum –y installhttpd
6.2配置維護頁面
#echo"Website is currently under maintenance, please come back later" >/var/www/html/index.html
6.3啓動httpd
#/etc/init.d/httpdstart
6.4修改配置文件
!Configuration File for keepalived
global_defs{
notification_email {
}
notification_email_from root@localhost
smtp_server 127.0.0.1
smpt_connect_timeout 30
router_id zhangfang
}
vrrp_instanceVI_1 {
state MASTER
interface eth0 #指定HA監測網絡的接口
virtual_router_id 20 #虛擬路由標示,這是標示是一個數字,同一個vrrp實例使用唯一的標示,即同一vrrp_instance下,MASTER和BACKUP必須是一致的
priority 100 #定義優先級,數字越大,優先級越高
advert_int 1 #設置MASTER與BACKUP負載均衡器之間同步檢查的時間間隔,單位是秒
authentication { #設置驗證類型和密碼
auth_type PASS #設置認證類型,主要有PASS和AH兩種
auth_pass 1111 #設置驗證密碼,在同一個vrrp_instance下,MASTER與BACKUP必須使用相同的密碼才能正常通行
}
virtual_ipaddress {
192.168.10.180
}
}
virtual_server192.168.10.180 80 {
delay_loop 6 #設置運行狀況的檢查時間
lb_algo rr
lb_kind DR
#persistence_timeout 50 #會話保持時間
protocol TCP #轉發協議類型
real_server 192.168.10.41 80 {
weight 3
TCP_CHECK { #realserver的狀態檢測設置部分
connect_timeout 10 #標示10s無響應超時
nb_get_retry 3 #重試次數
delay_before_retry 3 #重試間隔
connect_port 80
}
}
real_server 192.168.10.49 80 {
weight 3
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
sorry_server 127.0.0.1 80
}
增加sorry_server選項
6.5關閉所有的realserver,並重啓下MASTER和SLAVE的keepalived
#/etc/init.d/httpdstop
#/etc/init.d/keepalivedrestart
6.6查看lvs
# ipvsadm-ln
IPVirtual Server version 1.2.1 (size=4096)
ProtLocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.10.180:80 rr
->127.0.0.1:80 Local 1 0 0
可以看到所有節點已經被踢出,只有本機提供服務
測試