序言

DR模式是lvs集群中三种负载均衡模式的其中一种,那么上一篇中我写啦关于NAT模式的搭建与原理,为什么还要有DR模式与IP隧道模式呢?

首先我们来看3张图。LVS/NAT模式如下图:

LVS/IP隧道模式,如下图:

LVS/DR模式,如下图。

上面三张图来自:http://www.linuxvirtualserver.org/zh/lvs3.html ,此文也正式是官方详细描述LVS集群中实现的三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)的工作原理,以及它们的优缺点的文章,推荐大家要详细看看。

这里我简述总结下他们的路由方式以及做一个区别:

VS/NAT模式:客户机-->请求分发服务器-->Real Server-->请求分发服务器--->客户机。

VS/DR模式:客户机-->请求分发服务器-->Real Server-->客户机。

VS/TUN模式:客户机-->请求分发服务器-->Real Server-->客户机。

由此可以看出,NAT模式的请求分发服务器会成为这个模式的瓶颈所在,因为所有请求与响应走要经过他转发。那么IP隧道模式与DR模式的区别在于,DR模式与IP隧道模式相比,DR模式没有IP封装的开销,但由于采用物理层(修改MAC地址)技术,所有服务器都必须在同一个物力网段中。

LVS/DR模式搭建详细演练

首先我先上我的整体搭建机器的架构图上来,以便更直观的搭建与理解。

首先配置分发器这台机器,操作很简单,跟着做就可以啦。

  • 添加eth0:1网络接口
[root@localhost network-scripts]# ifconfig eth0:1 172.18.8.6 netmask 255.255.255.255   --此接口只是临时生效,下面需要配置的是永久生效
[root@localhost network-scripts]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-eth0 ifcfg-eth0:1
  • 编辑由拷贝而来的ifcfg-eth0:1,需要注意的是必须把mac地址与eth0的保持一致。
[root@localhost network-scripts]# cat ifcfg-eth0:1
TYPE="Ethernet"
BOOTPROTO="static"
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
NAME="eth0:1"
DEVICE="eth0:1"
ONBOOT="yes"
IPADDR="172.18.8.6"
NETMASK="225.225.225.0"
HWADDR="00:0c:29:af:ff:3a"
[root@localhost network-scripts]# ipvsadm -A -t 172.18.8.6:80 -s rr
[root@localhost network-scripts]# ipvsadm -a -t 172.18.8.6:80 -r 172.18.8.5 -g
[root@localhost network-scripts]# ipvsadm -a -t 172.18.8.6:80 -r 172.18.8.4 -g

到此,分发器这台机器就配置完成啦。

然后配置Real Server

  • 配置临时生效的回环接口
[root@localhost ~]# ifconfig lo:1 172.18.8.6 netmask 255.255.255.255
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp ifcfg-lo ifcfg-lo:1
  • 配置复制而来的回环接口配置文件ifcfg-lo:1,然后关机重启使其永久生效。
[root@localhost network-scripts]# cat ifcfg-lo:1
CE=lo:1
IPADDR=272.18.8.6
NETMASK=255.255.255.255
# If you're having problems with gated making 127.0.0.0/8 a martian,
# # you can change this to something else (255.255.255.255, for example)
ONBOOT=yes
NAME=loopback
  • 这样一来,我们从图中可以看到有3个ip地址都为172.18.8.6,那么你在客户端输入172.18.8.6:80来访问web服务器的时候,那台机器响应呢?这里就需要以下2个配置,使访问172.18.8.6这个ip的请求只在分发器这台机器上处理。这两个配置在稍后会做讲解。
[root@localhost network-scripts]# echo "1">"/proc/sys/net/ipv4/conf/eno16777736/arp_ignore"
[root@localhost network-scripts]# echo "2">"/proc/sys/net/ipv4/conf/eno16777736/arp_announce"
[root@localhost network-scripts]# cat /etc/sysctl.conf
# System default settings live in /usr/lib/sysctl.d/00-system.conf.
# To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.conf.eno16777736.arp_ignore=1
net.ipv4.conf.eno16777736.arp_announce=2
  • 开启web服务器,我这里用的是nginx作为web服务器使用演练。
[root@localhost network-scripts]# /usr/sbin/nginx
  • 另外一台Real Server如上操作一遍,即可。
  • 测试,切记测试万万不要在分发起上请求172.18.8.6,这里是行不通的,你要去其他机器上测,我在如图的150机器上测试效果如下。

直接联通realserver,没问题,如下。

访问分发器ip,做到啦轮询效果,如下。

理解arp_ignore与arp_announce参数详细

arp响应限制arp_ignore:

  • 0 - (默认值): 回应任何网络接口上对任何本地IP地址的arp查询请求
  • 1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求
  • 2 -只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内
  • 3 - 不回应该网络界面的arp请求,而只对设置的唯一和连接地址做出回应
  • 4-7 - 保留未使用
  • 8 -不回应所有(本地地址)的arp查询

arp响应限制arp_announce:对网络接口上,本地IP地址的发出的,ARP回应,作出相应级别的限制: 确定不同程度的限制,宣布对来自本地源IP地址发出Arp请求的接口

  • 0 - (默认) 在任意网络接口(eth0,eth1,lo)上的任何本地地址
  • 1 -尽量避免不在该网络接口子网段的本地地址做出arp回应. 当发起ARP请求的源IP地址是被设置应该经由路由达到此网络接口的时候很有用.此时会检查来访IP是否为所有接口上的子网段内ip之一.如果改来访IP不属于各个网络接口上的子网段内,那么将采用级别2的方式来进行处理.
  • 2 - 对查询目标使用最适当的本地地址.在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址.首要是选择所有的网络接口的子网中外出访问子网中包含该目标IP地址的本地地址. 如果没有合适的地址被发现,将选择当前的发送网络接口或其他的有可能接受到该ARP回应的网络接口来进行发送.

在dr模式中我们的realserver配置arp_ignore为1:意思是不是eno16777736所在ip的请求,我不与应答。arp_announce为2:意思是我不对外公布我有出来eno16777736所在ip之外的任何ip,避免主动宣告ip使arp广播包发送过来,做出应答。

总结

接下来是大家最喜欢的总结内容啦,内容有二,如下:

1、希望能关注我其他的文章。

2、博客里面有没有很清楚的说明白,或者你有更好的方式,那么欢迎加入左上方的2个交流群,我们一起学习探讨。

Linux系统(五)负载均衡LVS集群之DR模式的更多相关文章

  1. Linux系统(四)负载均衡LVS集群之NAT模式

    序言 提到LVS,就从章文嵩博士开始吧,反正也不知道如何下笔来写这一篇.章大博士,读博时候创建这个lvs软件项目,但是他提倡开源精神,在用户的建议和反馈中,这个花了他两周时间开发的开源软件不断得到改建 ...

  2. Linux系统(四)LVS集群负载均衡NAT模式

    序言 提到LVS,就从章文嵩博士开始吧,反正也不知道如何下笔来写这一篇.章大博士,读博时候创建这个lvs软件项目,但是他提倡开源精神,在用户的建议和反馈中,这个花了他两周时间开发的开源软件不断得到改建 ...

  3. 负载均衡LVS集群详解

     一.LB--负载均衡 在负载均衡集群中需要一个分发器,我们将其称之为Director,它位于多台服务器的上面的中间层,根据内部锁定义的规则或调度方式从下面的服务器群中选择一个以此来进行响应请求,而其 ...

  4. LVS集群之DR模式

    今天来讲LVS-DR模式集群实现负载均衡的搭建方法 环境 主机名 IP   系统 角色 dir DIP:192.168.199.9 VIP:192.168.199.8 rhel7.4 集群服务器 no ...

  5. LVS集群之DR模式 实现

    ps:做 dr 模式 之前,先把之前做过的操作清空掉 1.ipvsadm -ln 查看规则 2.ipvsadm -C 清空规则 3.ipvsadm -ln 确认 4.iptables -t nat - ...

  6. 浅谈web应用的负载均衡、集群、高可用(HA)解决方案(转)

    1.熟悉几个组件 1.1.apache     —— 它是Apache软件基金会的一个开放源代码的跨平台的网页服务器,属于老牌的web服务器了,支持基于Ip或者域名的虚拟主机,支持代理服务器,支持安 ...

  7. Apache配置反向代理、负载均衡和集群(mod_proxy方式)

    Apache配置负载均衡和集群使用mod_jk的方式比较多,但是mod_jk已经停止更新,并且配置相对复杂.Apache2.2以后,提供了一种原生的方式配置负载均衡和集群,比mod_jk简单很多. 1 ...

  8. Dubbo负载均衡与集群容错机制

    1  Dubbo简介 Dubbo是一款高性能.轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现. 作为一个轻量级RPC框架,D ...

  9. 基于Apache的Tomcat负载均衡和集群(2)

    反向代理负载均衡 (Apache+JK+Tomcat) 使用代理服务器可以将请求转发给内部的Web服务器,让代理服务器将请求均匀地转发给多台内部Web服务器之一上,从而达到负载均衡的目的.这种代理方式 ...

随机推荐

  1. CCF 201612-1 中间数

    试题编号:201612-1 试题名称:中间数 时间限制:1.0s 内存限制:256.0MB 问题描述 在一个整数序列a1, a2, -, an中,如果存在某个数,大于它的整数数量等于小于它的整数数量, ...

  2. UVa 908 - Re-connecting Computer Sites

    题目大意:有n个网站,由m条线路相连,每条线路都有一定的花费,找出连接所有线路的最小花费. 最小生成树问题(Minimal Spanning Tree, MST),使用Kruskal算法解决. #in ...

  3. javascript--hasOwnProperty()+isPrototypeof()+in方法

    1.hasOwnProperty():用来检测对象中是否包含给出的函数属性或者对象,但是无法检测出对象的原型链中是否包含给出的属性或对象--该属性或者对象必须在函数内部被声明 2.isPrototyp ...

  4. LINUX 无法登入系统(2017-1-16)

    很好的博文:http://blog.csdn.net/caizi001/article/details/38659189

  5. IOS Cell 重影

    效果:重影 原因: 多次创建控件元素 解决:在initWithStyle中进行初始化元素

  6. 使用YUIDoc生成JS文档

    其实YUIDoc主页已经写的比较清晰了,但有一些概念和细节再点出一些注意的地方. 目前最新的YUIDoc使用nodejs进行开发安装和使用都非常的方便. 我们只需要将我们的代码加上必要的注释,便可以很 ...

  7. Jqgrid学习(转载)

    jqGrid API 全   JQGrid是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信. JQGrid Demo 是一个在线的演示项目.在这里,可以知道jqgrid可以做 ...

  8. 深入理解Java Proxy

    深入理解Java Proxy: http://blog.csdn.net/rokii/article/details/4046098 整理之后的代码: package com.stono.reftes ...

  9. HttpServletRequest和ServletRequest的区别

    servlet理论上可以处理多种形式的请求响应形式,http只是其中之一所以HttpServletRequest HttpServletResponse分别是ServletRequest和Servle ...

  10. springmvc java.lang.NoSuchMethodError: com.fasterxml.jackson.core.JsonFactory.requiresPropertyOrdering()Z

    在hibernate spring springMVC整合的时候出现下面的情况: WARNING: Exception encountered during context initializatio ...