轮询(默认)

upstream backend {
    server backend1.example.com:12345;
    server backend2.example.com:12345;
}

轮询说明

  • 轮询是默认的负载均衡方法
  • 每个连接按时间顺序逐一分配到不同的后端服务器

轮询原理: 轮询是一种简单的负载均衡算法,每个连接按时间顺序逐一分配到不同的后端服务器。轮询算法的优点是简单、公平,缺点是不能根据后端服务器的负载情况分配连接。

最少连接

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

最少连接说明

  • 最少连接负载均衡方法将连接分配到当前连接数最少的后端服务器
  • 适用于长连接场景

最少连接原理: 最少连接是一种基于后端服务器连接数的负载均衡算法,将连接分配到当前连接数最少的后端服务器。最少连接算法的优点是可以根据后端服务器的负载情况分配连接,缺点是需要维护后端服务器的连接数。

哈希

upstream backend {
    hash $remote_addr;
    server backend1.example.com:12345;
    server backend2.example.com:12345;
}

哈希说明

  • 哈希负载均衡方法根据客户端 IP 地址的哈希值分配连接
  • 同一客户端的连接会分配到同一个后端服务器
  • 适用于会话保持场景

哈希原理: 哈希是一种基于客户端 IP 地址的负载均衡算法,根据客户端 IP 地址的哈希值分配连接。哈希算法的优点是可以实现会话保持,缺点是不能根据后端服务器的负载情况分配连接。

随机

upstream backend {
    random two least_conn;
    server backend1.example.com:12345;
    server backend2.example.com:12345;
}

随机说明

  • 随机负载均衡方法随机选择两个后端服务器,然后使用最少连接算法选择一个
  • 适用于高性能场景

随机原理: 随机是一种高性能的负载均衡算法,随机选择两个后端服务器,然后使用最少连接算法选择一个。随机算法的优点是性能高,缺点是不能保证连接的公平性。

方法对比

方法说明适用场景优点缺点
round_robin轮询通用简单、公平不能根据后端服务器的负载情况分配连接
least_conn最少连接长连接可以根据后端服务器的负载情况分配连接需要维护后端服务器的连接数
hash哈希会话保持可以实现会话保持不能根据后端服务器的负载情况分配连接
random随机高性能性能高不能保证连接的公平性

负载均衡算法选择

选择负载均衡算法时,需要考虑以下因素:

  1. 后端服务器性能:如果后端服务器性能不同,可以使用权重或最少连接算法
  2. 会话保持:如果需要会话保持,可以使用哈希算法
  3. 连接类型:如果是长连接,可以使用最少连接算法
  4. 性能要求:如果对性能要求高,可以使用随机算法