LVS NAT,DR,TUN三种负载原理
负载均衡简单介绍
用通俗的话来说负载均衡,就是通过不同的调度机制将用户的请求分派到后端不同的服务器。缓解服务器的请求压力,实现负载均衡的方案有多种,下面简单说说了解的几种方式:
- DNS 负载:利用DNS的解析可以实现区域的性用户请求负载,这种负载方式是离用户最近的负载方案,请求还没有到达内部系统架构服务前就已经被分流了。
- LVS :就是本篇文件要整理的解决方案,LVS性能特别强,它是工作在linux系统内核的一个程序,LVS负载的特点是超强的分流功能,但它只能负载调度流量的去向,没有办法实现在业务层分流负载。
- Haproxy:haproxy可以工作在ISO7层模型中的4层和7层,工作在4层时是基于IP的负载,这与LVS作用相同,工作在7层时是基于应用层的应用协议进行负载,可以根据分析报文内容并结合算法来选择后端服务
- Nginx: nginx也是应用层负载均衡器,可以实现反向代理功能,nginx的特点是可以将请求按照业务类型进行向后端调度,对请求从业务功能上进行了负载调度。
lVS工作组成
LVS由两部分组成,包括ipvs和ipvsadm:
ipvs:ipvs是工作在内核空间netfilter的input链上的框架,通过用户空间工具进行管理,是真正生效实现调度的代码。
ipvsadm:ipvsadm负责为ipvs内核框架编写规则,管理配置内核中ipvs程序的用户空间的管理工具
LVS工作原理
LVS是工作在linux内核空间的tcp/ip栈的应用程序,其程序名称为ipvs,ipvs会监听input链上的请求,一旦请求的是集群服务的话,ipvs钩子函数会将请求拉出并进行报文修改,强制转发到postrouting处理,关系图如下图所示:
在客户端看来,负载层的LVS 就是一个真实的应用服务器,客户端向LVS发送请求信息,LVS接收数据报文至内核空间,工作在input链上的ipvs模块会判断用户请求是不是定义的后端服务器,如果用户请求的就是定义的后端集群服务,数据报文传送到input链上时,input链会强行将数据报文转发给postrouting,postrouting将数据报文传送给后端真实服务器
LVS的4种工作模式
LVS有多种工作模式,类型如下:
NAT:修改请求报文的目标IP,多目标IP的DNAT
DR:操纵封装新的MAC地址
TUN:在原请求IP报文之外新加一个IP首部
FullNAT:修改请求报文的源和目标IP
生产环境中大多使用DR模型工作
LVS-NAT模式
在客户端看来,负载层的Director server 就是一个真实的应用服务器,客户端向LVS发送请求信息,Director server接收数据报文至内核空间,工作在input链上的ipvs模块会判断用户请求是不是定义的后端服务器,如果用户请求的就是定义的后端集群服务,数据报文传送到input链上时,input链会强行将数据报文转发给postrouting,postrouting将数据报文传送给后端真实服务器。
LVS-NAT模型运行原理
NAT模式工作过程描述
1, Client向Director server发送带有 [CIP-VIP] 的请求数据报文,PREROUTING 链接收数据报文发现目标ip是本机ip,随后将报文转发值INPUT链
2,工作在INPUT链上的IPVS比对数据包请求的服务是否为集群服务,如果是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
3, POSTROUTING根据选路发给后端realy server,realy server收到数据包发现目标ip是自己,然后向Director响应请求,此时响应报文中的源IP地址信息为 RIP,目标地址IP为CIP
4,Director server在响应Client之前再将报文中ip信息源IP地址改为 VIP,目标IP仍为CIP
NAT模式特点
本质是多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为挑出的某个RS的RIP和PORT实现转发
- 1,RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
- 2,请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
- 3, 支持端口映射,可修改请求报文的目标PORT
- 4, LVS必须是Linux系统,RS可以是任意OS系统
LVS-DR模式
在DR工作模型中,Director收到请求通过修改数据数据报文中目的地址的MAC地址实现数据报文的转发。在该模式下,Director和后端realy server都有一个相同VIP,且在同一物理网络中,因此Client发送的请求报文到达INPUT链时,只要将报文中的[CIP-VIP]的MAC信息改成【DIP-MAC | RIP-MAC】,后端realy server接收报文并构建响应,此时,响应报文不再经过Director,realy server直接响应客户端。
LVS-DR模型运行原理
DR模式工作流程
1,当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
2, PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
3, IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
4, 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
5, RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
DR模式的特点
- 1,保证前端路由将目标地址为VIP的报文全部发送给DS,而不是RS
- 2,RS的RIP可以使用私有地址,但也可以使用公网地址
- 3,RS和director必须在同一物理网络中
- 4,请求报文有director调度,但响应报文不一定经由director
- 5,不支持端口映射
- 6,RS可以支持大多数OS
- 7,RS的网关不能指向DIP
LVS-TUN模式
在TUN工作模式下,Client向Director server 发送请求报文,报文到达Director 内核空间不修改请求报文的ip首部,而是通过在原有ip首部[CIP-VIP]之外,再封装一个ip首部[DIP-RIP],RS收到报文后发现是自己的IP地址,就会将报文接受下来,拆除最外层的IP后,会发现里面还有一层IP首部,而且目标地址是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成滞后,通过lo接口送给eth0网卡,然后向外传递。此时的源IP地址为VIP,目标IP为CIP
LVS-TUN模型运行原理
TUN模式工作流程
- 1,当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
- 2, PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
- 3,IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
- 4,POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
- 5, RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
TUN模型特点
- 1,RIP、VIP、DIP全是公网地址
- 2,RS的网关不会也不可能指向DIP
- 3,所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
- 4,不支持端口映射,
- 5,RS的系统必须支持隧道
LVS调度算法
- RR 轮询
调度器将请求调度至后端服务器(这种方式最简单,不考虑后端主机性能等因素,公平调度)
- WRR 加权轮询
在轮询的基础上,调度器可以给后端主机指定权重,考虑到后端主机性能不均衡的问题,可以让性能强的主机响应更多的请求
- LC 最少连接
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
- WLC 加权最少连接
调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
- LBLC 基于局部性最少连接
调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。
- LBLCR 带复制的基于局部性最少连接
它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,
若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
- DH 目标地址哈希
目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
- SH 源地址哈希
实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
LVS NAT,DR,TUN三种负载原理的更多相关文章
- LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用最为广泛。
一.安装LVS LVS的编译安装参考本站文章:http://www.linuxe.cn/post-192.html,对于LVS这种功能性软件,在生产中用yum安装也是没有问题的. 1 yum inst ...
- LVS(Linus Virtual Server):三种负载均衡方式比较+另三种负载均衡方式
还有个姊妹篇也可以参考这个文章:六大Web负载均衡原理与实现 什么是LVS (Linux Virtual Server)? 首先简单介绍一下LVS (Linux Virtual Server)到底 ...
- LVS:三种负载均衡方式比较+另三种负载均衡方式
转:http://blog.csdn.net/u013256816/article/details/50705578 什么是LVS? 首先简单介绍一下LVS (Linux Virtual Serv ...
- LVS:三种负载均衡方式比较
[转自http://soft.chinabyte.com/25/13169025.shtml] 1.什么是LVS? 首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西, ...
- octavia的实现与分析(一)·openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比
[负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...
- openstack octavia的实现与分析(一)openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比
[负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...
- LVS集群的三种工作模式
LVS的三种工作模式: 1)VS/NAT模式(Network address translation) 2)VS/TUN模式(tunneling) 3)DR模式(Direct routing) 1.N ...
- 亿级PV请求的三种负载均衡技术
在互联网+不断渗透到生活中的今天,各种各样的网络服务存在在我们身边,他们的访问流量也是大得惊人.一个大型网站(百万PV以上)想要正常访问,单单靠一台服务器是不可能提供稳定服务的.这时候就需要用负载均衡 ...
- 亿级PV请求的三种负载均衡技术(转)
http://www.360doc.com/content/17/1126/23/50145453_707419125.shtml 目录 DNS轮询 LVS负载均衡 DR模式 NAT模式 ...
随机推荐
- node.js-cancelled because Node.js is unresponsive
今天初学node.js,但是在使用vs code 进行启动调试的时候出现了一个问题 这个报错,一开始我并不知道是什么意思.(而截至我写这个笔记我也还没了解清楚) 大概翻译出来的意思是说 “node.j ...
- IE浏览器下的渐变背景
background: linear-gradient(to bottom, #000000 0%,#ffffff 100%);(标准) linear-gradient 在 ie9 以下是不支持的,所 ...
- ie 9 渐变背景色兼容问题
/*窗口背景*/ .window { background-color: #fff; background: -webkit-linear-gradient(top,#EFF5FF 0, ...
- Git 基本知识与常用指令
一.Git代码状态转换图 其中: 未被Git跟踪的状态为unstage状态: 已被Git跟踪的状态为stage状态(stage:阶段),因此包括staging状态和staged状态. untrack ...
- Android Proguard.flags LOCAL_PROGUARD_FLAGS
在Android项目中用到JNI,当用了proguard后,发现native方法找不到很多变量,原来是被produard优化掉了.所以,在JNI应用中该慎用progurad啊. 解决办法: 1.在An ...
- 面向对象设计之------Is-A(继承关系)、Has-A(合成关系,组合关系)和Use-A(依赖关系)(转)
原文url:http://blog.csdn.net/loveyou128144/article/details/4749576 @Is-A,Has-A,Use-A则是用来描述类与类之间关系的.简单的 ...
- SpringBoot 启动参数设置环境变量、JVM参数、tomcat远程调试
java命令的模版:java [-options] -jar jarfile [args...] 先贴一下我的简单的启动命令: java -Xms128m -Xmx256m -Xdebug -Xrun ...
- Python——追加学习笔记(二)
文件处理 # 文件内移动 seek()方法可以在文件中移动文件指针到不同的位置,offset字节代表相对于某个位置偏移量,默认为0,代表从文件开头算起,1代表从当前位置算起,2代表从文件末尾算起. s ...
- 对 Canal (增量数据订阅与消费)的理解
概述 canal是阿里巴巴旗下的一款开源项目,纯Java开发.基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL(也支持mariaDB). 起源:早期,阿里巴巴B2B公司 ...
- css渲染(三)颜色与背景
颜色的应用主要分为前景色.背景色和透明三个部分. 一.前景色 color color前景色 值: <color> | inherit 初始值: 用户代理特定的值 应用于: 所有元素 继承性 ...