基于DR(直接路由)模式的负载均衡配置详解
DR(直接路由)是三种负载均衡模式其中之一,也是使用最多的一种模式,关于该模式的介绍,可以参考博文:https://blog.51cto.com/14227204/2436891
环境如下:
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 地址,以便响应群集访问。
[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 内核的重定向参数响应):
[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
配置负载均衡策略:
[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 rr -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 rr -> 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的数据包限制在本地。
[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 响应参数:
[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 并创建测试网页:
[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://blog.51cto.com/14227204/2437018
- Centos 7基于DR(直接路由)模式的负载均衡配置详解
- Lvs之直接路由模式DR配置
- CentOS下LVS DR模式负载均衡配置详解
- LVS DR模式 + keepalived 负载均衡配置详解(基础篇)
- LVS 的DR直接路由实现负载均衡并实现NAS(网络附加储存技术)
- 配置基于DR模式Lvs集群
- Keepalived+LVS-DR模式配置高可用负载均衡集群
- RedHat下直接路由模式的负载均衡
- LVS DR模式负载均衡配置详解(配置篇一) 推荐
- LVS-DR直接路由实现负载均衡示例
- Linux下Keepalived+LVS-DR模式配置高可用负载均衡集群
- 采用Lvs DR(直接路由)模式搭建集群
- LVS模式一:DR(Direct Routing)直接路由模式
- Keepalived+LVS-DR模式配置高可用负载均衡集群
- 四层负载均衡LVS DR模式配置
- Keepalived+LVS-DR模式配置高可用负载均衡集群
- LVS+Keepalived+Nginx+Tomcat高可用负载均衡集群配置(DR模式,一个VIP,多个端口)
- 直接路由模式(LVS-DR)
- LVS模式一:DR(Direct Routing)直接路由模式
- Keepalived+LVS-DR模式配置高可用负载均衡集群