轮询(Round Robin)是最基本的负载均衡算法。它将所有请求依次分配到每台服务器上,周而复始,直至所有请求分配完毕。假设有三台服务器A、B、C,轮询算法会将第一个请求分到A,第二个请求分到B,第三个请求分到C,第四个请求再分到A,以此类推。
在Nginx中,可以这样配置轮询算法:
111upstream backend {
2 server backend1.example.com;
3 server backend2.example.com;
4 server backend3.example.com;
5}
6
7server {
8 location / {
9 proxy_pass http://backend;
10 }
11}
粘性轮询类似于轮询,但会保证同一个客户端的请求总是分配到同一个服务器上。这种方式确保了会话的状态保持。Nginx通过使用 ip_hash
指令来实现粘性轮询。
在Nginx中,可以这样配置粘性轮询算法:
121upstream backend {
2 ip_hash;
3 server backend1.example.com;
4 server backend2.example.com;
5 server backend3.example.com;
6}
7
8server {
9 location / {
10 proxy_pass http://backend;
11 }
12}
权重轮询(Weighted Round Robin)为每台服务器分配一个权重值,根据权重值的大小来分配请求。权重值越高,服务器接收的请求就越多。这种算法适用于服务器性能不一致的场景。
在Nginx中,可以这样配置权重轮询算法:
111upstream backend {
2 server backend1.example.com weight=3;
3 server backend2.example.com weight=2;
4 server backend3.example.com weight=1;
5}
6
7server {
8 location / {
9 proxy_pass http://backend;
10 }
11}
散列(Hash)算法将请求做哈希运算,依据哈希值将请求分配到特定的服务器。Nginx提供了一种基于请求URL的哈希分配方式,可以使用 hash
指令来实现。
在Nginx中,可以这样配置散列算法:
121upstream backend {
2 hash $request_uri;
3 server backend1.example.com;
4 server backend2.example.com;
5 server backend3.example.com;
6}
7
8server {
9 location / {
10 proxy_pass http://backend;
11 }
12}
最少连接数(Least Connections)算法将请求分配给当前连接数最少的那台服务器。这样可以防止某台服务器过载,确保负载均衡。
在Nginx中,可以这样配置最少连接数算法:
121upstream backend {
2 least_conn;
3 server backend1.example.com;
4 server backend2.example.com;
5 server backend3.example.com;
6}
7
8server {
9 location / {
10 proxy_pass http://backend;
11 }
12}
最短响应时间(Shortest Response Time)算法将请求分配给响应时间最短的服务器。Nginx在某些第三方模块中可以实现这种算法,但默认配置中并不直接支持。
下面是一个简化的例子(针对Nginx Plus用户):
121upstream backend {
2 least_time header;
3 server backend1.example.com;
4 server backend2.example.com;
5 server backend3.example.com;
6}
7
8server {
9 location / {
10 proxy_pass http://backend;
11 }
12}