LVS介绍
常用的软负载均衡由如下几种
- nginx+keeplived
- LVS+keeplived
- Haproxy+keeplive
- DNS负载均衡
LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。
LVS的转发主要通过修改IP地址(NAT模式,分为源地址修改SNAT和目标地址修改DNAT)、修改目标MAC(DR模式)来实现。
主要有NAT模式和DR模式。
- NAT模式下负载均衡服务器通过修改目的IP来使请求转发到下游的web服务器。响应从web服务器到负载均衡服务器然后再按原路返回。
- DR模式下负载均衡服务器与下游WEB服务器共用一个虚拟IP,负载均衡服务器将请求中的mac地址修改为下游的web服务器所在的mac地址,而不修改目标IP地址。响应从web服务器直接返回给请求客户端,不经过负载均衡服务器。
下面两个如表明了请求和响应的路径。
手动实现LVS负载均衡
- 负载均衡服务器配置
添加虚拟服务指定对外IP(VIP)添加虚拟服务指定对外IP(VIP)
ipvsadm -A -t 192.168.40.17:80 -s rr针对LVS服务器注册真实WEB服务器IP
ipvsadm -a -t 192.168.40.17:80 -r 192.168.41.31:80ipvsadm -a -t 192.168.40.17:80 -r 192.168.41.33:80
查看VIP和RS是否已经配置成功。
ipvsadm -L -n
- web服务器配置
1)添加环路端口lo的对外IP&路由
ifconfig lo 192.168.40.17 netmask 255.255.255.255
route add -host 192.168.40.17 dev lo
2)需要ARP抑制
echo “1”>***/lo/arp_ignore
echo “2”>***/lo/arp_announce
echo “1”>***/all/arp_announce
echo “2”>***/all/arp_announce
如果不进行ARP抑制,客户端请求不知道去负载均衡服务器还是web服务器。ARP抑制后web服务器只能接受从负载均衡服务器中转发的请求。
Keeplived介绍
keepalived:集群管理中保证集群高可用的一个服务软件,用来防止单点故障。keepalived主要是上线了VRRP协议。
VRRP(Virtual Router Redundancy Protocol 虚拟路由冗余协议):实现路由器高可用协议,解决路由器单点问题。将N台提供相同功能的路由器组成一个路由器组,这个组里面通过竞选产生一个master和多个backup,master上面有一个对外提供服务的vip(该路由器所在局域网内其他机器的默认路由为该vip)。master会发组播给backup,当backup收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。
Keepalived高可用集群之间是通过 VRRP进行通信的, VRRP是通过过竞选机制来确定主备的,主的优先级高于备,因此,工作时主会优先获得所有的资源,备节点处于等待状态,当主挂了的时候,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。
配置KVS+Keeplived
- 负载均衡服务器配置
- 安装keeplived和LVS管理软件ipvsadm
yum -y install keepalived ipvsadm
- 配置主备keepalived.conf
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.112.180 } } virtual_server 192.168.112.180 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 50 protocol TCP real_server 192.168.112.135 80 { weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.112.136 80 { weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
- 关闭主备防火墙
service firewalld stop
查看防火墙状态
service firewalld status
- 启动主备keepalived
systemctl start keepalived
关闭命令:
systemctl stop keepalived
- 查看主备VIP绑定情况
ip a l ens33
其中被负载均衡服务器只需要修改
state MASTER --> state backup
priority 100 --> priority 50
- WEB服务器配置
- 安装httpd
yum -y install httpd
编写静态页面:
web服务器1配置
echo WebServer1 > /var/www/html/index.html
web服务器2配置
echo WebServer2 > /var/www/html/index.html
- 编写加入LVS集群脚本
vim lvs.sh
#!/bin/bash vip=192.168.112.180 mask=255.255.255.255 dev=ens33:1 case $1 in start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig $dev $vip netmask $mask broadcast $vip up
route add -host $vip dev $dev ;; stop)
ifconfig $dev down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce ;;
*)
echo “Usage: $(basename $0) start|stop”
exit 1 ;; esac
- 启动脚本,加入LVS集群
sh lvs.sh start
- ipvsadm查看LVS配置信息
ipvsadm -Ln
- 开启服务
service httpd start
service httpd stop
LVS+Keeplived测试
1.网址测试+curl测试,浏览器上不断刷新请求地址。
结果1:由于浏览器中设置HTTP中keeplive属性,可以通过wireshark分析tcpdump抓的包看到。需要每隔6秒钟左右刷新可以看到请求被分配到两台web服务器上。
2.abs压力测试,看连接数
ab -n 100000 -c 200 http://192.168.112.180/index.html
ipvsadm -L -n --rate
结果2:请求连接平均分配在两台web服务器上。
3.主备测试:将主调度器停止,看VIP是否切换,备调度器是否能正常工作。
结果3:VIP被切换到了被服务器上。
4.负载测试,停止一台服务器,另一台是否能正常工作
结果4:另一台服务器也可以正常工作。