LVS工作总结之原理篇–DR模式
原文地址:
http://www.chenqing.org/2012/11/%E3%80%90lvs%E3%80%91lvs%E5%B7%A5%E4%BD%9C%E6%80%BB%E7%BB%93%E4%B9%8B%E5%8E%9F%E7%90%86%E7%AF%87.html
博客中还有其他模式和keepalived的原理总结。这篇自己总结标注和整理了一下,自己总结的地方红色标注。
======================================================================================================================================
先解释几个名词:
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所在网卡的其它网卡上
LVS工作总结之原理篇–DR模式的更多相关文章
- LVS的工作模式介绍和NAT模式&DR模式实验步骤
一:LVS介绍 二.LVS的NAT和DR模式的实验及配置步骤 一.LVS的简单介绍 linux virtual server 简单来讲lvs是一段内核代码 类似于netfilter本身是一框架但不提供 ...
- LVS负载均衡之DR模式原理介绍
LVS基本原理 流程解释: 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP ...
- LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用最为广泛。
一.安装LVS LVS的编译安装参考本站文章:http://www.linuxe.cn/post-192.html,对于LVS这种功能性软件,在生产中用yum安装也是没有问题的. 1 yum inst ...
- Linux系统(五)负载均衡LVS集群之DR模式
序言 DR模式是lvs集群中三种负载均衡模式的其中一种,那么上一篇中我写啦关于NAT模式的搭建与原理,为什么还要有DR模式与IP隧道模式呢? 首先我们来看3张图.LVS/NAT模式如下图: LVS/I ...
- 应用负载均衡之LVS(三):使用ipvsadm以及详细分析VS/DR模式
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- LVS负载均衡之DR模式部署
1.LVS的DR模式介绍 参考自官网:http://www.linuxvirtualserver.org/zh/lvs3.html VS/DR利用大多数Internet服务的非对称特点,负 ...
- LVS基于DR模式搭建负载均衡群集
LVS -DR模式集群架构原理图
- Keepalived+LVS DR模式高可用架构实践
Keepalived最初是为LVS设计,专门监控各服务器节点的状态(LVS不带健康检查功能,所以使用keepalived进行健康检查),后来加入了VRRP(虚拟路由热备协议(Virtual Route ...
- LVS工作原理及集群类型
Cluster概念 Cluster:集群,为解决某个特定问题将多台计算机组合起来形成的单个系统 Linux Cluster类型: LB:Load Balancing,负载均衡 HA:High ...
随机推荐
- java多线程synchronized底层实现
一直想把这个特别重要的关键词的底层实现搞明白.(当然现在也没有完全明白,如果有错误以后修改这篇文章) 首先,这个关键词synchronize可以说是个语法糖,它的具体用法网上很多博客都讲的比较明了了. ...
- [日常训练]常州集训day5
T1 Description 小$W$和小$M$一起玩拼图游戏啦~ 小$M$给小$M$一张$N$个点的图,有$M$条可选无向边,每条边有一个甜蜜值,小$W$要选$K$条边,使得任意两点间最多有一条路径 ...
- struts2 CVE-2014-0050(DoS), CVE-2014-0094(ClassLoader manipulation) S2-20 DoS attacks and ClassLoader manipulation
catalog . Description . Effected Scope . Exploit Analysis . Principle Of Vulnerability . Patch Fix 1 ...
- linux挂载远程samba目录
yum install cifs-utils #安装cifs协议包 #列出远程目录 smbclient -L 192.100.9.165 -Uadministrator vim /etc/fstab ...
- 加州大学伯克利分校Stat2.2x Probability 概率初步学习笔记: Final
Stat2.2x Probability(概率)课程由加州大学伯克利分校(University of California, Berkeley)于2014年在edX平台讲授. PDF笔记下载(Acad ...
- AngularJs Angular数据类型判断
angular.isArray 判断括号内的值是否为数组. 格式:angular.isArray(value); value: 被判断是否为数组的值. ------------------------ ...
- django1.8 提示(1_8.W001) The standalone TEMPLATE_* settings were deprecated in Django 1.8 and the TEMPLATES dictionary takes precedence. You must put the values of the following settings into your defau
原因是升级之后不推荐使用单独的 TEMPLATES_DIR这样的设置了,使用TEMPLATE = []这种就好了 详细见https://openedx.atlassian.net/browse/TNL ...
- OpenCV: imshow后不加waitkey无法显示视频
OpenCV显示视频帧时出现一个问题,就是imshow之后若是不加waitkey则无法显示,找了很久也没找到原因. 只是发现也有人发现这个问题: cvWaitKey(x) / cv::waitKe ...
- 1 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之DRBD的搭建
preface 近来公司利润上升,购买了10几台服务器,趁此机会,把mysql的主从同步的架构进一步扩展,为了适应日益增长的流量.针对mysql架构的扩展,先是咨询前辈,后和同事探讨,准备采用Mysq ...
- 深入理解JavaScript中的属性和特性
深入理解JavaScript中的属性和特性 JavaScript中属性和特性是完全不同的两个概念,这里我将根据自己所学,来深入理解JavaScript中的属性和特性. 主要内容如下: 理解JavaSc ...