LVS+keepalived+nginx+tomcat 主從熱備 負(fù)載均衡
一、 環(huán)境準(zhǔn)備
本次配置基于DR負(fù)載均衡模式,設(shè)置一個(gè)VIP(Virtual IP)為19.50.67.173,用戶只需要訪問這個(gè)IP地址即可獲得后端服務(wù)
其中,負(fù)載均衡主機(jī)為19.50.67.165(LVS1),備機(jī)為 19.50.67.169(LVS2)。Web服務(wù)器A為19.50.67.171(WEB1),Web服務(wù)器B為19.50.67.172(WEB2)。四臺(tái)CentOS的防火墻都需要關(guān)閉。
由于LVS基于4層轉(zhuǎn)發(fā),所以LVS到NGINX的過程中,其實(shí)并沒有什么性能損失,實(shí)現(xiàn)了兩組NGINX同時(shí)在線,提供了更好的性能。
目前此架構(gòu)已經(jīng)在公司商用運(yùn)行,未出現(xiàn)過故障,轉(zhuǎn)發(fā)非常穩(wěn)定。
由于網(wǎng)上此類教程較多,故不進(jìn)行太詳細(xì)描述過程。

二、 WEB服務(wù)器配置
服務(wù)器配置不多做介紹,用APACHE或者NGINX即可;如果用NGINX,后端則還可以做反向代理,提供更好的自定義轉(zhuǎn)發(fā)。
yum install httpd
systemctl start httpd
systemctl enable httpd
然后修改配置文件即可。
2.2 配置realserver腳本
- 進(jìn)入指定文件夾:cd /etc/init.d/
- 編輯腳本文件:vim realserver
#!/bin/bash
SNS_VIP=19.50.67.173 #虛擬IP地址
. /etc/rc.d/init.d/functions #.后邊有空格,或者source /etc/rc.d/init.d/functions
case "$1" in
start)
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)
ifconfig lo:0 down
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
保存腳本文件后更改該文件權(quán)限:chmod 755 realserver,開啟realserver服務(wù):service realserver start(systemctl start realserver)。
下圖所示表示配置正確

每一臺(tái)WEB服務(wù)器都要配置此腳本文件 #keepalived服務(wù)器不需要配置。
三、keepalived服務(wù)器配置
3.1 master配置
這里只展示了80端口的配置,如果需要其他端口,可以繼續(xù)配置。
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
#notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
19.50.67.173
}
}
virtual_server 19.50.67.173 80 {
delay_loop 5
lb_algo wrr
lb_kind DR
persistence_timeout 30
protocol TCP
real_server 19.50.67.171 80 {
weight 2
TCP_CHECK {
connect_timeout 10
nb_get_retry 3 #新版本已經(jīng)改為retry
delay_before_retry 3
#connect_port 80 加了此項(xiàng)會(huì)報(bào)錯(cuò)
}
# HTTP_GET {
# url {
# path /
# status_code 200
# }
# connect_timeout 3
# nb_get_retry 3
# delay_before_retry 3
# }
}
real_server 19.50.67.172 80 {
weight 2
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
#connect_port 80 加了此項(xiàng)會(huì)報(bào)錯(cuò)
}
# HTTP_GET {
# url {
# path /
# status_code 200
# }
# connect_timeout 3
# nb_get_retry 3
# delay_before_retry 3
# }
}
}
3.2 backup配置
將state由MASTER改為BACKUP將priority由100改為99,其他的保持和master不變。
vrrp_instance VI_1 {
state BACKUP # 這里改為BACKUP
interface eth1
virtual_router_id 51
priority 99 # 這里改為99,master優(yōu)先級是100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.80.200
}
}
三、 驗(yàn)證
因?yàn)閮膳_(tái)真實(shí)服務(wù)器的取值一致,所以會(huì)依次交替將請求轉(zhuǎn)發(fā)給兩臺(tái)服務(wù)器,以此實(shí)現(xiàn)負(fù)載均衡。
Master和backup的priority不一樣,所以同一時(shí)間只會(huì)有一臺(tái)keepalived工作,以此實(shí)現(xiàn)主從熱備。
ipvsadm -ln可以查看keepalived轉(zhuǎn)發(fā)明細(xì)(三個(gè)端口均轉(zhuǎn)發(fā)到了后端NGINX)
ipvsadm -L -n -c查看鏈接狀態(tài)


浙公網(wǎng)安備 33010602011771號(hào)