lvs的單點故障:當lvs負載均衡器出現故障的時候,那么后端所有的服務器都將無法訪問;
lvs對后臺服務器沒有健康監測機制:當后臺服務器宕機之后lvs還是會調度服務到后臺的服務器;
所以我們就需要一款工具來解決以上問題。
keepalived是基于VRRP協議進行工作的,其內部結構為:
lvs wrapper:提供lvs的調度
checker:進行rs的健康監測機制,配置lvs wrapper進行調度
VRRP stack:調用vrrp協議進行工作
smtp:進行郵件通知
watchdog:發現keepalived內部服務異常立即重啟服務,防止軟件故障;
一、實驗環境
4臺服務器,兩臺lvs負載均衡,兩臺RS服務器提供http服務:
-
lvs-1:192.168.11.100
-
lvs-2:192.168.11.101
-
RS-1:192.168.11.201
-
RS-2:192.168.11.202
拓撲如下:
二、實驗步驟
RS配置:
-
安裝nginx并提供網頁
-
配置Lvs-DR調度方法,在rs執行如下腳本:
#RS服務器配置VIP地址和主機路由,并且關閉arp應答和響應# #!/bin/bash # VIP=192.168.11.250 NETMASK=255.255.255.255 BRO=192.168.11.230 NETWORK=lo:0 case $1 in start) echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce ifconfig $NETWORK $VIP netmask $NETMASK broadcast $BRO up route add -host $VIP $NETWORK ;; stop) echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce ifconfig $NETWORK down route del -host $VIP $NETWORK ;; *) echo "Usage:$0 [start|stop]" esac
keepalived配置:
-
采用lvs-dr調度算法,兩臺lvs服務器都需要安裝keepalived
yum install -y keepalived ipvsadm
-
編輯keepalived配置文件/etc/keepalived/keepalived.conf,兩臺lvs配置文件需要一致:
! Configuration File for keepalived global_defs { notification_email { root@localhost #當主從服務器發生變更的時候發郵件到此郵箱進行通知# } notification_email_from keepalived@localhost #通過keepalived@localhost發郵件# smtp_server 127.0.0.1 #smtp服務器配置# smtp_connect_timeout 30 #smtp服務器連接超時時長# router_id node1 #運行keepalived機器的標識# vrrp_mcast_group4 224.0.115.15 #組播地址為224.0.115.115# } vrrp_instance VI_1 { #vrrp VI_1實例# stater MASTER #本機為MASTER# interface ens33 #虛擬ip配置到ens33網卡# virtual_router_id 14 #虛擬路由編號為14# priority 100 #自身優先級為100,范圍從1-254# advert_int 1 #每1秒鐘發出一次組播信息通告自身優先級和虛擬路由編號# authentication { #進行認證# auth_type PASS #認證方法為簡單字符認證# auth_pass b1946ac9 #認證字符為b1946ac9,兩臺服務器需要一致# } virtual_ipaddress { 192.168.11.250/24 dev ens33 #浮動ip地址為192.168.11.250,并且配置為ens33的輔助ip,也可以綁定到別名網卡上# } } virtual_server 192.168.11.250 80 { #lvs的vip地址# delay_loop 3 #lvs輪詢時間間隔# lb_algo rr #RS調度算法為輪詢# lb_kind DR #LVS調度方式為DR# protocol TCP #使用的協議,僅支持TCP協議# real_server 192.168.11.201 80 { #RS-1的地址和端口# weight 1 #RS-1權重為1# HTTP_GET { #做應用層健康狀況監測# url { path / #要監控的url為/# status_code 200 #響應狀態碼為200表示健康# } } connect_timeout 1 #RS連接超時時長為1秒# nb_get_retry 3 #最大重試連接次數為3次# delay_before_retry 1 #兩次連接重試間隔為1秒# } real_server 192.168.11.202 80 { #第二臺RS# weight 1 HTTP_GET { url { path / status_code 200 } } connect_timeout 1 nb_get_retry 3 delay_before_retry 1 }
-
兩臺lvs都需要做如此配置,不過第二臺服務器需要修改優先級和狀態為BACKUP;
-
啟動keepalived,然后通過ipvsadm -ln可以看到lvs已經配置成功,當一臺RS的網頁文件被刪除之后則被認為RS故障,會從ipvs中移除。
注意:
RS還可以進行傳輸層的健康狀態檢測,參數為:
TCP_CHECK {
connect_ip #向RS的那個地址發起健康狀態檢測,默認為RIP#
connect_port #想RS的哪個端口發起健康狀態檢測,默認為提供服務的端口#
bindto #發出健康狀態檢測的源地址,默認為lvs的dip#
bindto #發出健康狀態檢測的源端口,默認為lvs的對外提供服務端口#
connect_timeout #超時連接時長#
}
原創文章,作者:王子豪,如若轉載,請注明出處:http://www.www58058.com/79338