Nginx负载均衡之upstream模块详解

Nginx负载均衡之upstream模块详解

 

 

 upstream模块介绍

Nginx的负载均衡功能来自于其模块ngx_http_upstream_module模块,该模块支持的代理方式有:

  1. uwsgi_pass

  2. fastcgi_pass

  3. proxy_pass

  4. memcached_pass

 

ngx_http_upstream_module模块允许Nginx定义一组或多组节点服务器,使用时可以通过proxy_pass代理方式,把用户请求发送到事先定于好的upstream组中。具体写法就是

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模块调度算法

【rr轮询调度算法】

 

【wrr权重轮询】

upstream backend {
server 192.168.178.122 weight=1;
server 192.168.178.121 weight=2;
}

  

【ip_hash】

upstream chaoge_backend {
ip_hash;
server 192.168.178.121;
server 192.168.178.122;

}

  

【fail】

该算法根据后端服务器节点的响应时间来分配,响应时间短的优先分配。nginx本身不支持fail形式,如果要支持该算法,必须下载nginx的upstream模块。

upstream chaoge_backend {
fair;
server 192.168.178.121;
server 192.168.178.122;
}

  

【least_conn】

该算法根据后端节点的连接数决定分配请求,哪个机器连接数少,就发给谁。

 

【url_hash】

需要单独安装hash模块

upstream chaoge_backend {
server squid1:3128;
server squid:3128;
hash $request_uri;
hash_method crc32;
}

  

proxy_pass指令

案例1

在nginx.conf配置文件中定义

location /name/ {
proxy_pass http://127.0.0.1/remote/;
}

例如当请求URL是: http://192.168.178.121/name  ,会进入该locaiton的作用域,通过参数proxy_pass请求转发给了http://127.0.0.1/remote/

  

案例2

在nginx.conf配置文件中定义

location /name/ {
proxy_pass http://127.0.0.1/remote/;
}

例如当请求URL是: http://192.168.178.121/name  ,会进入该locaiton的作用域,通过参数proxy_pass请求转发给了http://127.0.0.1/remote/

  

proxy_pass参数

参数 作用解释
proxy_set_header 设置反向代理向后端发送的http请求头信息,如添加host主机头部字段,让后端服务器能够获取到真是客户端的IP信息等。
client_body_buffer_size 指定客户端请求主体缓冲区大小
proxy_connect_timeout 反向代理和后端节点连接的超时时间,也是建立握手后等待响应的时间
proxy_send_timeout 表示代理后端服务器的数据回传时间,在规定时间内后端若数据未传完,nginx会断开连接
proxy_read_timeout 设置nginx从代理服务器获取数据的超时时间
proxy_buffer 设置缓冲区的数量大小
上一篇:Java使用正则表达式解析LRC歌词文件


下一篇:git 提交流程(自己fork库到主库)