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脚本配置复杂的计算逻辑,将在后续讲解。

相关推荐
荣--6 小时前
一键部署不是为了省时间 —— 它是把"买来的 PaaS"变成"自己的平台"的拐点
运维·zabbix·工程化·一键部署·平台化·边界设计
江华森6 小时前
动手实战学 Docker — 从零到集群编排完全指南
运维
Avan_菜菜1 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
SelectDB2 天前
Litefuse 开源并推出单进程轻量模式,25 秒就能跑起来的 Agent 可观测与评估平台
运维·后端·自动化运维
XIAOHEZIcode3 天前
Linux系统鼠标偏移常见原因以及修复方案
linux·运维·游戏
用户0328472220704 天前
如何搭建本地yum源(上)
运维
ping某5 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树887 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠7 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质7 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务