理想效果:
LVS+Keepalived +Nginx 实现高可用;
部署情况:
Keepalived实现IP漂移无异常;LVS部署之后负载均衡出现问题,往从节点分发时候响应失败。
机器:
CentOS7 2台
192.168.0.111(主) Nginx页面:This IS TEST 01!
192.168.0.112(备) Nginx页面:This IS TEST 02!
VIP:192.168.0.120
部署步骤
主从电脑执行以下通用命令
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
>>>开启端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
sudo yum install ipvsadm # 安装ipvs
ipvsadm -L --timeout #查看超时时间
ipvsadm --set 1 2 1 #修改超时时间
sudo ipvsadm #启动ipvs
怀疑问题是出在了脚本上,keepalived启动前执行了个脚本,如下:
#!/bin/bash
# description: Config realserver
VIP=192.168.0.120
case "$1" in
start)
ip addr add $VIP/32 dev lo:0
ip route add $VIP/32 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)
ip addr del $VIP/32 dev lo:0
ip route del $VIP/32 dev lo:0
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 Stopped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
启动脚本
sudu ./rs.sh start
启动keepalived和ipvsadm如下:
主机的Keepalived和LVS
从机的Keepalived和LVS
ip 情况
主机上ip a
从机上ip a
测试情况!
第一次访问直接卡住
第二次访问转发到了主机上也就是192.168.0.110上
不清楚是问题出在了哪里。之前只测试lvs+nginx时候是可以自动分发负载的,加了keepalived之后不是很理解问题出在了哪里,有明白的请指教
主节点Keepalived配置如下
! Configuration File for keepalived
global_defs {
router_id v1
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 88
mcast_src_ip 192.168.0.111
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
unicast_src_ip 192.168.0.111
unicast_peer {
192.168.0.112
}
track_script {
chk_nginx
}
virtual_ipaddress {
192.168.0.120
}
}
virtual_server 192.168.0.120 80 { #设置虚拟服务器,需要指定虚拟IP地址和服务端口,IP与端口之间用空格隔开
delay_loop 6 #设置运行情况检查时间,单位是秒
lb_algo rr #设置负载调度算法,这里设置为rr,即轮询算法
lb_kind DR #设置LVS实现负载均衡的机制,有NAT、TUN、DR三个模式可选
nat_mask 255.255.255.0
persistence_timeout 0 #会话保持时间,单位是秒。这个选项对动态网页是非常有用的,为集群系统中的session共享提供了一个很好的解决方案。
#有了这个会话保持功能,用户的请求会被一直分发到某个服务节点,直到超过这个会话的保持时间。
#需要注意的是,这个会话保持时间是最大无响应超时时间,也就是说,用户在操作动态页面时,如果50秒内没有执行任何操作
#那么接下来的操作会被分发到另外的节点,但是如果用户一直在操作动态页面,则不受50秒的时间限制
protocol TCP #指定转发协议类型,有TCP和UDP两种
real_server 192.168.0.111 80 { #配置服务节点1,需要指定real server的真实IP地址和端口,IP与端口之间用空格隔开
weight 1 #配置服务节点的权值,权值大小用数字表示,数字越大,权值越高,设置权值大小可以为不同性能的服务器
#分配不同的负载,可以为性能高的服务器设置较高的权值,而为性能较低的服务器设置相对较低的权值,这样才能合理地利用和分配系统资源
TCP_CHECK { #realserver的状态检测设置部分,单位是秒
connect_timeout 3 #表示3秒无响应超时
nb_get_retry 3 #表示重试次数
delay_before_retry 3 #表示重试间隔
connect_port 80
}
}
real_server 192.168.0.112 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
补充:lvs+nginx 步骤如下,其实就几个命令后进行的测试,当时未使用VIP,所以该过程测试无异常
ipvsadm -A -t 192.168.0.111:80 -s rr
ipvsadm -a -t 192.168.0.111:80 -r 192.168.0.111 -m
ipvsadm -a -t 192.168.0.111:80 -r 192.168.0.112 -m
curl 192.168.0.120