Eternally Eternally

LVS+Nginx负载均衡

in 技术向,Linux read (185) 文章转载请注明来源!

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?
        LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。

4.lvs实现负载的三种方式
        LVS中的调度方法有三种 :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

jrotty WeChat Pay

微信打赏

jrotty Alipay

支付宝打赏

文章二维码

扫描二维码,在手机上阅读!

本文基于《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
文章链接:https://www.97hjh.cn/%E6%8A%80%E6%9C%AF%E5%90%91/20200511/study-day1.html (转载时请注明本文出处及文章链接)

技术向Linux
发表新评论
仅有 1 条评论
  1. Eternally
    Eternally本文作者 10Chrome 81
    回复

    新文章,欢迎讨论

博客已坚挺运行
© 2020 本博客模板由 Eternally 基于YoDu二次开发 By 又拍云粤ICP备17076045号
前篇 后篇
雷姆
拉姆