upstream模块介绍
nginx的负载均衡功能来自于其模块ngx_http_upstream_module模块,该模块支持的代理方式有
uwsgi_pass
Fastcgi_pass
proxy_pass
Memcached_pass
#具体写法
upstream www_pools {
server x.x.x.x;
server x.x.x.x;
}
proxy_pass http://www_pools;
#完整的upstream配置案例
upstream www_pools {
server 192.168.178.121;
server 192.168.178.122:80 weight=1 max_fails=1 fail_timeout=10s;
server 192.168.178.123:80 weight=10 max_fails=2 fail_timeout=20s backup;
server 192.168.178.124:80 wetight=10 max_fails=2 fail_timeout=20s backup;
}
#使用域名及socket的upstream配置
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backend3.example.com:8080 backup;
}
upstream模块参数
#参数解释
server是固定关键字,后面跟着服务器ip或是域名,默认是80端口,也可以指定端口
weight表示节点的权重,数字越大,分配的请求越多,注意nginx结尾的分号
max_fails Nginx尝试连接后端节点失败的次数,根据企业情况调整,默认是1
backup 其它所有的非backup机器down或者忙的时候,请求backup机器,实现热备效果。
fail_timeout 在max_fails定义的次数失败后,距离下次检查的间隔时间,默认10s
down 表示当前主机暂停,不参与负载均衡
upstream模块的内容应放于nginx.conf配置中的 http{}标签内 其默认调度算法是wrr(权重轮询,weighted round-robin)
upstream模块调度算法
静态调度算法
根据负载均衡器自身设定的规则进行分配,不需要考虑后端节点的健康情况
#例如
1.轮询(round-robin)
特点:宕机的服务器会被自动从地址池中剔除
2.权重轮询(wrr)
特点:权重值越大,优先获得客户端请求
upstream backend {
server 192.168.178.125 weight=1;
server 192.168.178.124 weight=2;
}
3.ip_hash
特点:每个请求按客户端IP的hash结果分配,当新的请求到达,将其客户端IP通过哈希算法得到一个唯一值,在随后的客户端请求中,如果客户端的IP哈希值相等,该请求就会固定发给一台服务器。
- 解决动态网页中的session共享问题 使用了ip_hash不得再使用weight、backup两个参数,照成冲突,即使写了也不生效
upstream chaoge_backend {
ip_hash;
server 192.168.178.124;
server 192.168.178.125;
}
4.url_hash
特点:与ip_hash类似,更具客户端请求的URL信息进行hash
- nginx不支持url_hash,需要单独安装hash模块
upstream chaoge_backend {
server squid1:3128;
server squid:3128;
hash $request_uri;
hash_method crc32;
}
动态调度算法
判断后端节点的当前状态,来决定是否分发请求
#例如
least_conn
该算法根据后端节点的连接数决定分配请求,谁连接数少发给谁
fail
少用
upstream chaoge_backend {
fair;
server 192.168.178.124;
server 192.168.178.125;
}