Nginx运维之八 负载均衡
负载均衡
Nginx负载均衡是最常用的Nginx功能,Nginx负载均衡的思想在于通过特定的调度算法将流量分发到不同的应用服务器上面来解决单台机器的并发压力。
最简单的案例
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location ^~ /example/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For
proxy_pass http://backend;
}
}
upstream
Syntax: upstream name { … }
Default: —
Context: http
定义一组可以监听不同端口服务器,也可以监听TCP和UNIX域套接字的服务器。
server
Syntax: server address [parameters];
Default: —
Context: upstream
定义服务器的地址和其他参数。地址可以指定为域名或IP地址、可选端口或在“unix:”前缀之后指定的UNIX域套接字路径。如果未指定端口,则使用端口80。一个解析为多个IP地址的域名等同定义多个服务器。
支持参数如下:
weight
Syntax: weight=number
设置server的权重,默认值1
max_conns
Syntax: max_conns=number
限制与代理服务器同时激活连接的最大数量(1.11.5)。默认值为零,意味着没有限制。如果服务器组不驻留在共享内存中,则每个工作进程的限制都有效。
如果启用了空闲保持活动连接、多个工作者和共享内存,则到代理服务器的活动连接和空闲连接的总数可能超过max_conns值。
max_fails
Syntax: max_fails=number
失败重连的次数,这些尝试应在fail_timeout参数设置的持续时间内发生,以考虑服务器在fail_timeout参数设置的持续时间内不可用。默认情况下,尝试失败的次数设置为1。零值禁用重试。
fail_timeout
Syntax: fail_timeout=time
max_fails次失败后,暂停的时间。默认是10S。
backup
其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
down
标记当前的server暂时不参与负载
负载均衡模式
轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。我们上面的案例使用的就是。
weight(权重)
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
upstream bakend {
server 103.1.248.230:8080 weight=10;
server 104.25.253.107:8080 weight=10;
}
ip_hash
每个请求按访问ip的hash结果分配,这样每个同IP的访问会固定访问一个后端服务器,可以解决session的问题。
例如:
upstream bakend {
ip_hash;
server 103.1.248.230:8080;
server 104.25.253.107:8080;
}
fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream backend {
server 103.1.248.230:8080;
server 104.25.253.107:8080;
fair;
}
url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法
upstream backend {
server 103.1.248.230:8080;
server 104.25.253.107:8080;
hash $request_uri;
hash_method crc32;
}