Centos 7基于DR(直接路由)模式的负载均衡配置详解

DR(直接路由)是三种负载均衡模式其中之一,也是使用最多的一种模式,关于该模式的介绍,能够参考博文:LVS负载均衡群集详解html

DR的工做模式示意图以下:web

Centos 7基于DR(直接路由)模式的负载均衡配置详解

该模式的原理已经在上面连接的博文中写了下来。如今直接搭建一个基于DR模式的负载均衡群集。apache

环境以下:vim

Centos 7基于DR(直接路由)模式的负载均衡配置详解

在上面这个环境中,须要解决的问题有下面几点:服务器

一、全部web节点和调度器都配置上VIP:客户端访问VIP(群集的虚拟IP地址)时,如果负载均衡

调度器将请求转发给web节点,而后由web节点直接去响应客户端,那么客户端在收到ide

数据包后,发现收到的数据包源地址不是200.0.0.254,那么就会直接丢弃web服务器返回工具

的数据包,为了解决这一问题,因此须要在全部web节点和调度器的虚接口上配置上200.0.0.254oop

这个地址,而且经过添加一条路由,将访问VIP的数据限制在本地,以免通讯紊乱。测试

二、解决关于web节点ARP响应的问题:在全部web节点和调度器上配置上200.0.0.254

这个地址后,当client访问200.0.0.254这个地址时,全部的web节点都有这个地址,因此

都会去进行ARP响应,那么这样一来,可能就形成了client略过调度器直接去访问web节点

了,这样一来,调度器就没有存在的意义了,天然也就达不到负载均衡的效果了,因此须要

关闭web节点的部分ARP应答,在广播200.0.0.254这个地址时,只让调度器去响应,web

节点不响应该广播。

三、解决调度器内核自带的ICMP的重定向优化问题:Linux内核有一个ICMP优化功能,

就是在client第一次访问调度器时,调度器会将请求转发给某一个web节点,在这时,Linux

自带的ICMP优化功能会发现,客户端能够直接和web节点通讯,而后就会发送一个数据

包,告诉client,以后全部访问200.0.0.254的数据包,直接发给那个web节点便可,这样之

后全部的访问请求都将直接发送给某一个web节点,而再也不通过调度器,这样确定也是不可

以的,没法达到负载均衡的效果了。因此须要关闭Linux内核的ICMP重定向参数响应。

配置过程以下:

1、配置负载调度器(自行配置环境中除VIP之外的IP地址):

一、配置虚拟IP地址(VIP)

[root@LVS network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0               #在虚接口配置VIP
[root@LVS network-scripts]# vim ifcfg-ens33:0           #改动如下配置项
           .............
IPADDR=200.0.0.254
NETMASK=255.255.255.0           #必须写子网掩码信息
NAME=ens33:0              #注意改网卡名称
DEVICE=ens33:0
ONBOOT=yes
[root@LVS network-scripts]# systemctl restart network            #重启网卡使更改生效
[root@LVS network-scripts]# ifconfig        #查询相关IP是否配置正确
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 200.0.0.1  netmask 255.255.255.0  broadcast 200.0.0.255
        inet6 fe80::2e1e:d068:9c41:c688  prefixlen 64  scopeid 0x20<link>
                           ...........................

ens33:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 200.0.0.254  netmask 255.255.255.0  broadcast 200.0.0.255
        ether 00:0c:29:77:2c:03  txqueuelen 1000  (Ethernet)

二、调整/proc相应参数:

[root@LVS ~]# vim /etc/sysctl.conf             #写入下面三行
                 ................
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
[root@LVS ~]# sysctl -p              #刷新一下配置
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

三、配置负载分配策略:

[root@LVS ~]# modprobe ip_vs         #加载ip_vs模块
[root@LVS ~]# yum -y install ipvsadm           #安装ipvsadm工具
[root@LVS ~]# ipvsadm -C              #清除原有策略
[root@LVS ~]# ipvsadm -A -t 200.0.0.254:80 -s rr        #配置群集VIP及添加相关节点
[root@LVS ~]# ipvsadm -a -t 200.0.0.254:80 -r 200.0.0.2:80 -g -w 1
[root@LVS ~]# ipvsadm -a -t 200.0.0.254:80 -r 200.0.0.3:80 -g -w 1
[root@LVS ~]# ipvsadm-save                        #保存策略
[root@LVS ~]# ipvsadm-save > /etc/sysconfig/ipvsadm           #导出策略备份
[root@LVS ~]# ipvsadm -ln             #确认群集当前策略
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.0.0.254:80 rr
  -> 200.0.0.2:80                 Route   1      0          0         
  -> 200.0.0.3:80                 Route   1      0          0

2、配置web节点服务器:

web节点服务器的VIP地址仅用来发送web响应数据包的源地址,并不须要监听客户机的访问请求(由调度器监听并分发)。所以使用虚接口lo:0来承载VIP地址,并添加一条路由记录,将访问VIP的数据包限制在本地。

一、配置虚拟IP地址(VIP):

[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@web1 network-scripts]# vim ifcfg-lo:0      #编辑该文件,只保留如下四行,并配置VIP
DEVICE=lo:0
IPADDR=200.0.0.254
NETMASK=255.255.255.255               #注意:子网掩码必须是全为1。也就是4个255。
ONBOOT=yes
[root@LVS network-scripts]# systemctl restart network            #重启网卡使更改生效
[root@LVS network-scripts]# ifconfig        #查询VIP是否配置正确 
                ............................
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 200.0.0.254  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)
[root@web1 ~]# route add -host 200.0.0.254 dev lo:0              #添加VIP本地访问路由记录
[root@web1 ~]# vim /etc/rc.local               #设置开机自动添加这条路由记录              
                ................................
/sbin/route add -host 200.0.0.254 dev lo:0

二、调整/proc响应参数:

[root@web1 ~]# vim /etc/sysctl.conf                  #调整/proc响应参数,写入下面六行
                    ...................
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
[root@web1 ~]# sysctl -p                #刷新一下
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2

三、安装并启动httpd服务(可根据需求选择搭建Nginx仍是apache):

[root@web1 ~]# yum -y install httpd             #安装http服务
[root@web1 ~]# echo 1111111111111 > /var/www/html/index.html          
#准备测试网页,等看到负载均衡的效果后,再挂载共享存储设备。
[root@web1 ~]# systemctl start httpd               #启动http服务
[root@web1 ~]# systemctl enable httpd           #设置为开机自启动

重复以上三个步骤,配置其余web节点服务器(我这里将另外一个web节点的首页文件改成了:2222222222222222)。

3、client访问VIP,以便测试LVS群集:

Centos 7基于DR(直接路由)模式的负载均衡配置详解

Centos 7基于DR(直接路由)模式的负载均衡配置详解

若访问到的是同一页面,在排除配置上错误的状况下,能够打开多个网页,或者稍等一会再刷新,由于它可能有一个保持链接的时间,因此会存在延迟。

4、配置NFS共享存储:

测试出群集效果后,就须要部署共享存储,以便全部的web节点能够向客户机提供一样的网页文件,具体配置过程已经写在了这篇博文的末尾:Centos 7基于NAT(地址转换)模式的负载均衡配置详解

相关文章
相关标签/搜索