负载均衡简单介绍

用通俗的话来说负载均衡,就是通过不同的调度机制将用户的请求分派到后端不同的服务器。缓解服务器的请求压力,实现负载均衡的方案有多种,下面简单说说了解的几种方式:

  • 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三种负载原理的更多相关文章

  1. LVS负载均衡常用的工作模式有NAT、DR、和TUN三种,其中DR模式性能最为优越,使用最为广泛。

    一.安装LVS LVS的编译安装参考本站文章:http://www.linuxe.cn/post-192.html,对于LVS这种功能性软件,在生产中用yum安装也是没有问题的. 1 yum inst ...

  2. LVS(Linus Virtual Server):三种负载均衡方式比较+另三种负载均衡方式

    还有个姊妹篇也可以参考这个文章:六大Web负载均衡原理与实现 什么是LVS (Linux Virtual Server)?   首先简单介绍一下LVS (Linux Virtual Server)到底 ...

  3. LVS:三种负载均衡方式比较+另三种负载均衡方式

    转:http://blog.csdn.net/u013256816/article/details/50705578 什么是LVS?   首先简单介绍一下LVS (Linux Virtual Serv ...

  4. LVS:三种负载均衡方式比较

    [转自http://soft.chinabyte.com/25/13169025.shtml] 1.什么是LVS? 首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西, ...

  5. octavia的实现与分析(一)·openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比

    [负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...

  6. openstack octavia的实现与分析(一)openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比

    [负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...

  7. LVS集群的三种工作模式

    LVS的三种工作模式: 1)VS/NAT模式(Network address translation) 2)VS/TUN模式(tunneling) 3)DR模式(Direct routing) 1.N ...

  8. 亿级PV请求的三种负载均衡技术

    在互联网+不断渗透到生活中的今天,各种各样的网络服务存在在我们身边,他们的访问流量也是大得惊人.一个大型网站(百万PV以上)想要正常访问,单单靠一台服务器是不可能提供稳定服务的.这时候就需要用负载均衡 ...

  9. 亿级PV请求的三种负载均衡技术(转)

    http://www.360doc.com/content/17/1126/23/50145453_707419125.shtml       目录 DNS轮询 LVS负载均衡 DR模式 NAT模式 ...

随机推荐

  1. Git和GitHub在线学习资源整理(转)

    原文地址:http://blog.csdn.net/duqi_2009/article/details/12646711 电子书 GotGitHub Git Workflow 文章 GitHub Fu ...

  2. FCKEditor编辑器添加中文字体的方法

    默认情况下,FCKEditor在进行文本编辑时,无法使用中文字体.让其添加中文字体的方法: 1.打开 fckconfig.js 文件,找到第154行(大概),会发现: 程序代码: FCKConfig. ...

  3. Myeclipse中进行JUnit单元测试

    最近学习了在myeclipse中进行单元测试,写点东西总结总结. JUnit单元测试: 测试对象为一个类中的方法. juint不是javase中的部分,所以必须导入jar包,但是myeclipse自带 ...

  4. 破解Power Designer 12.5

    PowerDesigner15.1破解补丁链接: https://pan.baidu.com/s/1boJoT6B 密码: 9x77 解压,将文件 pdflm15.dll替换安装目录的同名文件即可.

  5. Struts1.x 中处理乱码及通过标签显示数据

    1.通过filter解决乱码问题 网页的请求到达之前,先要经过filter的处理: 提取数据出现乱码:request.setCharacterEncoding("UTF-8"); ...

  6. python入门6 字符串拼接、格式化输出

    字符串拼接方式    1  使用 + 拼接字符串 2 格式化输出:%s字符串 %d整数 %f浮点数 %%输出% %X-16进制 %r-原始字符串 3 str.format() 代码如下: #codin ...

  7. Ubuntu下Qt(Retex)无法输入中文

    这个问题从我第一次在Ubuntu上使用Qt便困扰着我,奈何之前一直没认真去解决掉这个问题.今天作死想想,这个不可能解决不掉的.因为那么多人用Ubuntu,而且又那么多人用Qt的产品,比如Retext. ...

  8. IOS ASI 请求服务器 总结

    一.发送请求的2个对象 1.发送GET请求:ASIHttpRequest 2.发送POST请求:ASIFormDataRequest* 设置参数// 同一个key只对应1个参数值,适用于普通“单值参数 ...

  9. C++ decltype类型说明符(尾置返回类型使用)

    转自https://blog.csdn.net/yhl_leo/article/details/50865552 1 基本语法 decltype 类型说明符生成指定表达式的类型.在此过程中,编译器分析 ...

  10. note04-计算机网络

    4.WLAN无线局域网(wareless local area network) IEEE802.11无线以太网协议标准 基础服务集合BSS 基站AP 服务服务集合标识SSID 即wifi名 分配系统 ...