LVS+keepalived+nginx+tomcat 主从热备 负载均衡
一、 环境准备
本次配置基于DR负载均衡模式,设置一个VIP(Virtual IP)为19.50.67.173,用户只需要访问这个IP地址即可获得后端服务
其中,负载均衡主机为19.50.67.165(LVS1),备机为 19.50.67.169(LVS2)。Web服务器A为19.50.67.171(WEB1),Web服务器B为19.50.67.172(WEB2)。四台CentOS的防火墙都需要关闭。
由于LVS基于4层转发,所以LVS到NGINX的过程中,其实并没有什么性能损失,实现了两组NGINX同时在线,提供了更好的性能。
目前此架构已经在公司商用运行,未出现过故障,转发非常稳定。
由于网上此类教程较多,故不进行太详细描述过程。
二、 WEB服务器配置
服务器配置不多做介绍,用APACHE或者NGINX即可;如果用NGINX,后端则还可以做反向代理,提供更好的自定义转发。
yum install httpd
systemctl start httpd
systemctl enable httpd
然后修改配置文件即可。
2.2 配置realserver脚本
- 进入指定文件夹: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
保存脚本文件后更改该文件权限:chmod 755 realserver,开启realserver服务:service realserver start(systemctl start realserver)。
下图所示表示配置正确
每一台WEB服务器都要配置此脚本文件 #keepalived服务器不需要配置。
三、keepalived服务器配置
3.1 master配置
这里只展示了80端口的配置,如果需要其他端口,可以继续配置。
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 #新版本已经改为retry
delay_before_retry 3
#connect_port 80 加了此项会报错
}
# 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 加了此项会报错
}
# 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优先级是100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.80.200
}
}
三、 验证
因为两台真实服务器的取值一致,所以会依次交替将请求转发给两台服务器,以此实现负载均衡。
Master和backup的priority不一样,所以同一时间只会有一台keepalived工作,以此实现主从热备。
ipvsadm -ln可以查看keepalived转发明细(三个端口均转发到了后端NGINX)
ipvsadm -L -n -c查看链接状态