LVS(Linux Virtual Server)学习笔记

LVS(Linux Virtual Server)学习笔记

此文主要对lvs负载均衡学习的总结,一为记录,二为巩固。主要介绍:1、lvs基础;2、lvs的配置;3、lvs的实现

前提:负载均衡(LB Cluster)
    负载均衡实现方法有两种:硬件实现和软件实现;
        硬件比较常见的有:   1) F5 Big-IP;2)Citrix Netscaler;3)A TEN
        软件比较常见的有:   1)LVS(Linux Virtual Server);2)nginx;3)HAProxy;4)ATS(Apache Traffic Server)

一、LVS基础

1.1 什么是lvs

  LVS是Linux Virtual Server的缩写,顾名思义是一个虚拟的服务器集群系统,项目在1998年5月由张文嵩博士成立,在linux 2.6版本后,LVS被收录到内核中。

1.2 lvs能拿来干什么

  LVS作为一个调度器,能把用户的大量并发请求负载均衡至后端服务器,使得网站在高并发下还能提供服务,而不至于瘫痪。LVS技术要达到的目标是:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。 LVS自从1998年开始,发展到现在已经是一个比较成熟的技术项目了。可以利用LVS技术实现高可伸缩的、高可用的网络服务,例如WWW服务、Cache服务、DNS服务、FTP服务、MAIL服务、视频/音频点播服务等等,有许多比较著名网站和组织都在使用LVS架设的集群系统,例如:Linux的门户网站(www.linux.com)、向RealPlayer提供音频视频服务而闻名的Real公司(www.real.com)、全球最大的开源网站(sourceforge.net)等。

1.3 lvs的工作模式

  LVS是四层负载均衡,也就是说建立在OSI模型的第四层——传输层之上,传输层上有我们熟悉的TCP/UDP,LVS支持TCP/UDP的负载均衡。因为LVS是四层负载均衡,因此它相对于其它高层负载均衡的解决办法,比如DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。

  LVS的IP负载均衡技术是通过IPVS模块来实现的,IPVS是LVS集群系统的核心软件,它的主要作用是:安装在Director Server上,同时在Director Server上虚拟出一个IP地址,用户必须通过这个虚拟的IP地址访问服务。这个虚拟IP一般称为LVS的VIP,即Virtual IP。访问的请求首先经过VIP到达负载调度器,然后由负载调度器从Real Server列表中选取一个服务节点响应用户的请求。 当用户的请求到达负载调度器后,调度器如何将请求发送到提供服务的Real Server节点,而Real Server节点如何返回数据给用户,是IPVS实现的重点技术,IPVS实现负载均衡机制有几种,分别是NAT、DR、TUN及FULLNAT。

1.3.1 lvs-nat工作模式

LVS(Linux Virtual Server)学习笔记  NAT(Network Address Translation 网络地址转换)是一种外网和内外地址映射的技术,内网可以是私有网址,外网可以使用NAT方法修改数据报头,让外网与内网能够互相通信。NAT模式下,网络数据报的进出都要经过LVS的处理。LVS需要作为RS(真实服务器)的网关。当包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为RS的IP。RS接收到包以后,仿佛是客户端直接发给它的一样。RS处理完,返回响应时,源IP是RS IP,目标IP是客户端的IP。这时RS的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,这样,这个包对客户端看起来就仿佛是LVS直接返回给它的。客户端无法感知到后端RS的存在。

(1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关要指向DIP;
(2)请求报文和响应报文都必须经由Director转发;Director易于成为系统瓶颈;
(3)支持端口映射,可修改请求报文的目标PORT;
(4)vs必须是Linux系统,rs可以是任意系统;

缺点:在整个过程中,所有输入输出的流量都要经过LVS 调度服务器。显然,LVS 调度服务器的网络I/O压力将会非常大,因此很容易成为瓶颈,特别是对于请求流量很小,而响应流量很大的Web类应用来说尤为如此。

优点: NAT模式的优点在于配置及管理简单,由于了使用NAT技术,LVS 调度器及应用服务器可以在不同网段中,网络架构更灵活,应用服务器只需要进行简单的网络设定即可加入集群。

1.3.2 lvs-dr工作模式(最为常用)

lvs-dr.png.JPG

  DR(Direct Routing 直接路由模式)此模式时LVS 调度器只接收客户发来的请求并将请求转发给后端服务器,后端服务器处理请求后直接把内容直接响应给客户,而不用再次经过LVS调度器。LVS只需要将网络帧的MAC地址修改为某一台后端服务器RS的MAC,该包就会被转发到相应的RS处理,注意此时的源IP和目标IP都没变。RS收到LVS转发来的包时,链路层发现MAC是自己的,到上面的网络层,发现IP也是自己的,于是这个包被合法地接受,RS感知不到前面有LVS的存在。而当RS返回响应时,只要直接向源IP(即用户的IP)返回即可,不再经过LVS。

注意:
    (1) 确保前端路由器将目标IP为VIP的请求报文发往Director:
        (a) 在前端网关做静态绑定;
        (b) 在RS上使用arptables;
        (c) 在RS上修改内核参数以限制arp通告及应答级别;
                arp_announce
                arp_ignore
    (2) RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;
    (3) RS跟Director要在同一个物理网络;
    (4) 请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client;
    (5) 此模式不支持端口映射;

缺点:唯一的缺陷在于它要求LVS 调度器及所有应用服务器在同一个网段中,因此不能实现集群的跨网段应用。

优点:可见在处理过程中LVS Route只处理请求的直接路由转发,所有响应结果由各个应用服务器自行处理,并对用户进行回复,网络流量将集中在LVS调度器之上。

1.3.3 lvs-tun 工作模式

lvs-tun.JPG

  TUN(virtual server via ip tunneling IP 隧道)调度器把请求的报文通过IP隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文。此转发方式不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS;RS直接响应给客户端(源IP是VIP,目标IP是CIP),由于一般网络服务应答数据比请求报文大很多,采用lvs-tun模式后,集群系统的最大吞吐量可以提高10倍

注意:
    (1) DIP, VIP, RIP都应该是公网地址;
    (2) RS的网关不能,也不可能指向DIP;
    (3) 请求报文要经由Director,但响应不能经由Director;
    (4) 此模式不支持端口映射;
    (5) RS的操作系统得支持隧道功能

缺点:由于后端服务器RS处理数据后响应发送给用户,此时需要租借大量IP(特别是后端服务器使用较多的情况下)。

优点:实现lvs-tun模式时,LVS 调度器将TCP/IP请求进行重新封装并转发给后端服务器,由目标应用服务器直接回复用户。应用服务器之间是通过IP 隧道来进行转发,故两者可以存在于不同的网段中。

1.3.4 lvs-fullnat模式(此类型默认不支持

  此模式类似DNAT,它通过同时修改请求报文的源IP地址和目标IP地址进行转发

注意:
    (1) VIP是公网地址,RIP和DIP是私网地址,且通常不在同一IP网络;因此,RIP的网关一般不会指向DIP;
    (2) RS收到的请求报文源地址是DIP,因此,只需响应给DIP;但Director还要将其发往Client;
    (3) 请求和响应报文都经由Director;
    (4) 支持端口映射;
1.4 LVS 的调度算法

根据其调度时是否考虑各RS当前的负载状态,可分为静态方法和动态方法两种。

静态方法:   
        仅根据算法本身进行调度;
        RR:roundrobin,轮询调度,即简单在各主机间轮流调度;
        WRR:Weighted RR,加权轮询调度,根据各主机的权重进行轮询;
        SH:Source Hashing,实现session sticy,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定;
        DH:Destination Hashing;目标地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡;

动态方法:
        主要根据每RS当前的负载状态及调度算法进行调度;
            Overhead=

            LC:least connections最小连接调度,;
                lvs根据Overhead=activeconns*256+inactiveconns计算服务器的负载状态,每次选择overhead最小的服务器
            WLC:Weighted LC 加权最小连接调度;
                lvs根据Overhead=(activeconns*256+inactiveconns)/weight来计算服务器负载,每次选择overhead最小的服务器,它是lvs的默认调度算法;
            SED:Shortest Expection Delay最短期望延迟,
                它不对 inactive 状态的连接进行计算,根据Overhead=(activeconns+1)*256/weight计算服务器负载,选择 overhead 最小的服务器进行调度
            NQ:Never Queue
                当有空闲服务器时,直接调度至空闲服务器,当没有空闲服务器时,使用 SED 算法进行调度
            LBLC:Locality-Based LC,动态的DH算法,基于局部性最少连接,相当于 dh + wlc,正常请求下使用 dh 算法进行调度,如果服务器超载,则使用 wlc 算法调度至其他服务器;
            LBLCR:LBLC with Replication,带复制功能的LBLC,与 LBLC 不同的是 LVS 将请求 IP 映射至一个服务池中,使用 dh 算法调度请求至对应的服务池中,使用 lc 算法选择服务池中的节点,当服务池中的所有节点超载,使用 lc 算法从所有后端 Realserver 中选择一个添加至服务吃中。
1.5 ipvsadm lvs负载均衡管理命令
核心功能:
            集群服务管理(lvs调度器):增、删、改;
            集群服务的RS管理:增、删、改;
            查看;

管理集群服务:增、改、删;

            增、改:
                ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]

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

            service-address:
                    -t|u|f:
                    -t: TCP协议的端口,VIP:TCP_PORT
                    -u: TCP协议的端口,VIP:UDP_PORT
                    -f:firewall MARK,是一个数字;

            [-s scheduler]:指定集群的调度算法,默认为wlc;

        例子:
            # ipvsadm -A -t 172.16.33.116:80 -s rr

管理集群上的RS:增、改、删;

            增、改:
                ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]

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

            server-address:
                rip[:port]

            选项:
                lvs类型:
                    -g: gateway, dr类型
                    -i: ipip, tun类型
                    -m: masquerade, nat类型   
                    -w weight:权重;
        例子:
            # ipvsadm -a -t 172.16.33.117:80 -r 192.168.100.1 -m
            # ipvsadm -a -t 172.16.33.118:80 -r 192.168.100.2 -m

清空定义的所有内容:
                ipvsadm -C

查看:
        ipvsadm -L|l [options]
            --numeric, -n:numeric output of addresses and ports 
            --exact:expand numbers (display exact values)

            --connection, -c:output of current IPVS connections
            --stats:output of statistics information
            --rate :output of rate information

保存和重载:
        ipvsadm -S = ipvsadm-save
        ipvsadm -R = ipvsadm-restore

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

(0)
yaoqin.liangyaoqin.liang
上一篇 2017-02-13
下一篇 2017-02-13

相关推荐

  • 6个用于大数据分析的最好工具

    大数据是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理。该数据集通常是万亿或EB的大小。这些数据集收集自各种各样的来源:传感器,气候信息,公开的信息,如杂志,报纸,文章。大数据产生的其他例子包括购买交易记录,网络日志,病历,军事监控,视频和图像档案,及大型电子商务。  在大数据和大数据分析,他们对企业的影…

    Linux干货 2015-04-04
  • 马哥教育-第二周作业

    问题一:文件管理类命令 常规命令:mkdir、rmdir、stat、touch、copy、mv、rm (1).mkdir  创建目录: 注意:路径基名方为命令的作用对象;基名之前的路径必须得存在; -p:自动按需创建父目录; -v:显示创建过程; -m 参数:直接给定所需权限; 例子:问题:创建 /tmp/x ; /tmp/x/y1 ; /tmp/…

    Linux干货 2016-12-11
  • 优秀程序员的十个习惯

    在这个世界上,有数百万的人热衷于软件开发,他们有很多名字,如:软件工程师(Software Engineer),程序员(Programmer),编码人(Coder),开发人员(Developer)。经过一段时间后,这些人也许能够成为一个优秀的编码人员,他们会非常熟悉如何用计算机语言来完成自己的工作。但是,如果你要成为一个优秀的程序员,你还可以需要有几件事你需…

    Linux干货 2015-04-01
  • 马哥教育网络班20期+第3周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 who |cut -d " " -f1 |sort -u 2、取出最后登录到当前系统的用户的相关信息。 [root@localhost ~]# who|tai…

    Linux干货 2016-06-29
  • 关于Linux文件系统的的简单理解和认识-20160730

    关于Linux文件系统的的简单理解和认识 关于文件系统的运作,这与操作系统带的档案数据有关。例如Linux操作系统的档案权限(rwx)与文件属性(拥有者,群组,时间参数等)。文件系统通常会将这两部分的数据分别存放在不同的区块,权限与属性放置到inode中,至于实际数据则放置到date block区块中,另外,还有一个超级块区(super block)会记录整…

    Linux干货 2016-08-04
  • 运维工程师技能需求排行

    这是我今天在拉勾网搜索运维,翻完了4四页也招聘信息之后得到的,我的目的是想要看看之后的学习,哪个更应该成为重点,有些在我意料之中,有些还真的没想到,算是努力了一个小时的收获吧,分享给大家。
    注意:其中的看法仅代表个人观点,很多都是依靠我自己的学习经验和工作经验累积的

    Linux干货 2017-12-12