nginx 负载均衡(upstream)4种分配方式
实例 1 (简单用法)
upstream backend {
server backend1.example.com;
server backend2.example.com;
}
server {
location / {
proxy_pass http://backend;
}
实例 2 (动态可配置组)
resolver 10.0.0.1;
upstream dynamic {
zone upstream_dynamic 64k;
server backend1.example.com weight=5;
server backend2.example.com:8080 fail_timeout=5s slow_start=30s;
server 192.0.2.1 max_fails=3;
server backend3.example.com resolve;
server backend4.example.com service=http resolve;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location / {
proxy_pass http://dynamic;
health_check;
}
}
参数说明:
weight=number 设置定义的服务的权重,默认为1。
max_conns=number 默认值是0,意思是没有限制 , 限制连接到代理服务器的并发连接数
max_fails=number 被 fail_timeout 定义的 时间内当和服务通信失败尝试的次数 。 默认值被设为1.为0表示不支持
fail_timeout=time 重连时间范围,如果超过则表示该服务器不可用。 默认10秒.
backup 热备服务. 当主服务不可用后才会把请求
down 标记该服务永久不可用。
resolve 监控绑定到一个服务的域名的ip地址的变化,然后自动修改upstream配置不需要重启nginx , 指令必须定义在http 模块 :如;
http {
resolver 10.0.0.1;
upstream u {
zone ...;
server example.com resolve;
}
}
route=string 设置服务路由的名称
service=name 启用DNS SRV记录解析和设置服务的名称(1.9.13).为了让该参数生效,需要定义resolve参数和 指定一个不需要端口的hostname. 如:
server backend.example.com service=http resolve;
解决session
1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
3、ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
4、fair(第三方)按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5、url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
如:
upstream backend {
ip_hash;(可以解决session的问题)
server backend1.example.com;
server backend2.example.com;
}