ITPub博客

首页 > 数据库 > 数据库开发技术 > 浅谈负载均衡F5和Nginx的适用场景

浅谈负载均衡F5和Nginx的适用场景

原创 数据库开发技术 作者:小南瓜开发平台 时间:2024-10-22 22:45:08 0 删除 编辑

一、什么是负载均衡(Load balancing)

在网站创立初期,我们一般都使用单台机器对台提供集中式服务,但随着业务量越来越大,无论性能还是稳定性上都有了更大的挑战。这时候我们就会想到通过扩容的方式来提供更好的服务。我们一般会把多台机器组成一个集群对外提供服务。然而,我们的网站对外提供的访问入口都是一个的,比如。那么当用户在浏览器输入 的时候如何将用户的请求分发到集群中不同的机器上呢,这就是负载均衡在做的事情。

当前大多数的互联网系统都使用了服务器集群技术,集群即将相同服务部署在多台服务器上构成一个集群整体对外提供服务,这些集群可以是 Web 应用服务器集群,也可以是数据库服务器集群,还可以是分布式缓存服务器集群等。

在实际应用中,在 Web 服务器集群之前总会有一台负载均衡服务器,负载均衡设备的任务就是作为 Web 服务器流量的入口,挑选最合适的一台 Web 服务器,将客户端的请求转发给它处理,实现客户端到真实服务端的透明转发。


二、负载均衡有哪些类型

负载均衡就是一种计算机网络技术,用来在多个计算机(计算机集群)、网络连接、CPU、磁碟驱动器或其它资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。

负载均衡机制的实现方式有多种,其中最常用的是四层和七层负载均衡:

  • 二层负载均衡:负载均衡服务器对外提供一个VIP(虚IP),集群中不同的机器采用相同IP地址,但机器的MAC地址不一样。当负载均衡服务器接受到请求之后,通过改写报文的目标MAC地址的方式将请求转发到目标机器实现负载均衡。

  • 四层负载均衡:工作在OSI模型的传输层,传输层只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。四层负载均衡服务器在接受到客户端请求后,通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。

  • 七层负载均衡:工作在OSI模型的应用层,应用层协议较多,常用HTTP、Radius、DNS等。七层负载均衡可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容,比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。

比如同一个 Web 服务器的负载均衡,除了根据 IP 加端口进行负载外,还可根据七层的 URL、浏览器类别、语言来决定是否要进行负载均衡。


三、关于Nginx

Nginx是一个高性能的HTTP和反向代理web服务器,同时也是一个IMAP/POP3/SMTP代理服务器。它既可以作为独立的web服务器,也可以用作反向代理、负载均衡器和缓存。

基本策略

  1. 轮询(默认)

  • 每个请求按时间顺序逐一分配到不同的后端服务器。

  • 如果后端服务器宕机,Nginx会自动剔除故障服务器,使用户访问不受影响。

  • 此策略适合服务器配置相当、无状态且短平快的服务使用。

  • 权重(weight)

    • 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

    • 权重越高,分配到需要处理的请求越多。

    • 可以在主从情况下设置不同的权值,达到合理有效地利用主机资源的目的。

    高级策略

    1. IP哈希(ip_hash)

    • 根据客户端IP地址的哈希值将请求分发到同一台后端服务器上。

    • 这样可以确保每个访客固定访问一个后端服务器,解决session不能跨服务器的问题。

    • 此策略适合有状态服务,如需要保持会话连续性的应用。

    • 在Nginx版本1.3.1之前,不能在ip_hash中使用权重(weight),且ip_hash不能与backup同时使用。

  • 最少连接(least_conn)

    • 把请求转发给连接数较少的后端服务器。

    • 轮询算法是把请求平均地转发给各个后端,使它们的负载大致相同。但有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn方式可以达到更好的负载均衡效果。

    • 此策略适合请求处理时间长短不一造成服务器过载的情况。

  • Fair(第三方)

    • 根据后端服务器的响应时间来分配请求,响应时间短的优先分配。

    • Nginx本身不支持fair算法,如果需要这种调度算法,则需要安装upstream_fair模块。

  • URL哈希(第三方)

    • 按访问URL的哈希结果来分配请求,使每个URL定向到同一个后端服务器。

    • 这可以进一步提高后端缓存服务器的效率。

    • Nginx本身不支持url_hash算法,如果需要这种调度算法,则需要安装Nginx的hash软件包。

    会话保持策略

    1. 基于IP哈希的分发

    • 如前所述,使用ip_hash指令可以实现基于客户端IP地址的哈希分发,从而保持会话的连续性。

  • 第三方模块

    • 如ngx_http_sticky_module,提供了更灵活的会话保持机制,可以根据cookie来实现会话保持。

  • Session持久化存储

    • 如果应用支持将session数据存储在共享存储(如Redis、Memcached等)中,那么即使请求被分发到不同的后端服务器,也能获取到正确的session数据,从而实现跨服务器的会话保持。

       优点

      • 正则规则强大灵活:工作在网络的7层之上,可以针对HTTP应用做一些分流的策略,比如针对域名、目录结构等。其正则规则比HAProxy更为强大和灵活。

      • 网络稳定性依赖小:Nginx对网络稳定性的依赖非常小,理论上只要能ping通就能进行负载功能。

      • 安装配置简单:Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。

      • 承担高负载压力:可以承担高负载压力且稳定,在硬件不差的情况下一般能支撑几万次的并发量。

      • 故障转移:Nginx可以通过端口检测到服务器内部的故障,比如根据服务器处理网页返回的状态码、超时等,并且会把返回错误的请求重新提交到另一个节点。

      • Web应用服务器:Nginx也是功能强大的Web应用服务器,LNMP架构在高流量的环境中稳定性也很好。

      • 反向代理加速器:Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可考虑用其作为反向代理加速器。

      • 静态网页和图片服务器:Nginx可作为静态网页和图片服务器,性能优异。


        缺点

        • 协议支持有限:Nginx仅能支持HTTP、HTTPS和Email协议,适用范围相对较小。

        • 健康检查方式有限:对后端服务器的健康检查,只支持通过端口来检测,不支持通过URL来检测,也不支持Session的直接保持(但能通过ip_hash来解决)。

      四、关于F5负载均衡

      F5是业界典型的硬件负载均衡设备之一,F5的负载策略主要体现在其负载均衡器上,这是一种高性能的硬件负载均衡解决方案,通过智能地分配用户请求到后端服务器集群中的多个节点,实现负载均衡,从而提升整体应用的性能、可靠性和可扩展性。

      负载均衡算法

      F5负载均衡器支持多种负载均衡算法,以确保流量能够均匀、高效地分发到后端服务器上。这些算法包括:

      1. 轮询(Round Robin):按顺序将请求依次分配给每台服务器。

      2. 最小连接(Least Connections):将新的连接分配给当前连接数最少的服务器,以平衡各服务器的负载。

      3. 基于资源的(Resource Based):根据服务器的CPU、内存等性能指标进行分配,以优化资源利用。

      4. 基于IP散列(IP Hash):根据源或目的IP地址的散列结果分配流量,以保持会话的一致性。

      会话保持机制

      为了保证同一用户的请求能够被送往同一后端服务器,F5提供了会话保持功能,也称为会话亲和性或粘性会话。这包括:

      1. 基于源地址的会话保持:根据请求的源IP地址进行会话保持。

      2. 基于Cookie的会话保持:在HTTP请求中插入或检查Cookie来实现会话保持。

      健康检查与故障切换

      F5负载均衡器具有强大的健康检查机制,能够定期检查后端服务器的健康状态。如果发现某台服务器不健康,F5将停止向该服务器发送新的请求,并将流量重定向到其他健康的服务器,从而确保应用服务的高可用性。这一机制包括:

      1. 服务器监控:通过ICMP包对后台服务器的IP地址进行检测,确认服务器是否在线。

      2. 服务端口检查:通过TCP包对后台服务器的服务端口进行检测,确认服务是否可用。

      3. 扩展内容查证(ECV):一种复杂的服务检查,用于确认应用程序能否对请求返回对应的数据。

      4. 扩展应用查证(EAV):用于确认运行在某个服务器上的应用能否对客户请求作出响应。

      SSL卸载

      F5负载均衡器支持SSL卸载功能,即在负载均衡器上直接处理SSL加密和解密操作,然后将解密后的明文数据发送给后端服务器。这样不仅可以减轻后端服务器的计算负担,还可以提高数据传输的安全性。

      智能流量分发策略

      F5负载均衡器能够基于多种因素进行智能的流量分发,包括服务器的负载情况、响应时间、连接数等。这使得F5能够根据实时的网络状况和应用需求,动态地调整流量分配策略,以优化整体性能。

      • 优点

        • 性能强劲:硬件负载均衡设备性能强劲,远超常见的软件负载均衡器。

        • 功能全面:全面支持各层级的负载均衡,支持全面的负载均衡算法。

        • 稳定性高:商用硬件负载均衡经过了良好的严格测试,经过大规模使用,稳定性高。

        • 安全防护:具备防火墙、防DDoS攻击等安全功能,以及支持SNAT功能。

      • 缺点

        • 价格昂贵:硬件负载均衡设备价格非常昂贵,一般只有大型公司才会使用此类设备。

        • 扩展性差:硬件负载均衡设备无法进行扩展和定制,灵活性相对较低。



      原文作者:小南瓜开发平台;如有侵权,请联系管理员删除。

      请登录后发表评论 登录
      全部评论

      注册时间:2020-08-21

      • 博文量
        209
      • 访问量
        89499