zoukankan      html  css  js  c++  java
  • linux中级之lvs概念

    一、lvs介绍

    LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。它是我们国家的章文嵩博士的一个开源项目。在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。

    使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。

    LVS主要用于多服务器的负载均衡。它工作在网络层,可以实现高性能,高可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置非常简单,且有多种负载均衡的方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外可扩展性也非常好。

    LVS 2部分程序组成,包括 ipvs ipvsadm

    1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。

    2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

    工作在input链上,lvs接收报文转发的流程:PREROUTING-->INPUT-->POSTROUTING

    用户空间:ipvsadm:定义转发规则通过系统调用把规则发送给内核中的ipvs

    lvs术语:

    调度器:director server

    RS: Real Server

    Client IP: CIP

    Director Virtual IP:VIP

    Director IP: DIP

    Real Server IP: RIP

    二、lvs的三种模式

    1lvs type: lvs-nat

                        lvs-dr(direct routing)

                        lvs-tun(ip tunneling)

    2lvs-nat

    多目标的DNAT(IPTABLES):它通过修改请求报文的目标ip地址(同时可能修改目标端口)至挑选出来的某个RSRIP地址实现转发(通过网络地址转换来实现负载均衡)

    特点:

                 (1)RIP应该和DIP使用私网地址,且RS的网关应该指向DIP;

                 (2)请求和响应报文都要经过director server,因此在并发量较高的情况下,director server有可能成为瓶颈

                 (3)支持端口映射

                 (4)RS可以使用任意OSOperating System操作系统)

                 (5)RSRIPdirectorDIP必须同一网络中

    注意:在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端

    优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址

    缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时,大量的数据包都交汇在负载均衡器那,速度就会变慢

    3lvs-dr: direct routing

    它通过修改请求报文的目标mac地址进行转发

    特点:

                 (1)保证前段路由器将目标ipvip的请求发送给director server

                               解决方案:

                                      静态绑定

                                      arptables

                                      修改RS主机内核的参数

                 (2)RSDS必须在同一个物理网络中

                 (3)请求报文经由Director调度,但响应报文一定不能经过director

                 (4)不支持端口映射

                 (5)RS可以是大多数的OS(Unix内核)

                 (6)RS的网关不能指向DIP

    注意: 需要设置lo接口的VIP不能响应本地网络内的arp请求。

    优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

    DR模式的效率很高,但是配置稍微复杂一点,因此对于访问量不是特别大的公司可以用haproxy/nginx取代。日1000-2000W PV或者并发请求1万以下都可以考虑用haproxy/nginx

    缺点:所有 RS 节点和调度器 LB 只能在一个局域网里面。

    4lvs-tun(ip tunneling)

    特点:

    .客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP

    .负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS

    .RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。

    注意:需要设置lo接口的VIP不能在公网上出现。

    优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

    缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。

    三、lvs支持的算法(不区分大小写)

    1. 轮叫调度 rr

    这种算法是最简单的,就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是简单。轮询算法假设所有的服务器处理请求的能力都是一样的,调度器会将所有的请求平均分配给每个真实服务器,不管后端 RS 配置和处理能力,非常均衡地分发下去。

    2. 加权轮叫 wrr

    这种算法比 rr 的算法多了一个权重的概念,可以给 RS 设置权重,权重越高,那么分发的请求数越多,权重的取值范围 0 100。主要是对rr算法的一种优化和补充, LVS 会考虑每台服务器的性能,并给每台服务器添加要给权值,如果服务器A的权值为1,服务器B的权值为2,则调度到服务器B的请求会是服务器A2倍。权值越高的服务器,处理的请求越多。

    3. 最少链接 lc

    这个算法会根据后端 RS 的连接数来决定把请求分发给谁,比如 RS1 连接数比 RS2 连接数少,那么请求就优先发给 RS1

    4. 加权最少链接 wlc

    这个算法比 lc 多了一个权重的概念。

    5. 基于局部性的最少连接调度算法 lblc

    这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器

    6. 复杂的基于局部性最少的连接算法 lblcr

    记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。

    7. 目标地址散列调度算法 dh

    该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。

    8. 源地址散列调度算法 sh

    与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

    grep -i -A 10 'IPVS' /boot/config-3.10.0-957.el7.x86_64

          # IPVS scheduler

          CONFIG_IP_VS_RR=m

                  CONFIG_IP_VS_WRR=m

          CONFIG_IP_VS_LC=m

          CONFIG_IP_VS_WLC=m

          CONFIG_IP_VS_LBLC=m

          CONFIG_IP_VS_LBLCR=m

          CONFIG_IP_VS_DH=m

          CONFIG_IP_VS_SH=m

          CONFIG_IP_VS_SED=m

    静态方法:仅根据算法本身进行调度

          RR:round robin,轮调

          WRR:weighted RR

          SH:source hash,实现session保持的机制

          DH:destination hash,将同一个目标的请求始终发往同一个RS

    动态方法:gun局算法及各RS的当前负载状态进行调度

          LC:Least Connection

                 Overhead=Active*256 + Inactive

          WLCWeighted LC

                 Overhead=(Active*256 + Inactive)/weighted

                 overhead较小的即被挑选的主机

          SED:

          LBLC:

          LBLCR:

  • 相关阅读:
    python之路day08--文件的操作
    python之路day07-集合set的增删查、列表如何排重(效率最高的方法)、深浅copy
    python之路day06-python2/3小区别,小数据池的概念,编码的进阶str转为bytes类型,编码和解码
    python之路day05--字典的增删改查,嵌套
    python之路day04--列表的增删改查,嵌套、元组的嵌套、range、for循环嵌套
    python之路day03--数据类型分析,转换,索引切片,str常用操作方法
    python之路day02--格式化输出、初始编码、运算符
    python之路day01--变量
    线程、进程、协程 异步io
    Ubuntu学习(转载)
  • 原文地址:https://www.cnblogs.com/renyz/p/11384582.html
Copyright © 2011-2022 走看看