nginx实现负载均衡的模式
1、轮询
每个请求按时间顺序逐一分配到不同的后端服务器,也是nginx的默认模式。轮询模式的配置很简单,只需要把服务器列表加入到upstream模块中即可。
下面的配置是指:负载中有三台服务器,当请求到达时,nginx按照时间顺序把请求分配给三台服务器处理。
upstream serverList {
server 127.0.0.1;
server 127.0.0.2;
server 127.0.0.3;
}
2、ip_hash
每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。
下面的配置是指:负载中有三台服务器,当请求到达时,nginx优先按照ip_hash的结果进行分配,也就是同一个IP的请求固定在某一台服务器上,其它则按时间顺序把请求分配给三台服务器处理。
upstream serverList {
ip_hash
server 127.0.0.1;
server 127.0.0.2;
server 127.0.0.3;
}
3、url_hash
按访问url的hash结果来分配请求,相同的url固定转发到同一个后端服务器处理。
upstream serverList {
server 127.0.0.1;
server 127.0.0.2;
server 127.0.0.3;
hash $request_uri;
hash_method crc32;
}
4、fair
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream serverList {
server 127.0.0.1;
server 127.0.0.2;
server 127.0.0.3;
fair;
}
5、least_conn
使用最少连接的负载平衡,nginx将尝试不使繁忙的应用程序服务器因过多的请求而过载,而是将新请求分配给不太繁忙的服务器。
upstream serverList {
least_conn;
server 127.0.0.1;
server 127.0.0.2;
server 127.0.0.3;
}
参数
1、down
表示单前的server暂时不参与负载
2、weight
默认为1.weight越大,负载的权重就越大。
3、max_fails
允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4、fail_timeout
max_fails 次失败后,暂停的时间。
5、backup
其它所有的非backup、down机器忙的时候,请求backup机器。所以这台机器压力会最轻。
举例
upstream serverList {
# 暂时不参与负载
server 127.0.0.1:8080 down;
# 权重5
server 127.0.0.2:8080 weight=5;
# 权重3,允许请求失败次数为3请求失败后暂停时间30s
server 127.0.0.3:8080 weight=3 max_fails=3 fail_timeout=30s;
# 其它所有的非backup、down机器忙的时候,请求backup机器
server 127.0.0.4:8080 backup;
}
server {
listen 80;
server_name www.gin.com gin.com;
location / {
proxy_pass http://serverList;
}
}
网友评论