内容简介:DR(直接路由)是三种负载均衡模式其中之一,也是使用最多的一种模式,关于该模式的介绍,可以参考博文:LVS负载均衡群集详解。DR的工作模式示意图如下:
DR(直接路由)是三种负载均衡模式其中之一,也是使用最多的一种模式,关于该模式的介绍,可以参考博文:LVS负载均衡群集详解。
DR的工作模式示意图如下:
该模式的原理已经在上面链接的博文中写了下来。现在直接搭建一个基于DR模式的负载均衡群集。
环境如下:
在上面这个环境中,需要解决的问题有下面几点:
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重定向参数响应。
配置过程如下:
一、配置负载调度器(自行配置环境中除VIP以外的IP地址):
1、配置虚拟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)
2、调整/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
3、配置负载分配策略:
[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
二、配置web节点服务器:
web节点服务器的VIP地址仅用来发送web响应数据包的源地址,并不需要监听客户机的访问请求(由调度器监听并分发)。因此使用虚接口lo:0来承载VIP地址,并添加一条路由记录,将访问VIP的数据包限制在本地。
1、配置虚拟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
2、调整/proc响应参数:
[root@web1 ~]# #调整/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
3、安装并启动httpd服务(可根据需求选择搭建Nginx还是apache):
[root@web1 ~]# yum -y install httpd #安装http服务 [root@web1 ~]# echo 1111111111111 > /var/www/html/index.html #准备测试网页,等看到负载均衡的效果后,再挂载共享存储设备。
重复以上三个步骤,配置其他web节点服务器(我这里将另一个web节点的首页文件改为了:2222222222222222)。
三、client访问VIP,以便测试LVS群集:
若访问到的是同一页面,在排除配置上错误的情况下,可以打开多个网页,或者稍等一会再刷新,因为它可能有一个保持连接的时间,所以会存在延迟。
四、配置NFS共享存储:
测试出群集效果后,就需要部署共享存储,以便所有的web节点可以向客户机提供同样的网页文件,具体配置过程已经写在了这篇博文的末尾: Centos 7基于NAT(地址转换)模式的负载均衡配置详解 。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 浅析负载均衡与应用路由
- 弄懂服务路由与负载均衡,微服务搞起
- Akka入门系列(六):akka cluster中的路由和负载均衡
- vue路由篇(动态路由、路由嵌套)
- 小程序封装路由文件和路由方法,5种路由方法全解析
- 3分钟了解负载均衡,分清二层负载均衡和三层负载均衡
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Python Web开发:测试驱动方法
Harry J.W. Percival / 安道 / 人民邮电出版社 / 2015-10 / 99
本书从最基础的知识开始,讲解Web开发的整个流程,展示如何使用Python做测试驱动开发。本书由三个部分组成。第一部分介绍了测试驱动开发和Django的基础知识。第二部分讨论了Web开发要素,探讨了Web开发过程中不可避免的问题,及如何通过测试解决这些问题。第三部分探讨了一些高级话题,如模拟技术、集成第三方插件、Ajax、测试固件、持续集成等。本书适合Web开发人员阅读。一起来看看 《Python Web开发:测试驱动方法》 这本书的介绍吧!