说到upstream这个模块,官网有详细介绍http://nginx.org/en/docs/http/ngx_http_upstream_module.html,我这里做一个应用以及文字阐述。
一,upstream模块介绍
nginx负载均衡就是依赖于ngx_http_upstream_module模块,支持代理方式有proxy_pass(前边我们用到的) 、fastcgi_pass、 memcached_pass。运行原理是前端访问的时候,请求到哪个主机,执行到后边定义的比如proxy_pass(单独笔记知识点),就会按照我们定义的upstream 名称执行对应的模块,比如《Linux环境下Nginx 通过upstream如何配置负载均衡以及实现》定义的web_pools这个web池。然后按照upstream定义的服务器以及设置好的算法进行分发执行。
二,upstream语法
以我们之前定义的文件为例:
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream web_pools { server 192.168.1.102:80 weight=5 max_fails=3 fail_timeout=3; server 192.168.1.103:80 weight=1 max_fails=3 fail_timeout=3; server 192.168.1.104:80 backup; keepalive 500; } server { listen 80; server_name nginx.21yunwei.com; location / { proxy_pass http://web_pools; proxy_http_version 1.1; } } }
三,upstream模块说明
1,upstream必须放到http{}标签中。
2,默认算法是wrr,权重轮训。
3,upstream内部参数说明:
server 192.168.1.102:80 weight=5; 定义的真实服务器,可以是IP也可以是域名,端口可以不写,默认80。如改成其他端口需要指定。
weight:表示当前指定server负载权重,权重越大,被请求的几率越大。默认权重为1.
down:表示当前server已停用
backup:表示当前server是备用服务器,非backup服务器挂了以后该服务器将会启用。注意:当服务器都down才会启用备用服务器。
max_fails:最大尝试失败次数,默认1。如设置0,则表示禁止尝试。根据实际需要来配置,一般配置2-3或更高。
fail_timeout:失败超时时间。默认10s,一般配置2-3秒就可以了。常于max_fails结合使用。
max_conns:并发连接数。保护节点服务器参数。
keepalive 300; 长连接最大连接数。
四,upstream模块调度算法方式。
Nginx的upstream支持5种分配方式。其中,前三种为Nginx原生支持的分配方式,后两种为第三方支持的分配方式:
1、rr轮询
轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除。按照1:1轮询。
upstream backend {
server 192.168.1.101:88;
server 192.168.1.102:88;
}
2、wrr权重轮询。
轮询的加强版,即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器异质的场景下。
upstream backend {
server 192.168.1.101 weight=1;
server 192.168.1.102 weight=2;
server 192.168.1.103 weight=3;
}
3、ip_hash
每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。
upstream backend {
ip_hash;
server 192.168.1.101:81;
server 192.168.1.102:82;
server 192.168.1.103:83;
}
说明:当负载调度算法为 ip_hash 时,后端服务器在负载均衡调度中的状态不能是 weight和backup。
4、fair
fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求。
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
fair;
}
5、url_hash
与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下。
upstream backend {
server 192.168.1.101;
server 192.168.1.102;
hash $request_uri;
hash_method crc32;
}
目前自己的服务器使用以及生产环境主要是前三种算法,后边两种目前作了解即可,有需要的朋友可以自行深处研究 。
转载请注明:西数超哥博客www.ysidc.top» [原创]Nginx模块upstream_module详细介绍以及调度算法
https://www.ysidc.top 西数超哥博客,数据库,西数超哥,虚拟主机,域名注册,域名,云服务器,云主机,云建站,ysidc.top