原理

大型网站高并发解决方案(2)LVS-DR_LVS

  1. 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP
  2. 负载均衡器收到报文之后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发给RS
  3. 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/