Nginx的负载均衡策略

个人博客地址: https://note.raokun.top 拥抱ChatGPT,国内访问网站:https://www.playchat.top

共六种: 轮询、权重、ip_hash、least_conn、fair、url_hash

1、轮询(Round Robin)负载均衡策略:这是一种基本的负载均衡策略,将请求顺序转发给每个后端服务器,每个后端服务器依次处理请求,而轮询正是按照这样的方式平均地为每个后端服务器分配请求。

http {
upstream backend {
  server backend1.example.com;
  server backend2.example.com;
  server backend3.example.com;
}

server {
  listen 80;
  server_name example.com;

  location / {
     proxy_pass http://backend;
  }
}

}

  

2、权重(Weight)负载均衡策略:通过为每个后端服务器分配不同的权重,将请求按照权重比例分配到不同的后端服务器,以实现负载均衡。例如,如果后端服务器A的权重是3,后端服务器B的权重是2,则在处理请求时,服务器A会收到3/(3+2)=60%的请求,而服务器B会收到 2/(3+2)=40%的请求。

http {
upstream backend {
  server backend1.example.com weight=5;
  server backend2.example.com weight=10;
  server backend3.example.com weight=5;
}

server {
  listen 80;
  server_name example.com;

  location / {
     proxy_pass http://backend;
  }
}
}

  

3、IP散列(ip_hash)负载均衡策略:使用客户端的IP地址来计算散列值,将同一个IP地址的请求发送到同一个后端服务器上,以实现会话保持(Session Persistence)。

http {
upstream backend {
  ip_hash;

  server backend1.example.com;
  server backend2.example.com;
  server backend3.example.com;
}

server {
  listen 80;
  server_name example.com;

  location / {
     proxy_pass http://backend;
  }
}

}

  

4、最少连接数(least_conn)负载均衡策略:将请求发送到当前连接数最少的后端服务器上,以达到最优的负载均衡效果。

http {
upstream backend {
  least_conn;

  server backend1.example.com;
  server backend2.example.com;
  server backend3.example.com;
}

server {
  listen 80;
  server_name example.com;

  location / {
     proxy_pass http://backend;
  }
}

}  

  

5、公平(fair)负载均衡策略:将请求基于当前后端服务器的处理速度,将请求发送到当前处理速度最快的后端服务器上,以充分利用服务器资源并提高响应速度。

http {
upstream backend {
 server backend1.example.com;
 server backend2.example.com;
fair;
}

server {
 listen 80;
 location / {
   proxy_pass http://backend;
}
}
}  

  

6、URL散列(url_hash)负载均衡策略:使用客户端请求中的URL地址计算散列值,并将同一个URL地址的请求发送到同一个后端服务器上,以实现会话保持(Session Persistence)和动态负载均衡(Dynamic Load Balancing)功能。

http {
upstream backend {
 server backend1.example.com;
 server backend2.example.com;
 hash $request_uri;
 hash_method crc32;
}

server {
 listen 80;
 location / {
   proxy_pass http://backend;
}
}
}