N21_17周_3_1_LVS的工作原理

 

结合图形描述LVS的工作原理

LVS简介    

        LVS(Linux Virtual Server,虚拟服务器),是一个虚拟的四层路由交换服务器集群系统,根据调度算法将请求报文的目标IP和目标PORT将其转发至后端主机集群中的某台服务器。项目是由章文嵩博士于1998年5月成立,是中国国内最早的自由软件项目之一。

        在2B、2C的业务中,面对快速增长的访问,服务器需要具备处理这种大量并发访问服务的能力,对于单台服务器来讲,CPU、I/O处理能力很会成为瓶颈,即使对硬件进行升级,单台服务器的性能总是有上限的,处理能力不会一直随着硬件配置的升级而一直线性提升。因此,必须采用集群技术来解决大量并发的应用场景。Linux虚拟服务器(Linux Virtual Servers,LVS)使用负载均衡技术将多台服务器组成一个虚拟服务器。

 

LVS相关术语

VS

Virtual Server

虚拟服务器,Balancer负载均衡器

RS

Real Server

后端真实服务器

CIP

Client IP

客户端请求IP

VIP

Director Virtual   IP

负载均衡器(前端)虚拟IP

DIP

Directior IP

RIP

Real Server IP

后端真实服务器IP

NAS

Network Attached   Storage

网络附加存储(文件共享服务器)

SAN

Storage Area   Network

存储区域网络(块级别)

DS

Distributed   Storage

分布式存储

LB

Load Balancing

负载均衡(增加处理能力)

HA

High   Availability

高可用(始终在线,增加服务可用性)

HP

High Performance

高性能

NAT

Network Address   Translator

网络地址转换

DR

Direct Routing

直接路由

TUN

IP Tunneling

IP隧道模型

RR

Round Robin

轮询调度

WRR

Weight RR

加权轮询

NTP

Network Time Protocol 

用时间服务器同步时间

 

LVS工作原理与结构

LVS属于集群中的层次

1,Hardware负载均衡设备

    F5、BIG IP、Citrix、Netscaler、A10

2,Software软件负载均衡

    四层

        LVS

    七层

        nginx

        haproxy

 

LVS的设计要点

    1,session保持

    2,数据共享

        1>,共享存储

                NAS

                SAN

                DS

        2>,数据同步

 

LVS的结构

        LVS由前端的负载均衡器(Load Balancer,LB)和后端的真实服务器(Real Server,RS)群组成。RS间可通过局域网或广域网连接。LVS的这种结构对用户是透明的,用户只能看见一台作为LB的虚拟服务器(Virtual Server),而看不到提供服务的RS群。当用户的请发往虚拟服务器,LB根据设定的包转发策略和负载均衡调度算法将用户请求转发给RS。RS再将用户请求结果返回给用户。

LVS内核模型

LVS_内核模型.jpg

1>,当客户端的请求到达负载均衡的内核空间时,首先会到达PREROUTING链。

2>,当内核发现请求数据包的目的地址是本机时,将数据包送往INPUT链。

3>,LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将被放行至用户空间。

4>,如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。

5>,最后经由POSTROUTING链发往后端服务器。

LVS_内核模型02.jpg

注:LVS是工作在内核中的。

     LVS工作在INPUT链上。

     LVS和iptables不能同时使用

     ipvs工作在内核中。

     ipvsadm工作在用户模式中,管理集群服务的命令行工具

     VIP是公网地址;RIP和DIP是私网地址,且可以不在同一IP网络,但需要通过路由相互通信;

     RS收到的请求报文的源IP是DIP,因此其响应报文将发送给DIP;

       

LVS的包转发模型

1NAT模型

     多目标的DNAT,通过将请求报文的目标地址和目标端口修改为挑选出某RS的RIP和PORT来实现

LVS_NAT.jpg

1>,客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称CIP,目标地址为VIP(负载均衡前端地址,后面统称为VIP)。

2>,负载均衡收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去。

3>,报文送到Real Server后,由于报文的目标地址是自已,所以会响应该请求,并将响应报文返还给LVS。

4>,然后lvs将些报文的源地址修改为本机并发送给客户端。

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

LVS_NAT02.png

注: 集群节点跟director必须在同一个IP网络中;

        RIP通常是私有地址,仅用于各集群节点间的通信;

        director位于client和real server之间,并负责处理进出的所有通信;

        real server必须将网关指向DIP;

        支持端口映射(转发);

        real server可以使用任意OS;

        请求和响应报文都要经过director转发,在较大规模应用场景中,director易成为系统瓶颈;

 

 

2DR模型

     通过修改请求报文的MAC地址进行转发,IP首部不会发生变化(源IP为CIP,目标IP始终为VIP)

LVS_DR.jpg

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

2>,负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自已的DIP的MAC地址,并将此包发送给RS。

3>,RS发现请求报文中的目的MAC是自已,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。

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

LVS_DR02.jpg

问题:怎样确保前端路由器将目标IP为VIP的请求报文一定会发送给Director?

解决:

   1),静态绑定; 

   2),禁止RS响应VIP的ARP请求;

     a),arptables上定义;

     b),修改各RS的内核参数,并把VIP配置在特定的接口上实现禁止其响应;

       kernel parameter:

         arp_ignore:定义接收到ARP请求时的响应级别;

           0: 只要本地配置的有相应地址,就给予响应;

           1: 仅在请求的目标地址配置请求到达的接口上的时候,才给予响应;

         arp_announce:定义将自已地址向外通告时的级别;

           0:将机机任何接口上的任何地址向外通告; 

           1:试图仅向目标网络通告与其网络匹配的地址;

           2:仅向与本地接口上地址匹配的网络进行通告;

Arp协议:ip地址在局域网内无法进行通信,最终局域网内两台主机通信还是通过MAC地址,所以就是涉及ip到MAC地址转换的问题。

 

注意:集群节点RS跟director必须在同一个物理网络中;

   RS的RIP可以使用私有地址或公网地址,实现便捷的远程管理和监控;RIP使用私有地址可以通过在之前加一个路由器的方式和外网通信,直接响应客户机。

   Director仅负责处理入站请求,响应报文则由real server直接发往客户端;即请求报文必须由Director调试,但响应报文必须不能经由Director。

   real server不能将网关指向DIP;(直接使用前端网关)

   不支持端口映射;

 

3TUN模型

     不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是在原有的IP首部之外再次封装一个IP首部(源IP为DIP,目标IP为RIP)

LVS_TUN.jpg

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

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

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

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

    请求时,对报文再进行一次封装;返回时,直接返回。

    集群节点可以跨越互联网Internet;

    RIP必须是公网地址;

    director仅负责处理入站请求,响应报文由real server直接发往客户端;

    响应报文一定不能通过director即real server网关不能指向director;

    只有支持隧道功能的OS才能用于real server;

    不支持端口映射;

LVS的调度算法

LVS的调度算法分为静态动态两类。

静态算法

静态算法(4种):只根据算法进行调度 而不考虑后端服务器的实际连接情况和负载情况

①.RR:轮询调度(Round Robin)

  调度器通过”轮询”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载轮询机制,依次分配请求,方式简单但是负载均衡的效果一般。

 

②.WRR:加权轮询(Weight RR)

  调度器通过“加权轮询”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。加权轮询,权重越大承担的负载就越大。

 

③.DH:目标地址哈希(Destination ip Hash ) 能实现连接追踪,但不考虑负载均衡效果。

  将同一个请求发给同一个Server;Hash的是目标地址。

  例:客户A访问了内容A,是server1处理的,这时客户B也访问了内容A,这时也会被指定到Server1处理。

 

④.SH:源地址 hash(Source ip Hash)

  源地址哈希,将来自同一个ip请求通过记录在ip hash表中绑定在同一个服务器,实现session保持

  缺点:调度粒度大,对负载均衡效果差。

  例:这个源地址访问是服务器A响应的,以后只要是这个源地址发的请求,都会是服务器A响应。

 

动态算法

动态算法(6种):前端的调度器会根据后端真实服务器的实际连接情况来分配请求

 

①.LC:最少链接(Least Connections)

  调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。

   小结:最小连接;OverHead=activity*256+inactive;结果最小的将会被挑中;

 

②.WLC:加权最少连接(默认采用的就是这种)(Weighted Least Connections)

  在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

   小结:加权最少连接;(activity*256+inactive)/weight;谁的小挑谁;

 

③.SED:最短延迟调度(Shortest Expected Delay )

  在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权,不再考虑非活动状态,把当前处于活动状态的数目+1来实现,数目最小的,接受下次请求,+1的目的是为了考虑加权的时候,非活动连接过多缺陷:当权限过大的时候,会倒置空闲服务器一直处于无连接状态。

   小结:最短期望延迟;(active+1)*256/weight;

 

④.NQ永不排队/最少队列调度(Never Queue Scheduling NQ)

  无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空间。在SED基础上无论+几,第二次一定给下一个,保证不会有一个主机不会很空闲着,不考虑非活动连接,才用NQ,SED要考虑活动状态连接,对于DNS的UDP不需要考虑非活动连接,而httpd的处于保持状态的服务就需要考虑非活动连接给服务器的压力。

    小结:永不排队。

 

⑤.LBLC:基于局部性的最少链接(locality-Based Least Connections)

  基于局部性的最少链接”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器

   小结:基于本地的最少连接。

 

⑥. LBLCR:带复制的基于局部性最少连接(Locality-Based Least Connections with Replication)

  带复制的基于局部性最少链接”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按”最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。

   小结:基于本地的带复制的最少连接。

 

ipvs管理工具介绍

ipvsadm:工作在用户空间,定义转发规则的程序;

ipvs:工作在内核空间,根据规则完成调度请求的程序;

 

ipvsadm用法  

管理服务器集群

ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask]

 例:# ipvsadm -A -t 172.16.100.1:80 -s rr

       ipvsadm -D -t|u|f service-address

            -A: 添加

            -E:修改

            -D:删除

            -t:TCP协议的端口

            -u:UDP协议的端口

                   server-address: IP:[PORT]

            -f:FWM,防火墙标记,标记用数字来表示,将多个端口绑定在一起定义成一个集群服务使用

                  server-address: Mark Number

            -s: 制定调度方法,默认为wlc

 

管理集群服务的RS

ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]

ipvsadm -d -t|u|f service-address -r server-address

-a:添加RS

-e:修改RS

-d:删除RS

-t|u|f service-address:引用此前定义过的集群服务

-r server-address :某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;

  [-g|i|m]:指定lvs类型

      -g:DR

     -i:TUN

     -m:NAT

     -w weight:定义服务器权重;

例:#ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 -m

      #ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -m

 

保存RSCS

        -S save: 

        ipvsadm -S > /etc/sysconfig/ipvsadmin.v1 

        ipvsadm-save > /etc/sysconfig/ipvsadmin.v1 

        service ipvsadm save      

载入此前的规则

        -R: restore

        ipvsadm -R < /etc/sysconfig/ipvsadmin.v1 

        ipvsadm-restore < /etc/sysconfig/ipvsadmin.v1 

        service ipvsadm start 

清空规则(删除所有集群服务)

        ipvsadm -C 

 显示规则

        ipvsadm -L |l [options]

        options

            –c:显示当前所有的connection(ipvs连接状况)

            –stats:统计数据。列出CS及RS的连接统计数据

            –rate:速率。列出CS及RS的连接、报文及字节速率

            -n –numeric: 数字格式显示

            –exact: 精确值

            –timeout:显示tcp、tcpfin和udp的会话超时时长

   注:各节点之间的时间偏差不应该超过1秒钟。

其它

NTP

NTP:Network Time Protocol 用时间服务器同步时间

说明: C:\Users\zhouyong\AppData\Local\YNote\data\123456bisheng@163.com\88badfa660764e96bb056c6425060155\3fbcedfa4f47460294dc657316dab024.jpg

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创文章,作者:365,如若转载,请注明出处:http://www.178linux.com/23247

(0)
365365
上一篇 2016-07-12
下一篇 2016-07-12

相关推荐

  • Bash Shell编程初学基础篇之二

    Bash Shell编程初学基础篇之二    时间如白驹过隙,一晃过去了几周,一切的计划都没有变化快。当你制定计划实施时,在这期间却会发生许多打乱我们计划的事情,但是我们还是要坚持下去,胜利是属于坚持到最后的人!实践出真理,中级基本结束了,需要回过头了好好总结一下了。心中总有好多话想找个同行唠唠;不废话了,估计大家都烦了!总有一天,你会成…

    Linux干货 2015-05-11
  • 初涉Linux基本要点概括(2)

    linux上的文件查看与管理类命令 mkdir 作用: 创建目录 语法: mkdir [OPTION]… DIRECTORY… 示例: mkdir -p /tmp/x/y/z             &nb…

    Linux干货 2016-10-15
  • Linux基础系列(用户,组管理)

       Linux是一个多用户操作系统多任务的分时操作系统,平时的日常使用离不开用户登录以及用户组的管理,熟练管理用户和用户组,会提升我们的工作效率。   Linux用户管理:   Linux包括系统管理员,普通用户。普通用户又分为系统用户和登录用户。系统用户一般不会登陆系统,其shell类型一般为/etc/nologi…

    Linux干货 2016-08-04
  • 马哥教育网络班22期+第六周课程练习

    vim编辑器的使用总结    vim编辑器是模式化的全屏文本编辑器,有三种基本模式:        编辑模式        输入模式   &…

    Linux干货 2016-10-24
  • Python文件操作

    计算机体系架构 运算器:完成各种算术运算、逻辑运算、出具传输等数据加工处理 控制器:控制程序的执行 CPU = 运算器 + 控制器 存储器:用于记忆程序的数据,内存 输入设备:将数据或程序输入到计算机中 输出设备:将数据或程序的处理结果展示给用户 文件IO常用操作 open 打开 read 读取 write 写入 close 关闭 readline 行读取 …

    Python笔记 2018-05-02

评论列表(1条)

  • 马哥教育
    马哥教育 2016-07-12 14:10

    写的很好,排版还可以在漂亮一点,加油!图是自己画的吗?