[root@Web1 web]# ifconfig lo:0 192.168.239.250 broadcast 192.168.239.250 netmask 255.255.255.255 up
[root@Web1 web]# route add -host 192.168.239.250 dev lo:0
# 抑制ARP
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
上面的配置过程中有几个问题要说明:
① 把VIP绑定至RS的lo回环接口上边,并且广播地址为自身和子网掩码为4个255,这样做是为了防止VIP冲突。
② 关于arp_ignore和arp_announce两个内核参数的意义,请参考ARP抑制
然后在两台RS上边部署Nginx的Web环境,分别往首页写入静态内容
This is Web1
This is Web2
然后在浏览器的地址列中输入VIP--192.168.239.250,刷新页面,页面内容能够实现调转说明负载均衡功能实现。
LVS-NAT模型
环境拓扑 主机IP功能
LVS VIP:192.168.0.105 调度器
LVS DIP:192.168.239.130 调度器
Web1 192.168.239.129 RS
Web2 192.168.239.133 RS
前端负载均衡配置:
[root@LVS ~]# ipvsadm -A -t 192.168.0.105:80 -s wrr
[root@LVS ~]# ipvsadm -a -t 192.168.0.105:80 -r 192.168.239.129:80 -m -w 1
[root@LVS ~]# ipvsadm -a -t 192.168.0.105:80 -r 192.168.239.133:80 -m -w 2
# 这样ipvs的规则已经定义完成
# 因为NAT工作模式涉及到地址转换,因此需要修改内核的ip_forward参数
[root@LVS ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
# 修改完成之后使其生效
[root@LVS ~]# sysctl -p
后端RS的配置:
# 因为NAT的工作模式中,请求数据和回应数据都需要经过调度器,因此需要将后端服务器的默认网关指向调度器的DIP
[root@Web1 ~]# route add default -gw 192.168.239.130
[root@Web2 ~]# route add default -gw 192.168.239.130
测试:
分别配置RS的web服务器,我这里将html文本内容作为后端RS的web内容,
[root@Web1 ~]# curl localhost
This is web1
[root@Web2 ~]# curl localhost
This is web2
然后访问调度的VIP,查看返回的web内容,出现如下图的效果说明负载均衡已经实现。
HTTP协议是一种无状态的协议,即每次发送请求之后就会马上断开连接。假如这种无状态的协议运用在LVS负载均衡中,就会出现这样的情况,以购物网站为例子,用户浏览一商品并加入购物车,这时候请求被送往RS1,然后就断开连接,之后用户又浏览一商品并加入购物车,这时候请求又被送往RS2,这样用户再次访问购物车的时候,反馈给用户的信息是购物车里只有一件商品(假如请求被调度到RS1或RS2的其中一台),这样肯定是不行的。
解决这种问题的办法是可以利用源地址hash调度算法,当然还可以利用LVS的持久连接。
# 基于上面例子中的NAT模型试验,为其增加持久连接
[root@LVS ~]# ipvsadm -E -t 192.168.0.105:80 -s wrr -p
现在规划这样一个场景,客户通过访问VIP发来http请求,需要将80端口的请求和8080端口的请求在一定时间范围内调度到后端同一台服务器上,就是端口联姻。完成这样的需求需要借助防火墙的标记和持久连接。为了看到测试的效果,规划这样的环境拓扑: 主机IP备注(或html页面内容)
LVS VIP:192.168.0.105 调度器(NAT)
LVS DIP:192.168.239.130 调度器(NAT)
Web1 192.168.239.129:80 This is web1 with 80
Web1 192.168.239.129:8080 This is web1 with 8080
Web2 192.168.239.133:80 This is web2 with 80
Web2 192.168.239.133:8080 This is web2 with 8080
前端调度器的配置: