前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于DR(直接路由)模式的负载均衡配置详解

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

原创
作者头像
小手冰凉
修改2019-09-16 10:41:35
5310
修改2019-09-16 10:41:35
举报
文章被收录于专栏:小手冰凉小手冰凉

DR(直接路由)是三种负载均衡模式其中之一,也是使用最多的一种模式,关于该模式的介绍,可以参考博文:https://cloud.tencent.com/developer/article/1501177

**环境如下:**

**1、所有web节点和调度器都配置上VIP:**客户端访问VIP(群集的虚拟IP地址)时,若是

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

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

的数据包,为了解决这一问题,所以需要在所有web节点和调度器的虚接口上配置上200.0.0.254

这个地址,并且通过添加一条路由,将访问VIP的数据限制在本地,以避免通信紊乱。

.

**2、解决关于web节点ARP响应的问题:**在所有web节点和调度器上配置上200.0.0.254

这个地址后,当client访问200.0.0.254这个地址时,所有的web节点都有这个地址,所以

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

了,这样一来,调度器就没有存在的意义了,自然也就达不到负载均衡的效果了,所以需要

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

节点不响应该广播。

.

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

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

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

包,告诉client,之后所有访问200.0.0.254的数据包,直接发给那个web节点即可,这样之

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

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

**准备工作:**

1、自行配置除 VIP 以外的地址

2、准备相关软件包

**配置如下:**

**一、配置负载调度器:**

采用虚接口的方式为网卡 ens33 绑定 VIP 地址,以便响应群集访问。

代码语言:txt
复制
[root@localhost /]# cd /etc/sysconfig/network-scripts/

[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens33:0          

[root@localhost network-scripts]# vim ifcfg-ens33:0              # 修改ens33:0,配置VIP

....................

IPADDR=200.0.0.254                                # 修改如下四条,注意网卡名称一致

NETMASK=255.255.255.0

NAME=ens33:0

DEVICE=ens33:0

....................

[root@localhost network-scripts]# ifup ens33:0                 # 启动虚接口

[root@localhost network-scripts]# ifconfig ens33:0                 # 查看相关配置是否成功

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:f1:61:28  txqueuelen 1000  (Ethernet)

root@localhost network-scripts]# ifconfig 

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::595f:84d:a379:7b6e  prefixlen 64  scopeid 0x20<link>

**调整/proc响应参数(关闭 Linux 内核的重定向参数响应):**

代码语言:txt
复制
[root@localhost /]# 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@localhost /]# sysctl -p                      # 刷新配置使之生效

net.ipv4.conf.all.send\_redirects = 0

net.ipv4.conf.default.send\_redirects = 0

net.ipv4.conf.ens33.send\_redirects = 0

**配置负载均衡策略:**

代码语言:txt
复制
[root@localhost /]# modprobe ip\_vs                         # 加载 ip\_vs 模块

[root@localhost /]# yum -y install ipvsadm                # 安装 ipvsadm 工具

[root@localhost /]# ipvsadm -C                                  # 清除原有策略

[root@localhost /]# ipvsadm -A -t 200.0.0.254:80 -s rr           # 配置群集VIP及添加相关节点

[root@localhost /]# ipvsadm -a -t 200.0.0.254:80 -r 200.0.0.2:80 -g -w 1

[root@localhost /]# ipvsadm -a -t 200.0.0.254:80 -r 200.0.0.3:80 -g -w 1

[root@localhost /]# ipvsadm-save                             # 保存策略

-A -t localhost.localdomain:http -s r

-a -t localhost.localdomain:http -r 200.0.0.2:http -g -w 1

-a -t localhost.localdomain:http -r 200.0.0.3:http -g -w 1

[root@localhost /]# ipvsadm-save > /etc/sysconfig/ipvsadm             # 导出以备份

[root@localhost /]# 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 r

  -> 200.0.0.2:80                 Route   1      0          0         

  -> 200.0.0.3:80                 Route   1      0          0         

**二、配置web节点服务器:**

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

代码语言:txt
复制
[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              # 编辑此文件

.................

DEVICE=lo:0                             # 切记修改网卡名称

IPADDR=200.0.0.254               # 配置 VIP 

NETMASK=255.255.255.255                  # 子网掩码需全为1

ONBOOT=yes

[root@web1 network-scripts]# ifup lo:0                # 启动虚接口

[root@web1 network-scripts]# ifconfig lo:0           # 确认以生效

lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

        inet 200.0.0.254  netmask 255.255.255.255

        loop  txqueuelen 1  (Local Loopback)

[root@web1 /]# route add -host 200.0.0.254 dev lo:0               # 添加 VIP 本地访问路由

[root@web1 /]# route -n

200.0.0.254     0.0.0.0         255.255.255.255 UH    0      0        0 lo

[root@web1 /]# vim /etc/rc.local                         #设置为开机自动添加此条路由

/sbin/route add -host 200.0.0.254 dev lo:0

**调整 /proc 响应参数:**

代码语言:txt
复制
[root@web1 /]# vim /etc/sysctl.conf 

................

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 并创建测试网页:**

代码语言:txt
复制
[root@web1 /]# yum -y install httpd              # 安装httpd

[root@web1 /]# echo test1.com > /var/www/html/index.html         # 创建测试文件

[root@web1 /]# systemctl start httpd

[root@web1 /]# systemctl enable httpd

**重复以上步骤,配置其他节点服务器,一样的虚接口,一样的/proc,一样的httpd(为了方便验证是否成功,这里我将另一个首页文件改为了test2.com)**

若访问到的是同一页面,在排除配置上错误的情况下,可以打开多个网页,或者稍等一会再刷新,因为它可能有一个保持连接的时间,所以会存在延迟

**四、配置NFS共享存储:**

测试出群集效果后,就需要部署共享存储,以便所有的web节点可以向客户机提供同样的网页文件,具体配置过程已经写在了这篇博文的末:https://cloud.tencent.com/developer/article/1505405

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档