1.学习目标

  • 掌握什么是负载均衡及负载均衡的作用和意义。
  • 了解lvs负载均衡的三种模式。
  • 了解lvs-DR负载均衡部署方法。
  • 掌握nginx实现负载均衡的方法。
  • 掌握lvs+nginx负载均衡拓扑结构。

2.负载均衡的相关技术

  • 基于DNS的负载均衡
    • 优点:实现简单、实施容易、成本低、适用于大多数TCP/IP应用
    • 缺点: 负载分配不均匀,DNS服务器将Http请求平均地分配到后台的Web服务器上,而不考虑每个Web服务器当前的负载情况;如果后台的Web服务器的配置和处理能力不同,最慢的Web服务器将成为系统的瓶颈,处理能力强的服务器不能充分发挥作用;可靠性低,如果后台的某台Web服务器出现故障,DNS服务器仍然会把DNS请求分配到这台故障服务器上,导致不能响应客户端;变更生效时间长,如果更改NDS有可能造成相当一部分客户不能享受Web服务,并且由于DNS缓存的原因,所造成的后果要持续相当长一段时间(一般DNS的刷新周期约为24-72小时)。
  • 基于四层交换技术的负载均衡
    • 优点:性能高、支持各种网络协议
    • 缺点:对网络依赖较大,负载智能化方面没有7层负载好(比如不支持对url个性化负载),F5硬件性能虽高但成本也高,对于一般小公司就只能望而却步了。
  • 基于七层交换技术的负载均衡
    • 优点:对网络依赖少,负载智能方案多(比如可根据不同的url进行负载)
    • 缺点:网络协议有限,nginx和apache支持http负载,性能没有4层负载高

3.什么LVS?
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspLVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

4.lvs实现负载的三种方式
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbspLVS中的调度方法有三种 :NAT(Network Address Translation网络地址转换)、TUN(tunnel 隧道)、DR(direct route 直接路由)

  • LVS-DR 模式
    * 请求由LVS接受,由提供服务的服务器(后端服务器,例如PHP,Tomcat等)直接返回给用户,返回的时候不经过LVS。
    * DR模式下需要LVS服务器和后端服务器绑定同一个VIP, 一个请求过来时,LVS只需要将网络帧的MAC地址修改为某一台后端服务器的MAC地址,该包就会被转发到相应的后端服务器处理,注意此时的源IP和目标IP都没变,后端服务器收到LVS转发来的包,发现MAC是自己的,发现IP也是自己的,于是这个包被合法地接受,而当后端服务器返回响应时,只要直接向源IP(即用户的IP)返回即可,不再经过LVS。
    * DR模式下,lvs接收请求输入,将请求转发给后端,由后端输出响应给用户,性能非常高。
    * 都有一块网卡连在同一物理网段上,且真实服务器网络设备或设备别名不作 ARP 响应。
  • LVS-NAT模式
    * NAT(Network Address Translation)是一种外网和内网地址映射的技术。NAT模式下,LVS需要作为后端服务器的网关,当网络包到达LVS时,LVS做目标地址转换(DNAT),将目标IP改为后端服务器的IP。后端服务器接收到包以后,处理完,返回响应时,源IP是后端服务器IP,目标IP是客户端的IP,这时后端服务器的包通过网关(LVS)中转,LVS会做源地址转换(SNAT),将包的源地址改为VIP,对于客户端只知道是LVS直接返回给它的。
    * NAT模式请求和响应都需要经过lvs,性能没有DR模式好。
  • LVS-TUN模式
    * TUN模式是通过ip隧道技术减轻lvs调度服务器的压力,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大,负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量。相比NAT性能要高的多,比DR模式的优点是不限制负载均衡器与RS在一个物理段上。但是它的不足需要所有的服务器(lvs、后端)支持"IP Tunneling"(IP Encapsulation)协议。

5.IPVS调度器实现了如下八种负载调度算法:

  • 轮叫(Round Robin)
    * 调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

  • 加权轮叫(Weighted Round Robin)
    * 调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

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

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

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

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

  • 目标地址散列(Destination Hashing)
    * "目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

  • 源地址散列(Source Hashing)
    * "源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。

具体测试请参考该连接:https://blog.51cto.com/3241766/2094750

0a1271132c6bb18e67be8172fc98c3aaacee2a31.jpg


一个热爱学习的运维