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 11:15
下一篇 2016-07-12 11:15

相关推荐

  • N21-北京-泥人-马哥教育网络班21期+第一周课程练习

    马哥教育网络班21期  第一周课程练习 一、计算机的组成 1、计算机主要由以下几部分组成:运算器 控制器 存储器(编址存储单元)、 输入、输出设备   2、运算器负责运算:只能做二进制的数学、逻辑运算, 控制器:控制由哪得到数据,放到哪去,协调运算器、存储器、输入、输出等设备 运算器、控制器整合到一起就是常说的中央处理器,也就是CPU。 …

    Linux干货 2016-07-12
  • Linux基础知识(一)-linux哲学思想,基础命令,FHS

    1.描述计算机的组成及其功能 2.按系列罗列Linux 的发行版,并描述不通发行版之间的联系和区别. 3.描述Linux的哲学思想,并按照自己的理解对其进行解释 4.说明Linux系统命令的使用格式,详细介绍ifconfig,echo,tty,startx,export.pwd,history,shutdown,poweroff,reboot,hwclock…

    Linux干货 2016-09-22
  • Storm集群安装详解

    storm有两种操作模式: 本地模式和远程模式。 本地模式:你可以在你的本地机器上开发测试你的topology, 一切都在你的本地机器上模拟出来;  远端模式:你提交的topology会在一个集群的机器上执行。 本文以Twitter Storm官方Wiki为基础,详细描述如何快速搭建一个Storm集群,其中,项目实践中遇到的问题及经验总结,在相应章…

    Linux干货 2015-04-04
  • HAProxy实现请求的80端口转发至后端的8000端口并实现动静分离

    一 实验目的 用HAProxy作为负载均衡器,实现把前端请求调度到后端,前端监听80端口,转发至后端的8000端口,并会对访问资源进行判断实现不同的访问内容转发至相对应的服务器。 二 实验拓扑 三 实验环境 IP 功能 192.168.20.108 HAProxy 192.168.237.129 Nginx 192.168.237.130 Nginx+PHP…

    Linux干货 2016-12-19
  • VMware12 Centos系统安装VMware-tools过程

    1、点击VMware菜单虚拟机选中安装VMware-tools:           注:虚拟机桌面会生成VMwaretools DVD安装光盘 2、查看虚拟机设置ISO映像文件是否是VMwaretoolsDVD带Linux.iso映像的文件: 3、在centos系统中 open term…

    Linux干货 2016-07-26
  • 进程管理之工作管理详解(job control)

    进程管理之工作管理详解(job control) 1 什么是工作管理(job control)   我们知道linux是多任务多终端工作的操作系统。我们可以在多个终端进行工作,也可以在一个终端进行多个任务工作。那在一个终端同时进行多个工作任务,就称为工作管理。比如这种情况,在一个终端,你想要复制文件,同时你还想压缩打包文件,甚至你还想编辑文件,这个…

    Linux干货 2017-05-14

评论列表(1条)

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

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