关于LVS的ARP问题

在如上图的VS/DR或VS/TUN应用的一种模型中(所有机器都在同一个物理网络),所有机器(包括Director和RealServer)都使用了一个额外的IP地址,即VIP。当一个客户端向VIP发出一个连接请求时,此请求必须要连接至Director的VIP,而不能是RealServer的。因为,LVS的主要目标就是要Director负责调度这些连接请求至RealServer的。

因此,在Client发出至VIP的连接请求后,只能由Director将其MAC地址响应给客户端(也可能是直接与Director连接的路由设备),而Director则会相应的更新其ipvsadm table以追踪此连接,而后将其转发至后端的RealServer之一。

如果Client在请求建立至VIP的连接时由某RealServer响应了其请求,则Client会在其MAC table中建立起一个VIP至RealServer的对就关系,并以至进行后面的通信。此时,在Client看来只有一个RealServer而无法意识到其它服务器的存在。

为了解决此问题,可以通过在路由器上设置其转发规则来实现。当然,如果没有权限访问路由器并做出相应的设置,则只能通过传统的本地方式来解决此问题了。这些方法包括:

1、禁止RealServer响应对VIP的ARP请求;

2、在RealServer上隐藏VIP,以使得它们无法获知网络上的ARP请求;

3、基于“透明代理(Transparent Proxy)”或者“fwmark (firewall mark)”;

4、禁止ARP请求发往RealServers;

传统认为,解决ARP问题可以基于网络接口,也可以基于主机来实现。Linux采用了基于主机的方式,因为其可以在大多场景中工作良好,但LVS却并不属于这些场景之一,因此,过去实现此功能相当麻烦。现在可以通过设置arp_ignore和arp_announce,这变得相对简单的多了。

Linux 2.2和2.4(2.4.26之前的版本)的内核解决“ARP问题”的方法各不相同,且比较麻烦。幸运的是,2.4.26和2.6的内核中引入了两个新的调整ARP栈的标志(device flags):arp_announce和arp_ignore。基于此,在DR/TUN的环境中,所有IPVS相关的设定均可使用arp_announce=2和arp_ignore=1/2/3来解决“ARP问题”了。

arp_annouce:Define different restriction levels for announcing the local source IP address from IP packets in ARP requests sent on interface;

0 - (default) Use any local address, configured on any interface.

1 - Try to avoid local addresses that are not in the target‘s subnet for this interface.

2 - Always use the best local address for this target.

arp_ignore: Define different modes for sending replies in response to received ARP requests that resolve local target IP address.

0 - (default): reply for any local target IP address, configured on any interface.

1 - reply only if the target IP address is local address configured on the incoming interface.

2 - reply only if the target IP address is local address configured on the incoming interface and both with the sender‘s IP address are part from same subnet on this interface.

3 - do not reply for local address configured with scope host, only resolutions for golbal and link addresses are replied.

4-7 - reserved

8 - do not reply for all local addresses

在RealServers上,VIP配置在本地回环接口lo上。如果回应给Client的数据包路由到了eth0接口上,则arp通告或请应该通过eth0实现,因此,需要在sysctl.conf文件中定义如下配置:

#vim /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

以上选项需要在启用VIP之前进行,否则,则需要在Drector上清空arp表才能正常使用LVS。

如果有多台Realserver,在某些应用场景中,Director还需要基于“连接追踪”实现将由同一个客户机的请求始终发往其第一次被分配至的Realserver,以保证其请求的完整性等。其连接追踪的功能由Hash table实现。Hash table的大小等属性可通过下面的命令查看:

# ipvsadm -lcn

为了保证其时效性,Hash table中“连接追踪”信息被定义了“生存时间”。LVS为记录“连接超时”定义了三个计时器:

1、空闲TCP会话;

2、客户端正常断开连接后的TCP会话;

3、无连接的UDP数据包(记录其两次发送数据包的时间间隔);

上面三个计时器的默认值可以由类似下面的命令修改,其后面的值依次对应于上述的三个计时器:

# ipvsadm --set 28800 30 600

数据包在由Direcotr发往Realserver时,只有目标MAC地址发生了改变(变成了Realserver的MAC地址)。Realserver在接收到数据包后会根据本地路由表将数据包路由至本地回环设备,接着,监听于本地回环设备VIP上的服务则对进来的数据库进行相应的处理,而后将处理结果回应至RIP,但数据包的原地址依然是VIP。

时间: 2024-08-04 17:32:27

关于LVS的ARP问题的相关文章

LVS 之ARP

原理 工作过程 主机A的IP地址为:192.168.1.1  MAC地址为:0A-11-22-33-44-01: 主机B的IP地址为:192.168.1.2  MAC地址为:0A-11-22-33-44-02: 当主机A要与主机B通信时,地址解析协议可以将主机B的IP地址(192.168.1.2)解析成主机B的MAC地址(0A-11-22-33-44-02),以下为工作流程: 第1步:根据主机A上的路由表内容,IP确定用于访问主机B的转发IP地址是192.168.1.2.然后A主机在自己的本地A

应用负载均衡之LVS(二):VS_TUN和VS_DR的arp问题

*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hljs-comment, .hljs-template_comment, .diff .hljs-header, .hljs-javadoc { color: #998; font-style: italic; } .hljs-keyword, .css .rule .hljs-keyword, .h

(2) LVS负载均衡:VS_TUN和VS_DR的arp问题

1. ARP协议简介 ARP(Address Resolution Protocol)协议称为地址解析协议,用于将主机IP地址解析为主机的MAC地址,即IP-->MAC之间一一映射. RARP协议相反,是将MAC地址解析为IP地址,MAC-->IP ARP解析时分两种情况: 解析目标和自己在同一网段.A解析同网段的B,A根据自己的IP和子网掩码判断B和自己同网段,这时A就直接在这个网段上发一个ARP广播包寻求B的MAC地址,所有人都收到广播信息,但是B会将MAC地址回应给A,A缓存B的MAC地

Linux進取之旅2: 一个最基本的 LVS负载均衡架构及配置(NAT路由方式)

平台及环境: LVS1:    srv1.training.cc                       private_IP: 172.25.31.20/24    pub_IP :10.0.0.20/24    OS=rhel6.5 private_Virtual IP: 172.25.31.99/32       pub_Virtual IP:10.0.0.99/32 realserver1 :    srv2.training.cc             private_IP:17

集群---Keepalived+lvs

****************** Keepalived+lvs ****************** 服务器 IP 分配: 服务器: ip地址 Load Balancer: 172.25.7.1 Backup: 172.25.7.4 Real Server 1: 172.25.7.2 Real Server 2: 172.25.7.3 主.备机上的软件包安装与配置: # tar zxf keepalived-1.3.5.tar.gz # cd keepalived-1.3.5 # ./con

LVS详细笔记

1. 做一个靠谱,被信任的人. 2. 自身小事做起,勤奋,努力的态度,不计较,不抱怨,好习惯当下做起 3. 不要自我感觉 4. 把你"所有"的精力集中到一点,你就能成功 5,集中自己的所有时间去学习 ARP协议:通过ip地址获得主机物理mac地址 32 bit的ip地址 48 bit的mac地址 ARP原理: 原理是把目的主机的32位ip地址转换成目的主机48位的以太网地址(mac地址) ip地址是逻辑地址,而主机之间的通信是通过物理的mac地址通信的 ARP协议要求通信的主机双方必须

【arp冲突】linux抑制arp通告

通常在用LVS的时候,要在lo口用到虚拟ip,此时需要调整2个地方: arp_ignore arp_announce 因为多个IP用到一个物理网卡的MAC,arp会在局域网广播说: "ip为192.168.1.1的MAC地址是多少",此时将有多个主机回应. 17 0.328160000 Elitegro_1f:10:5f Broadcast ARP 60 Who has 192.168.1.1?  Tell 192.168.1.148 通常是这样做的: echo 1 >/proc

LVS负载均衡群集之构建DR模式,可跟做!!!

有关于LVS负载均衡群集的相关概念可以参考博文:LVS负载均衡群集详解 一.案例概述 LVS负载均衡模式-DR模式:lvs负载调度器作为群集的访问入口,但不作为网关使用,服务器池中的所有节点都各自接入internet,发送给客户机(互联网)的web响应数据包不需要经过lvs负载调度器. LVS负载均衡模式-DR模式:优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户.所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为 超过100台的物理服务器服务,负载

Ubuntu下配置LVS【h】

以后服务器只用CentOS和Ubuntu.下午用redhat装个lvs装了一下午都没搞好,TNND的.果断用Ubuntu,不到两个小时就搞定了. 原文参见: http://kamengwang.blog.163.com/blog/static/90945020201192742214338/ 我用的虚拟机(虚拟了两张网卡,eth0做外网,eth1做局域网,一下都针对eth1做设置)1.LVSServer ip:192.168.196.62.WebServer Apache ip:192.168.