负载均衡简单介绍

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

  • 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. OLEDB事务

    学过数据的人一般都知道事务的重要性,事务是一种对数据源的一系列更新进行分组或者批处理以便当所有更新都成功时同时提交更新,或者任意一个更新失败时进行回滚将数据库中的数据回滚到执行批处理中的所有操作之前的 ...

  2. ArcGIS Enterprise 10.5.1 静默安装部署记录(Centos 7.2 minimal)- 3、安装Portal for ArcGIS

    安装Portal for ArcGIS 解压portal安装包,tar -xzvf Portal_for_ArcGIS_Linux_1051_156440.tar.gz 切换到arcgis账户静默安装 ...

  3. 关联关系的CRUD

    关联关系中的CRUD_Cascade_Fetch 1. hibernate_1700_one2many_many2one_bi_crud 2. 设定 cascade 可以设定在持久化时对于关联对象的操 ...

  4. CAA介绍(转)

    CAA是DS公司正对于其一系列产品,eg:CATIA,ENOVIA,DELIMA,etc,进行二次开发的一个环境.与VC结合的比较紧密.CAAV4是用于Unix/Linux的,到CAAV5才移植到Wi ...

  5. Hadoop fs命令(转)

    最近使用hive做一些etl工作,除了日常sql的编写,了解hadoop及hive的一些底层原理性质的东西包括调优非常有必要,一次hive调优就把原来的零散文件做了合并.首先记下hadoop常用的命令 ...

  6. March 24 2017 Week 12 Friday

    Our lives are brief, that is why it's important to search for meaning. 人生短暂,所以才要寻找它的意义. What can we ...

  7. Opencv4android的Android Studio环境配置及项目实例下载

    因为软件竞赛的项目会用到Opencv for Android,所以就研究了一下如何在Android Studio上配置Opencv4Android 环境概述: Android Studio 2.3 O ...

  8. sublime text3 英文版转为中文版

    第一步设置好:https://packagecontrol.io/installation#st3 简单几步 : 1. 点击菜单栏中“preferences”,弹出选项中找到“package cont ...

  9. bash shell脚本之查看系统环境变量

    查看当前系统环境变量 cat test2: #!/bin/bash # display user information from the system. echo "User info f ...

  10. Arcgis for Android 空间数据WKT与JSON描述

    点线面数据标准格式 一. 点 WKT: POINT(-118.4 -45.2) JSON: { "x": -118.4, "y": -45.2, "s ...