lvs–各类型的原理及实现—(原理篇)

前言:

   LVS即是linux虚拟服务器,是一个虚拟的服务器集群系统,目的是使用集群技术和linux操作系统实现一个高性能、高可用的服务器。采用IP负载均衡技术和基于内容请求分发技术,将请求负载均衡地转移到不同的服务器上执行,从而将一组服务器构成一个高性能、高可用的虚拟服务器。此篇的内容只包含两种较为常用的LVS技术,分别是LVS-NAT和LVS-DR。

一、Linux Cluster类型:

   Linux集群的三种类型分别是负载均衡集群,高可用集群和高性能集群,以下分别对这三种集群进行讲解;

   

   LB:Load Balancing,负载均衡集群;该集群用于实现将同一种应用的大量请求分散到多台主机;

   HA:High Availablity,高可用;当某一主机出现故障时,从服务器能够取而代之,为服务提供冗余性;

   HP:High Performance,高性能;组合多台计算机,可以将一个很复杂、计算量很大的问题分散到多台主机,通过多台主机联合计算,减少计算的时间;

二、负载均衡集群的调度方式:

    LB集群的简图:

    blob.png

   lvs是基于传输层(目标IP和目标端口)分发请求报文,下图是IPVS的工作原理,IPVS是工作于内核空间的netfiliter的INPUT钩子之上的框架;

   下图是DNAT的转发机制图:

 blob.png

三、LVS集群的类型详解:

  (一)LVS-NAT

     lvs-nat是一个多目标的DNAT,通过将请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和POST实现转发:

     客户端的请求报文发送到DIRECTOR的vip接口,此时源IP是CIP,目标IP是VIP,由于IPVS是工作于INPUT链的,当发现请求报文是请求某一集群服务需要向后转发时,IPVS强行改变发送流程,通过FORWARDING链将报文发送至POSTROUTING链,经由算法算出报文发往到那一台后端服务器,报文进入到后端服务器时,此时源IP地址是CIP,目标IP地址是RIP,后端服务器返回报文时,必须将将网关指向DIRECTOR的DIP,返回报文的源地址是RIP,目标地址是CIP,经过DIRECTOR后,源IP是VIP,目标IP是CIP,这个过程就是LVS-NAT的工作原理。

blob.png

LVS-NAT的特性:   

      多目标IP的DNAT,通过将请求报文中的目标地址和目标端口修改为某跳出的RS的RIP的DPORT实现转发

           (1)RIP和DIP必须在同一个IP网络,且应该使用私网地址;RS的网关指向DIP;

           (2)请求报文和响应报文必须经由Director转发;Director易于成为系统瓶颈;

           (3)支持端口映射,可修改请求报文的目标PORT;

           (4)VS必须是linux系统,RS可以是任意系统;

(二)LVS-DR

      LVS-DR是直接路由的方式,通过将请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

     下图是LVS-DR的工作原理图:

blob.png

     客户端的请求报文通过路由器、交换机将请求报文发送到DIRECTOR上,DIRECTOR通过算法将请求报文发往某一台REAL SERVER上,REAL SERVER的回应报文不再经由DIRECTOR,而是将报文直接返回到CLient上,此时回应报文的源地址为VIP,目标地址是CIP。DIRECTOR、两台REAL SERVER的IP地址都需要配置VIP地址,由于三台主机使用同一个VIP地址会发生地址冲突,所以需要将VIP地址做隐藏,DIRECTOR的VIP地址需要配置在DIRECTOR的网卡别名上,由于地址不属于网卡而是属于内核,所以无论将VIP配置在REAL SERVER的哪个网卡上,内核都会知道IP地址,从而将IP地址通告给路由器。首先需要将REAL SERVER的VIP地址配置在LO网卡的别名上,为之后隐藏VIP地址做准备。同时需要调整内核参数arp_announce和arp_ignore,从而达到隐藏VIP地址的目的。客户端此时只能将请求报文直接发往DIRECTOR,DIRECTOR对请求报文重新封装MAC,通过MAC将报文发往其中一台REAL SERVER,REAL SERVER的回应报文不经由DIRECTOR,而是直接发送到客户端。

  LVS-DR的特性:

    

  Director和各RS都得配置使用VIP;

             (1)确保前端路由器将目标IP为VIP的请求报文发往DIrector:

                    (a)在前端网关做静态绑定;

                    (b)在RS上使用arptables;

                    (c)在RS上修改内核参数以限制ARP通告及应答级别;

                           arp_announce

                           arp_ignore

             (2)RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director;

             (3)RS跟Director要在同一个物理网络;

             (4)请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client;

             (5)不支持端口映射;

    

四、IPVS的调度算法

     根据其调度时是否考虑各RS当前的负载状态,可分为静态方法和动态方法两种,静态方法是仅根据算法本身进行调度,动态方法主要根据每RS当前的负载状态及调度算法进行调度。

     静态方法:

          (1)RR:roundrobin,轮询;               

          (2)WRR:weighted RR,加权轮询;

          (3)SH:source hashing,源IP地址哈希,用于实现session sticy;

          (4)DH:destination hashing,目标IP地址哈希,将发往同一个目标地址的请求始终转发至第一次挑中的RS;

      动态方法:

          (1)LC:least connections:最少连接

          (2)WLC:weight LC 加权最少连接

          (3)SED:shortest expection delay

          (4)NQ:never queue

          (5)LBLC:locality-based LC,动态DH算法

          (6)LBLCR:LBLC with replication,带复制功能的LBLC;

   

 

原创文章,作者:因为有你,如若转载,请注明出处:http://www.178linux.com/54645

(0)
因为有你因为有你
上一篇 2016-10-27 15:18
下一篇 2016-10-27 16:10

相关推荐

  • N21第五周

    1.显示/boot/grub2/grub.cfg中以至少一个空白字符开头的行; ]# grep '^[[:space:]]\+' /boot/grub2/grub.cfg 2.显示/etc/rc.d/init.d/functions文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; ]#…

    Linux干货 2016-08-15
  • find、locate、Gnome文件查找工具

    查找命令:         locate:非实时查找         find:实时查找         Gnome:图形化搜索工具 locate: 描述:查询系统上预建的文件索引数据库/var/lib/mlocate/mlocate.db,一天更新一次更新数据库:updatedb特点:依赖于事先构建的索引。索引的构建是在系统较为空闲时自动进行(周期性任务)…

    Linux干货 2017-11-26
  • 网络班22期学习宣言

    马哥Linux运维学院 学习宣言 亲爱的小伙伴:        欢迎大家报名马哥Linux运维网络学习班,跟随马哥学习Linux技术,成就Linux大牛之梦。在这里,我们不仅可以学习到最优秀的技术课程,还可以跟着追梦的小伙伴们一起学习、一起进步。 为了督促大家一直积极认真努力的学习,请各位同学在评论区写出你的学习宣言。…

    Linux干货 2016-08-03
  • N25_第六周

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; %s@^[[:space:]]+@#&@g 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符; %s@^[[:spac:]]+@@g…

    Linux干货 2017-02-13
  • IP地址之IPv6

    一、IPv6概述   目前使用的IP地址都是IPv4版本,之所以开发出IPv6版本主要是基于以下原因:     1、IPv4地址空间不足,分配不合理;     2、IPv4头部太过于复杂;     3、使用IPv4使得路由器及主机配置复杂;     4、对于IPv4重新…

    Linux干货 2016-01-13
  • 硬链接与软链接的联系与区别

    硬链接与软链接的联系与区别 我们知道文件都有文件名与数据,这在 Linux 上被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux 中,元数据中的 inode 号(ino…

    Linux干货 2016-10-23

评论列表(1条)

  • 马哥教育
    马哥教育 2016-10-30 20:49

    文章内容上比较完整地,但是整体排版是不是太乱了点?建议多看看别人写的博客,来提升自己的写作能力哦。