nginx.conf----upstream
nginx---upstream
放于http{}标签中
默认算法是wrr(权重轮询 weighted round-robin)
配置例子
upstream example {
server test.example.com weight=5;
server test2.example.com:8090 max_fails=3 fail_timeout=30s;
server unix:/tmp/test3; #u监听nix域套接字
server test.example.com:8090 backup;
server test2.example.com:8090 backup; #备用服务器
server test3.example.com down; #服务器不可用
}
语法:server address [parameters];
1、address:定义服务器地址,未指定端口默认80端口
#“unix:”:指定“unix:”前缀的unix域套接字路径。
参数:
weight=number:设定服务器的权重,默认是1。
max_fails:设置nginx与服务器通信的尝试失败的次数。
fail_timeout:定义时间段,如果失败达到max_fails,nginx认为服务不可用。
#默认次数为1,0为停止统计尝试次数,认为一直可用。
#proxy_next_upstream、fastcgi_next_upstream、memcached_next_upstreamd配置什么是失败的尝试。
backup:标记为备用服务器。主服务器不可用时,会传给这些服务器。
down:标记服务器永久不可用,可与ip_hash一起用。
负载均衡
1、轮询
默认方式,即每个请求按照时间顺序轮流分配到不同的后端服务器。
2、weight权重
指定轮询比率,应用于后端服务器有区别的场景。
upstream example {
server test0.example.com weight=1;
server test1.example.com weight=2;
server test2.example.com weight=3;
}
3、ip_hash
每个请求按照访问ip的hash结果分配,这样每个访客会固定访问一个后端,可以解决session一致问题。
#ip_hash时,server后的状态不能是weight和backup。
#会导致负载不均衡。
upstream example {
ip hash;
server test0.example.com weight=1;
server test1.example.com weight=2;
server test2.example.com weight=3;
}
4、fair
公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求。
必须下载upstr_fair模块
upstream example {
server test0.example.com weight=1;
server test1.example.com weight=2;
server test2.example.com weight=3;
fair;
}
5、url_hash/consistent_hash
consistent_hash替代了url_hash,按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要用于后端服务器为缓存的场景。
#用于cache服务,例:memcached,squid,varnish。
#不能写入weight等其他参数。
#hash_method是使用的算法。
upstream example {
server test0.example.com weight=1;
server test1.example.com weight=2;
server test2.example.com weight=3;
hash $request_uri;
hash_method crc32;
}