1,轮询
nginx的upstream默认以轮询的方式实现负载均衡的,每个请求按时间逐一分配到不同的后端服务器,如果后端服务器down掉,通过自带的后端节点健康性检查功能模块,实现自动故障节点剔除,当后端服务器恢复后,通过自带的后端节点健康性检查功能模块自动将恢复的节点增加到分配池中。
实现(进入/usr/local/nginx/conf/nginx.conf):
upstream aaa{
server 192.168.136.138:80;
server 192.168.136.139:80;
}
2,权重weight
指定轮询几率,机器性能,weight值越大,访问频率越高。
upstream aaa{
server 192.168.136.138:80 weight=5;
server 192.168.136.139:80 weight=10;
}
3,ip_hash
每个请求按客户端访问ip的hash结果分配,使每个访客定向到同一个后端服务器,变向地解决了session的问题。前提条件:Nginx必须位于应用服务最前端,直接面向用户访问接入;如果Nginx位于网闸或F5的后端,那么所有前端请求均来自于同一个IP地址,请求都被Nginx分配到后端同一个应用服务上,无法实现负载均衡。
注意:ip_hash不能与weight同时用
upstream aaa{
ip_hash;
server 192.168.136.138:80;
server 192.168.136.139:80;
}
4,fair
需安装第三方nginx-upstream-fair模块
根据后端服务器响应时间来分配请求,响应时间短的优先分配。
upstream aaa{
fair;
server 192.168.136.138:80;
server 192.168.136.139:80;
}
5,url_hash
需要安装第三方ngx_http_upstream_hash_module模块才能使用
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
注意:url_hash不能与weight同时用
upstream aaa{
server 192.168.136.138:80;
server 192.168.136.139:80;
hash $request_uri;
hash_method crc32; #使用的hash算法
}
6,least_conn最小连接数
upstream myweb1{
least_conn;
server 192.168.174.142;
server 192.168.174.147;
}
状态值 | 说明 |
---|---|
down | 表示当前server不参与负载 |
weight | 默认为1,越大负载的权重越大,分配几率越大 |
max_fail | 设定Nginx与服务器通信的尝试失败的次数。默认为1,当超过最大次数时,返回proxy_next_upstream模块定义的错误;在fail_timeout参数定义的时间段内,如果失败的次数达到此值,Nginx就认为该服务器不可用。在下一个fail_timeout时间段,Nginx不会再往该服务器发送请求; 注:该值设定为0就会停止统计尝试次数,认为服务器是一直可用的。 |
fail_timeout | 设定服务器被认为不可用的时间段以及统计失败尝试次数的时间段。在这段时间中,服务器失败次数达到指定的尝试次数,服务器就被认为不可用。默认情况下,该超时时间是10秒 |
backup | 其他所有非backup机器down或者忙的时候,才会请求backup机器。所以这台机器压力会最轻; |