原理
- 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP
- 负载均衡器收到报文之后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发给RS
- RS发现请求报文中的目的MAC是自己,就会将此次报文接受下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。
实验环境
四台CentOS7:
192.168.130.137 LVS服务器
192.168.130.138 web1
192.168.130.139 web2
192.168.130.140 客户端
一个虚拟IP(VIP):192.168.130.150
配置
LVS服务器,准备VIP和路由
[root@localhost ~]# ifconfig ens32:0 192.168.130.150 broadcast 192.168.130.255 netmask 255.255.255.0 up
[root@localhost ~]# route add -host 192.168.130.150 dev ens32:0
LVS服务器,设置路由转发
[root@localhost ~]# vim /etc/sysctl.conf
插入以下内容,不需要中文注释
net.ipv4.ip_forward = 1 # 开启路由转发功能
net.ipv4.conf.all.send_redirects = 0 # 禁止转发重定向报文
net.ipv4.conf.ens32.send_redirects = 0 # 禁止ens32转发重定向报文
net.ipv4.conf.default.send_redirects = 0 # 禁止转发默认重定向报文
LVS设置负载均衡规则
[root@localhost ~]# yum install -y ipvsadm
[root@localhost ~]# systemctl start ipvsadm
[root@localhost ~]# ipvsadm -C # 清除之前所有IP规则
[root@localhost ~]# ipvsadm -A -t 192.168.130.150:80 -s rr
[root@localhost ~]# ipvsadm -a -t 192.168.130.150:80 -r 192.168.130.138:80 -g
[root@localhost ~]# ipvsadm -a -t 192.168.130.150:80 -r 192.168.130.139:80 -g
[root@localhost ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@localhost ~]# systemctl restart ipvsadm
在两个web服务器上部署web服务
[root@localhost ~]# yum install -y httpd
[root@localhost ~]# echo web > /var/www/html/index.html
[root@localhost ~]# systemctl start httpd
[root@localhost ~]# ifconfig lo:0 192.168.130.150:32
给两个web服务器设置内核参数
[root@localhost ~]# echo 1 > proc/sys/net/ipv4/conf/all/arp_ignore
[root@localhost ~]# echo 2 > proc/sys/net/ipv4/conf/all/arp_announce
在客户端访问
http://192.168.130.150:80/