LVS工作总结之原理篇–DR模式

先解释几个名词:

LB(Load Balancer) :负载均衡器,也就是装有LVS(ipvsadm)的server

VIP(Virtual IP):虚拟IP,也就是给远程客户端(网民)提供服务的外部IP,比如,提供80服务,域名是www.a.com,则www.a.com 对应的A记录就是VIP

LD(Load Balancer Director):同LB,负载均衡调度器

real server:即后端提供真是服务的server,比如你提供的是80服务,那你机器可能就是装着Apache这中web服务器

DIP(Director IP):在NAT模式中是后端realserver的gateway,在DR和Tune中如果使用heartbeat或者keepalived,用来探测使用

RIP(Real Server IP):后端realserver的IP

LVS的三种工作模式

DR(直接路由)

NAT(网络地址转换)

Tune (隧道)

DR(直接路由)

这里我们以及后面的例子我们都会假设这么一个场景,我们使用LVS为我们的web集群提供负载均衡功能:

VIP: 221.130.1.2

DIP1: 221.130.1.3

DIP2: 221.130.1.4

RIP1: 221.130.1.100

RIP2: 221.130.1.101

GATEWAY: 221.130.1.1

关于公网VIP获得:这个IP不能真实存在,不能是服务器的IP,VIP和其他IP必须在一个网段,如果机器均置于IDC机房,只需要向你的IDC申请5个公网IP即可,多余的一个公网ip用于VIP;

DR模式的原理

现在客户端CLient访问www.a.com ,经过dns查询得到目的IP为VIP,目的端口为80,于是客户端和我们VIP,端口80建立连接(TCP三次握手,只是建立连接没有传送数据),之后客户端发送HTTP请求,LVS在VIP上收到之后,根据hash策略,从后端realserver中选

出一台作为此次请求的接受者,假设为RIP1,LVS将请求包的目的mac地址更改为RIP1的mac,然后封装后转发给后端的RIP1,同时将该链接记录在hash表中。

RIP1的某一块网卡,比如eth0,接收到这个转发包看到mac地址是自己的,于是就转发给上层的IP层,IP层解开包后,发现目的的IP地址也是自己,因为VIP也配置在我们的一块non-arp的网卡上(比如lo:0),然后根据IP首部的类型字段(这里是TCP),把请求送给

TCP,然后TCP根据目的端口80,传给应用层的Apache,Apache处理完请求之后,将数据传给TCP,TCP将源端口更改为80 ,源IP更改为VIP,目的端口更改为客户端的端口,目的IP更改为Client的IP,打包后给IP层,IP层根据目的地址进行路由,然后经过网络返给

Client,完成了一次请求,而不经过LB;

这里注意的是,VIP和realserver必须在同一个网段中的(想想为什么?)

DR模式的优缺点

优点:

可扩展性强,ld不会成为业务增长的瓶颈

缺点:

节点不能跨网段,即real server和ld必须在一个物理网段中,一定程度上可能会使用多个公网IP

realserver上须有一块网卡不接受arp广播

DR模式与arp

由于DR模式使用的是更改目的的mac地址,所以难免要和arp打交道。

一般来说客户端是不会和我们的服务器在同一个网段的,那么请求就会经过我们的服务器所在网段的路由设备上,我们知道在同一网段中,两个主机通信靠的是二层的物理地址而不是Ip地址,所以当请求包到达这路由设备上之后,若路由设备的arp表中没有VIP对应的

MAC,就会广播一个arp请求,在这里我们将LVS和real server上都配置了VIP,那么按照理论他们都会响应这个arp请求,那路由器的arp表就会乱了。所以,我们就需要只让LVS上响应VIP的arp请求,而real server 不响应;

Linux主机有这么一个特性,假设我们的主机上有两块网卡,比如eth0,eth1 当arp请求eth1的mac地址的时候,eth1会答复,这个是理所当然的,但是eth0也会“好心”的帮eth1回答这个arp请求; 要防止这样的话,就需要更改下我们的一些内核参数:

net.ipv4.conf.lo.arp_ignore = 1

net.ipv4.conf.all.arp_ignore = 1

正常情况下只写第二条就是了,all 是指所有设备的interface,当all和具体的interface比如lo,按照最大的值生效;

另外一个linux的特性就是,对于一个从realserver发出的arp请求,其源IP是VIP,而出口不会是lo,这里假设是eth0,那么这个arp请求包里里面,源IP就是VIP,源MAC是eth0的mac,目的IP是网关,那么路由器在接收到这个请求的时候,会将将自己的相应接口的硬

件地址放在arp响应包中,同时将请求包中的源IP及MAC放在arp高速缓存中,那这下可就乱套 了,就会使真正的VIP得不到正确的请求了.

这是因为,正常的情况下,arp的请求中源IP是出去的所在接口的地址,mac也是出去的接口的mac,但linux在默认情况下却不是这样的,如果一个接口发出的arp请求须经另一个出口出去的时候,源IP就不是所出去接口的IP,那么将内核参数设置为 2 相应的解决了这个

问题。

net.ipv4.conf.lo.arp_announce = 2

net.ipv4.conf.all.arp_announce = 2

===================

关于arp: 1.什么是arp?

ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络中实际传输的是“帧”,帧里面是有目标主机的MAC地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获

得的呢?它就是通过地址解析协议获得的。所谓“地址解析”就是主机在发送帧前将目标IP地址转换成目标MAC地址的过程。ARP协议的基本功能就是通过目标设备的IP地址,查询目标设备的MAC地址,以保证通信的顺利进行。

2.arp协议的工作原理?

在每台安装有TCP/IP协议的电脑里都有一个ARP缓存表,表里的IP地址与MAC地址是一一对应的

我们以主机A( )向主机B( )发送数据为例。当发送数据时,主机A会在自己的ARP缓存表中寻找是否有目标IP地址。如果找到了,也就知道了目标MAC地址,直接把目标MAC地址写入帧里面发送就可以了;如果在ARP缓存表中没有找到相对应的IP地址,主机A就会在

网络上发送一个广播,目标MAC地址是“FF.FF.FF.FF.FF.FF”,这表示向同一网段内的所有主机发出这样的询问:“ 的MAC地址是什么?”网络上其他主机并不响应ARP询问,只有主机B接收到这个帧时,才向主机A做出这样的回应:“ 的MAC地址是00-aa-00-62-

c6-09”。这样,主机A就知道了主机B的MAC地址,它就可以向主机B发送信息了。同时它还更新了自己的ARP缓存表,下次再向主机B发送信息时,直接从ARP缓存表里查找就可以了。ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删

除,这样可以大大减少ARP缓存表的长度,加快查询速度。

3.如何查看arp缓存表?

ARP缓存表是可以查看的,也可以添加和修改。在命令提示符下,输入“arp -a”就可以查看ARP缓存表中的内容了

用“arp -d”命令可以删除ARP表中某一行的内容

用“arp -s”可以手动在ARP表中指定IP地址与MAC地址的对应。

===================

其它问题

ip_forward不需要打开,因为LB和real server在同一个网段

一般VIP所在的网卡还配置一个DIP,这是因为如果是用了keepalived等工具做HA或者Load Balance,则在健康检查时需要用到DIP

在realserver上也可以将VIP配置在除RIP所在网卡的其它网卡上

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏马小尾成长迹

如何通过浏览器上网

当我们在网页浏览器(Web browser)的地址栏中输入 URL 时,Web 页面是如何呈现的吗?

1730
来自专栏Java架构沉思录

一文读懂负载均衡之LVS

根据官方文档LVS支持三种负载工作方式:NAT方式、TUN方式和DR方式。为了说明这三种方式的工作原理,我们首先需要了解一下基础的IP/TCP报文(注意,IP报...

1983
来自专栏企鹅号快讯

ALM损坏后的恢复步骤

ALM是HP出品的软件开发生命周期软件,其全称是Application Lifecycle Management,其采用B/S结构,从需求,业务模型到测试用例和...

19810
来自专栏Jimoer

Java网络编程的基本网络概念

自己网络这方面的知识很是薄弱,每次面试被问到这部分都会卡壳,所以很尴尬,然后最近也是有些时间了,就赶紧把自己的不足补充一下。虽然最近也在看设计模式,但是总看设计...

1344
来自专栏散尽浮华

Centos下PPTP环境部署记录

PPTP(点到点隧道协议)是一种用于让远程用户拨号连接到本地的ISP,通过因特网安全远程访问公司资源的新型技术。它能将PPP(点到点协议)帧封装成IP数据包,以...

5058
来自专栏Java呓语

1·HTTP 概述

本文是《HTTP 权威指南》的第一章节 HTTP 概述的 读书笔记,我会尝试站在 HTTP 设计者 的角度上将知识点编辑成串,所以阅读本文您将收获 HTTP 宏...

1252
来自专栏java思维导图

《HTTP权威指南》思维导图一览全书

文章作者:yrq110 原始链接:http://yrq110.me/2017/03/04/20170304-http-mindmap/ 高清原图:请下拉到底点...

3013
来自专栏腾讯移动品质中心TMQ的专栏

【腾讯 TMQ 】WIFI 安全测试,其实不难

作为WiFi安全的一部分,近年来WiFi安全事件层出不穷,而其中的ARP攻击事件更加普遍,越来越成为移动互联网时代手机用户的一大痛点。本文主要讲解WIFI的安全...

3110
来自专栏即时通讯技术

网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动。

2932
来自专栏前端黑板报

软件工程师需要了解的网络知识:从铜线到HTTP(四)—— TCP 和路由器

JohnLui:程序员,Swift Contributor,正在写《iOS 可视化编程与 Auto Layout》 基础梳理 截至目前,我们已经得到了三个首部:...

3086

扫码关注云+社区

领取腾讯云代金券