手记-LVS概述

用到最多的是:NAT、DR。DR模式居多。
如何配置使用LVS软件的功能。以及通过LVS搭建负载
均衡集群的时候,有:NAT、DR、TUN3个模式。
NAT模式:最简单的是:NAT模式,支持的节点数最
少,10台左右。

DR模式:最实用的是:DR模式,并且能支持100台左右
的节点主机。用的最多,实现起来简单,也使用。
DR模式下的VIP可以是内网地址,也可以是公网地址。
比较常见的是私网地址IP。DR模式下:VIP是虚拟出来的。
TUN模式:如果对地理位置有特殊需求,或则实现互联网上的镜像服务器,可以通过TUN模式来搭建一种负载均衡集群。
是一种隧道模式,不是所有主机都支持。实现的是:能够让我们把网络上的节点主机利用起来,安全性一般。用到的一般。


负载均衡工作模式:
     1、NAT模式
     2、TUN模式
     3、DR模式

集群的定义:
Cluster,集群,群集
集群是一组协同工作的服务集合。对与外界用户来说,集群就是一个独立的服务实体,但实际上,在集群的内部,有2个或2个以上的服务实体在协调、配合完成一系列的工作。

集群的类型:
负载均衡(Load Balancer)集群
  提供抗并发的访问能力。

高可用(High Available)集群
  提供更好的访问可靠性。

高性能运算(High Performance Computer)集群
  提供更好的运算能力

四层与七层:
  四层类似于:用户直接去银行的排号机拿了一个号码,从号码去对应到窗口去办理业务。
  七层类似于:大堂经理,用户一进银行的时候去询问用户需要办理什么样的业务。根据用户提出的不同需求,再将用户分配到不同的窗口。
   这样效率更高一些。


负载调度器:
  Director Server能够将预先定义好的算法,将用户的访问转发到后排服务器的节点上,

共享存储:Shared  Storage
  如:NFS     

服务器池:Server Array
   服务器池中的节点主机:Real Server:给用户提供网站的访问或数据库的访问等。

以上3个基本就实现了一个负载均衡集群。


负载调度器的实现方式:
  1、硬件实现。---几十万到一百万。
     将一些核心的功能做到了芯片中。
  2、软件实现负载均衡
     1、LVS ---传输层
       四层负载调度器
       不需要解析高层的协议,工作少性能高。
     2、NGINX ---(应用层,表示层,会话层)
       七层负载调度器
     3、HAPROXY ---(应用层,表示层,会话层)
       七层负载调度器
四层:不需要解析高层的协议,工作少性能高。需要通过IP或端口进行转发,
七层:效率次于四层调度器,可以支持很多的高级特性。如:可以通过网站的高级应用,基于网站的负载均衡集群,可以通过域名,通过网站特性,或则页面内容等来做负载均衡。
需要用到应用层中的东西,需要用到的检测,封装的数据包更多,从而效率降低一些。

四层和七层负载调度器:主要作用:用来将用户提交的请求,转发到服务器池中的节点主机上,主要做了一个交换的工作。也可以称这俩种调度器为:四层交换机  或  七层交换机

四层与七层交换机的区别:
  1、触发条件不同
     四层:仅等于一个转发器。
     四层:传输层的数据包封装的时候,主要封装的是:IP以及端口。也就是四层交换机是通过IP加端口的方式进行数据包的转发( 这里的网络层用到的IP不是服务器上的真是IP,而是一个虚拟IP
     当负载调度器收到一个用户请求的时候(只要IP和端口符合设置的规则就会转发到后排节点主机上),会检查这个用户请求的是哪个IP地址,以及要访问的是哪个端口,然后在根据IP和端口,再决定是否对用户的请求进行转发,这么个工作原理。
     七层:根据用户提交过来的请求,里面所附带的一些高级特性,来实现转发,如:URL,页面内容等。通过这种方式来做判断,


2、实现原理不同
     四层:仅等于一个转发器。
     四层负载调度器:在接收到用户请求的时候,处理方式是不一样的。如:四层的:当用户发起一次TCP,SYN(建立连接)的请求,当服务器收到以后会检测这个请求,并且将这个请求按照预先设置好的规则,转发到后排的节点主机上,会直接将用户的请求转发,也就是:客户端建立TCP连接的不是中间的负载调度器,而是后排指定的节点主机建立TCP连接,这个过程中负载调度器只起到了一个转发的功能,
   
   七层:更像一个代理服务器的作用,起到一个代理的作用。先代理后端设备与客户端先建立连接,然后再作为发起者与后排服务器再建立一次连接。  
   七层负载调度器:当收到用户的请求时,根据请求的一些高级特性,来决定是否为其转发,或则是转发到后排的节点主机1,还是节点主机2。
   七层需要先将用户提交的数据包  报文拆开,看里面具体要求的特性是什么,符合我的条件才进行转发,所以需要先跟客户端建立一次TCP(三次握手建立一次)连接,建立完连接以后就能够拆分数据包,查看数据包 包含了哪些信息及高级特性,然后根据这些特性,决定再将这个请求转发到后排的节点主机1,还是节点主机2。在做转发的时候,还需要跟后排的服务器再建立一次TCP连接,
     所以在七层的负载调度环境中:负载调度器,需要分别根客户端,以及后排的服务器节点,分别建立一次TCP连接,总共要建立俩次。


  3、应用场景不同
     四层调度器:主要应用以TCP应用为主,因为是工作在传输层的。如:可以基于CS架构开发类似于:OA,ERP,这样的系统,四层在这种环境下工作的如鱼得水。
      七层负载调度器:主要应用场景:以http协议为主,分别与客户端与后端设备建立连接,因为七层所支持的特性,可以检查网站请求里面所包含的一些高级属性,如:当有一个用户想要访问负载均衡器后的节点主机时,七层负载调度器可以判断用户请求的是什么,如果用户请求的是图片类的,可以转发到后排专门负责图片的服务器,并且可以在负载调度器与图片服务器之间加一个缓存机制,来提高用户的访问速度。如果只是访问一个纯文字类的请求的话,可以将用户这个请求转发到后排负责文字的节点主机上来处理用户的请求,并且也可以在调度器与文字服务器之间添加一个功能模块,如:压缩的功能。让用户的传输效率更高。这些都是四层所没有的功能。
   只有支持应用层的调度器才可以根据用户的请求,判断后排由哪个节点主机来与用户建立连接。
   当网站支持中文、英文网站的时候,七层可以根据用户提交的请求,根据访问域名的方式,来判断用户使用什么样的语言。如果是中文,转发到中文节点主机,如果是英文,转发到英文节点主机。这样更人性化的解决用户的需求      


4、安全性不同
     四层:只根据IP和端口作为转发的标准,如果遭到SYN的攻击,四层会将其对待为正常的请求,从而转发到后端的节点主机上。也就是会将请求全部转发到后端。 所以四层没有具备抗DOS,DDOS攻击的能力。

     七层:因为与四层相比,七层建立连接的方式不同,当收到客户端请求时,会先与负载调度器建立连接,在建立连接的过程中,可以在负载调度器的应用层设置很多的侧率,来防止和过滤我们特定的一些报文信息。阻止DOS, DDOS攻击的可能性,将发送过来的数据包都过滤掉,直接丢弃不处理,从而大大提高了安全性,但是这样需要分析数据包,会占用大量的性能,所以七层调度器本身必须具备强大的抗攻击能力,否则,后排的节点主机没down,而负载调度器用来防攻击造成资源浪费,而down掉,调度器down比后面的节点主机down,更严重。
 
   SYN FLOOD攻击:SYN泛攻。通过这种攻击耗尽服务器上的资源,因为对服务器来说当收到一个用户的请求,一定会处理掉,但是当请求过多的时候,就会在服务器端出现排队的情况,大量消耗服务器端的资源。属于典型的:DOS、DDOS的攻击方式。

  DOS攻击:denial  of service(拒绝服务试攻击) 
     侧重操作系统,利用服务的漏洞,将操作系统崩溃,死机,无法提供访问等。 相当于买火车票时,有人烧了火车站。  
  DDOS攻击:distributed  denial  of service(分布式拒绝服务试攻击)     
     通过僵尸主机,将曾经入侵过的,通过这些僵尸主机向目标主机发送大量的看似合法的网络包,从而造成网络阻塞,或系统资源耗尽,而导致拒绝服务。 相当于买火车票时被黄牛占了窗口从而买不到票。

四层,七层用软件实现负载调度器的一种方式,而四层的一些特性,如:转发速度高,功能简单,效率高,所以在生产环境和企业中,基于四层的负载调度器更多一些。如硬件的F5调度器也是属于四层。


LVS概述: Linux虚拟服务器 Linux Virtual Server
  LVS是一个能够实现,负载均衡集群的一种软件的解决方案。
  LVS是一个四层的负载调度器,基于四层的负载调度器,能够根据用户提交的请求,根据请求的IP和端口,判断及将这个请求转发到后排的节点主机上,

  调度器根据与后排节点主机的通信方式不同,集群的组织架构的不同,以及内部对realserver配置的IP地址的不同,可以将LVS搭建出来的负载均衡集群分成多种不同的类型:
3种工作模式;
模式1、NAT: 地址转换模式。--- 负载调度器本身必须是Linux系统
       所有数据都要经过负载调度器。这种模式负载调度器的压力很大,这种负载调度器只能在后排带10台realserver(10台是理想主机数)。实现小型的负载均衡集群没有问题。
需要注意的事项:
 1、带的realserver的数量很少。
 2、集群的节点,包括负载调度器,后排的realserver都必须在一个物理网络中,必须能连通。
 3、负载调度器作为网关存在的。所以,所有的realserver的网关都必须指向DIP(负载调度器内网口IP)。
    RS的网关必须位于客户端和RS之间
 4、RS可以使用任意操作系统
 5、RS网关必须设置为 director IP。

模式2、DR: 直接路由模式(所有设备上有多个IP地址,记录着VIP(集群IP地址)的地址)。 在生产环境中用的最多的,搭建负载均衡,用LVS实现负载均衡集群的一种方式。 用到ARP代理
    负载均衡器不再作为网关存在,取而代之的是路由器。用户提交的请求交给路由器,路由器转发给内网 的负载调度器,再由负载调度器,将接收到的用户请求,按照一定的规则,分发给位于服务器池里面的 RS。readlserver处理完用户请求后,再将处理结果直接通过路由回馈给用户。
    最大的特点: 负载调度器不再作为网络的唯一出口。会很大降低负载调度器的压力。处理的数据量较少, 可以带100T台左右的realserver是没有问题的。比NAT提高了10不止。 
   最大的有点:很大减轻了负载均衡器的压力,可以支持更多的RS。
    数据走向: 用户的请求首先到路由,路由将这个请求分发给负载调度器,负载调度器再根据里面的规则设置,然后按照一定的规则分发给后排的realserver。
   当入口路由器要查找目的IP时,需要发送ARP广播来确定主机。 需要在负载均衡器上做ARP代理。
注意事项

1、负载均衡器必须和RS必须在一个网络中。

2、RS可以用私网IP或公网IP。会产生一些费用,好处:万一负载调度服务器出现了故障,可以直接将节点主机IP提交给客户端。告诉客户端访问这个域名或IP。客户端在提交请求的时候,这个请求到达路由器以后,可以直接被路由其分配到这个有公网IP的节点主机上。不用走负载调度器,这个有公网IP的节点主机依然可以给客户端提供访问。

  如果分配了公网IP,客户端可以直接来维护这台主机,需要在路由器上做相应的映射。

3、负载均衡器不再作为网关存在,取而代之的是路由器。不用承担用户出站入站的所有请求,负载调度器只负责入站请求,分配给节点主机后,节点主机处理完后直接通过路由回馈给用户。

4、RS网关不能使用 director.应该是网络出口的位置,也就是:路由器的内网口地址。

ARP代理:

 场景描述: 有 A(10.0.0.2)-->B-->C(10.0.0.4) 3台主机在一个网段,但是现在如果A ping C是ping不同的,这时候就需要在B上做arp的代理,(B 有2个网卡 eth0:10.0.0.1  eth1:10.0.0.3)

  arp -i eth0 -s 10.0.0.4 00:0C:29:33:87:82 pub

#在eth0 网卡上设置arp代理,接收发往10.0.0.4的数据包

  arp  -n

#查询arp代理。

  route  add  -host  10.0.0.4  eht1

#去往 10.0.0.4 的数据包从 eth1 出去。添加的是单机的路由。

设置回应的数据包可以返回:

  arp  -i  eth1  -s 10.0.0.2 00:0C:29:94:19:FB pub

#在eth1上设置代理,接收发往 10.0.0.2 的数据包

  route  add  -host  10.0.0.2 eth0

#所有发往 10.0.0.2的数据包都从 eth0出去

设置静态路由:设置数据包的走向:

     route  add   -net   30.0.0.0/24   dev eth1


模式3、TUN: 隧道模式
    与DR模式负载调度器都不作为网络的出口,都只是接收用户的请求,然后将用户的请求,分配给后排所有的RS。当RS处理完用户请求后直接将结果反馈给用户,而不去找负载调度器。
    所有设备都暴漏给公网。在搭建集群的时候,不希望地理位置成为搭建集群的限制条件。可以拿各个地方的闲置主机来搭建一个集群,这种集群就需要用到 TUN。
    如何将处在本地的director,将用户的请求分发到不同地区的RS?
  :需要一个二次封装的技术。 设备过了路由以后,就可以对它进行二次封装 ,可以在原数据包的IP包头(IP首部的基础上再包一个IP首部):这种二次封装的技术叫做:隧道技术。
数据包封装过程:
   第一次封装S:CIP  D:VIP  2次封装:S:DIP D:RIP2,发送到节点主机后,对应的节点主机会将二次封装的首部拆掉:1次封装:S:CIP  D:VIP ;然后将数据解析:S:VIP  D:CIP,这里的VIP是 根DR配置的一样,每台主机都有多个IP,也就是知道自己集群IP(VIP)。
优点:
   不受地理位置限制。不像NAT,DR一样,必须放在一个机房或则一个物理网络里。
注意事项:
   1、所有节点都要有公网IP,RS并且必须配置在RIP上。因为只有是公网IP的时候,才能被director访问到。
   2、负载调度器只负责入站请求
   3、RS一定不能使用负载调度器作为其默认网关。
   4、负载调度器必须支持隧道功能。
3种工作模式;
   

  
  核心组件:  ipvsadm、ipvs
     ipvsadm:位于用户空间,管理员可以操作的模块,通过ipvsadm可以修改位于内核空间的ipvs这个模块
     ipvs:位于内核空间的一个模块,用来提供最核心的功能。起到一个钩子函数的作用。强行将数据包抢夺过来。
     ipvs:会查看每个数据包的报文,如果符合规则转发,如果不符合转发规则则根据IP和端口号转发到本机端口对应的服务上。 有选择性的转发。

相关概念:
     Director(负载调度器)
     RealServer(RS:服务器池中的真是的节点主机)
     CIP(客户端IP):客户端IP
     DIP(director IP):负载调度器内网口IP
     VIP(virtual IP):虚拟IP 集群IP
     RIP(realserver IP)服务器节点IP
一个负载调度器,可以同时接管多个集群。因为单台服务器的抗压能力有限,所以一般,一个负载调度器,只连接一个集群。 也就是:同时调度多个集群页是没有问题的。


负载调度器算法:LVS负载调度器---十种算法
    根据算法本身进行调度,不考虑服务器的状态。也就是不考虑RS的性能,不管能否响应用户都会转发给RS 

2种类型:
   1、静态调度算法--前2中比较简单也比较常见。
1、round robin(rr)轮训:
  将用户请求,分配给后排的服务器节点,从1开始到N结束(N是服务器池中主机节点总数),一次将用户的请求分配给后排的主机节点。
  操作起来非常简单,也是配置负载均衡中默认使用的一种算法。不用记录所有的连接状态,无状态的调度算法。不考虑服务器性能
  如果集群中节点不多或是用户访问量不大的话,用这种轮训的算法没有问题。如果并发访问量比较大的话,就必须要求所有主机的性能差不多,甚至说性能一样,这样才能用轮训的算法来做调度。    
   2、动态调度算法
2、Weight round robin(WRR)加权轮训
  也是从1开始到N结束。加了一个附带权重的轮训算法。(权重也就是优先级)
  可以根据主机的性能来设置不同的比例,从而设置接收用户请求的数量。性能好的设置一个较高的权重,从而分配到较多的用户请求。性能差的分配一个低的权重,接收较少的用户请求。

3、source hash(sh)源地址散列,或则源地址哈希的算法:
  主要用于电商网站,记录session  cookie等信息,来给用户推荐商品等。
  实现会话绑定,能够将来自同一个源IP地址的用户请求发送给同一台RS。
  特殊性:会跟中连接状态。会在负载调度器中存储一张表,这张表叫hash表:记录某个请求分配给了后排的哪个RS(节点主机)。当这个用户再提交请求的时候,负载调度器会查存储的hash表,发现将这个请求分配给RS1,会再次将这个请求分配给RS1。
  http协议,每次提交的请求都是互相独立的。执行情况和结果 与 前面的请求和之后的请求是无直接关系的,
http协议  session与cookie
  session:会话。网站内存空间里。记录了用户的连接记录。根据用户再次请求时候携带的cookie=ID,来匹配到这个用户先前访问的一些记录,从而对该用户进行一个推荐等。
  session共享机制:
     NFS:虽然简单,但是支持的并发量不大。
     数据库方式。用的比较多。
  cookie:小型文本文件。

4、destination  has(dh)目标地址散列。目标地址哈希
   这种算法的基础上:调度器与 后排RS 之间是由缓存服务器的。
   调度器会根据存储的hash表将连接先发送给缓存,如果缓存服务器没有才会响应后排的RS
   当用户1,用户2请求的资源相同的时候,为了提高缓存的命中率:希望同样资源的请求,发送给同一台服务器,目标地址是一样的。访问的是同一个目标上的同一个资源。
   这样需要牺牲调度器的资源。
   将同一个目标地址的用户请求发送给同一台RS。


2、动态调度算法。---需要考虑服务器性能与连接数

客户端与服务器建立的连接分俩种:
   1、活动连接(active)
 已经与服务器建立好了连接并且在传输数据。
   2、非活动连接(inactive)
  已经与服务器建立连接,并且数据已经传输完毕,但是还未断开。
通过判断服务器的活动连接数,从而判断服务器是否繁忙。

2-1、least-connection(LC):最少连接
  active:活动连接
  inactive:非活动连接
  active*256+inactive 得出一个值,每个节点算出来,哪个小(连接数少)就分配到哪个节点上。
  将新的用户的连接请求,分配给当前,连接数最少的服务器节点。
缺点:
  并不考虑服务器的性能,也就是当性能差的服务连接数达到瓶颈的时候,调度器仍可以分配连接到这个服务器。

2-2、weighted least-connection scheduling(WLC):加权最少连接
  (active*256+inactive)/weight  每个都算,数值小分配给那个RS。
  为性能好的主机分配较高的权重,权值越大,负责的请求就越多。
缺点:
  如果分配的权重不合理,会导致一台主机的连接数非常大。

2-3、shortest  expected delay(SED):最短期望延迟
  基于WLC算法的升级版。
  (active+1)*256/weight
缺点:
  可能会因为权值分配不合理,而出现主机空闲的状态。

2-4、never queue(NQ):永不排队
   改进的SED算法。
   (active+1)*256/weight
   当轮训完后,会根据算法看是否有主机的连接数为:0,如果为:0直接将连接转发给这台主机。

2-5、locality-based least connection(LBLC):基于局部性的最少连接
   跟静态算法的:DH算法很像,会在负载调度器中存储一张hash表。优先会找相同目标的请求,相同资源的请求,优先发到一个服务器上。
   类似DH的链接,根据请求地址发送。
   既考虑提高缓存命中率的问题,也要考虑服务器的连接数,尽可能将请求分配给空闲的代理服务器。
   

2-6、locality-based least connection with replication(LBLCR):带(可)复制的基于局部性的最少连接
   LBLC算法 + 高效缓存共享机制。
   会根据用户目标地址,发送给同一台主机。
   缓存共享机制:用户的请求到缓存服务器,发现另一台有用户的缓存信息,就会同步到本地来,而不去后排的RS响应获取用户的信息。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值