Nginx:负载均衡(策略讲解+配置举例)

负载均衡是反向代理内容的延伸。(反向代理可查看前文)

负载均衡

负载均衡(Load Balancing)是一种在多个计算资源(如服务器、网络链接、硬盘驱动器等)之间分配工作负载的技术,旨在优化资源使用、最大化吞吐量、最小化响应时间,并避免过载任何单一资源。

作为网站和网络应用基础设施的关键部分,负载均衡器可以在各个服务器间分配网络流量和请求,从而增加了体系结构的可靠性和效率。

负载均衡可以分为以下几种类型:

  • 硬件负载均衡:是专门的物理设备,通常配置有高性能、高可靠性的硬件,并内置专用的负载均衡软件。硬件负载均衡器在处理大量的网络流量方面表现出色,但硬件和维护成本都较高。
  • 软件负载均衡:是一个运行在通用服务器硬件上的程序。相比硬件负载均衡,软件负载均衡的优势在于弹性、可扩展性以及总体拥有成本较低。但对于高流量的网站而言,软件负载均衡可能无法提供硬件负载均衡器那样的处理能力。
  • 全局负载均衡:对于部署在全球各地的服务,全局负载均衡器会根据地理位置、服务器健康状况和其他因素,决定将用户的请求引导到哪个服务器或数据中心。

主要的负载均衡算法有轮询(Round Robin)、最少连接(Least Connections)以及源地址哈希(IP Hash)等。

Nginx的负载均衡

负载均衡策略
  • Round Robin(轮询):默认的负载均衡算法是轮询,每个请求按照时间顺序逐一分配到不同的后端服务器,如果服务器宕机,能自动剔除。
  • Weight(权重):可以设置权重来进行负载均衡。
    • 如:upstream backend { server backend1.example.com weight=3; server backend2.example.com; server backend3.example.com; },可以把3/5的请求转发到backend1,每个1/5的请求转发到backend2和backend3。
    • 参数:
      • backup : 当其他非 backup 的服务器状态为 down 或者忙的时候(当前请求数量超过了最大连接数),请求会转发到 backup 服务器上。
      • down : 标记当前服务器暂时不参与负载。
      • weight : 默认为 1,权重越高,分配的请求量越多,权重为0表示临时标记 server 不参与负载均衡。
  • IP Hash: IP 的 hash 结果分配,这样来自同一 IP 的访客固定访问一个后端服务器,适用于 session 的情况;但是很少用这种方式去保持会话,例如我们当前正在使用wifi访问,当切换成手机信号访问时,会话就不保持了。(事实上要保持session最好使用一个额外的服务器,如spring session或redis来存储session。)
  • Least Connections(最少连接):最少连接方式是把新的请求分配到当前连接数最少的服务器,比较适合请求处理时间较长,且处理性能差异较大的后端服务器;但这种方式也很少使用,因为连接少,可能是由于该服务器配置较低,刚开始赋予的权重较低。
  • URL Hash(需要第三方插件):按照 access URL 的 hash 结果进行负载均衡,然后把访问相同 URL 的请求定向到同一台后端服务器,适用于服务器缓存时提高效率。
  • Fair(需要第三方插件):根据后端服务器响应时间转发请求,这种方式也很少使用,因为容易造成流量倾斜,给某一台服务器压垮。
举例

权重举例:

upstream httpds{
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com weight=10 down; #down表示不参与负载均衡
    server backend4.example.com weight=10 backup; #backup表示是备用服务器,没有服务器可用的时候使用
}

least_conn举例:

upstream backend {
  least_conn;
  server backend1.example.com;
  server backend2.example.com;
}

ip_hash举例:

upstream backend {
  ip_hash;
  server backend1.example.com;
  server backend2.example.com;
}

另外nginx也可以使用LUA脚本配置复杂的计算逻辑,将在后续讲解。

你可能感兴趣的:(nginx学习,nginx,负载均衡,运维)