1.upstream
1.1.upstream语法
Syntax: upstream name { ... }
Default: —
Context: http
备注解析
1.upstream 配置http作用域下面
1.2.配置样例
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com;
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server backup1.example.com backup;
}
备注-解析
1.默认情况下,请求使用加权循环平衡方法在服务器之间分布。
2.每7个请求的分发如下:
2.1.五个请求进入backend1.example.com,
2.2.一个请求进入backend2.example.com
2.3.一个请求进入127.0.0.1:8080
2.4.如果在请求其中一个server时发生异常,会进入下一个server,直到所有的server都被重试
2.5.如果无法从任何服务器获得成功的响应,客户机将接收与最后一个服务器通信的结果。
2.server
2.1.概念
1.指定server的地址以及其他参数
2.地址可以指定为域名或者ip(或者带有端口,如果未指定端口,默认80)
3.其中server 指定的域名可以解析为多个IP地址的域名同时定义多个服务器。
2.2.server 属性
2.2.1.weight
1.设置server服务的权重,默认1
案例:
upstream backend {
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:8081 weight=3;
server 127.0.0.1:8082 weight=5;
server 127.0.0.1:8083 ; # 默认相当于 weight=1;
}
解析
1.每进来(2+3+5+1)11个请求,会有
2个进入127.0.0.1:8080,
3个进入127.0.0.1:8081,
5个进入127.0.0.1:8082,
1个进入127.0.0.1:8083
2.2.2.max_conns
案例
upstream backend {
server 127.0.0.1:8080 max_conns=100;
server 127.0.0.1:8083 ; # 默认相当于 max_conns=0;
}
解析
1.设置限制与代理服务器同时活动的最大连接数;
2.默认max_conns的值为0,意味着没有限制;
2.2.3.max_fails
案例
upstream backend {
server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
server 127.0.0.1:8081; #默认 相当于max_fails=1
}
解析
1.设置请求server失败最大重试次数
2.与fail_timeout 属性组合使用
3.默认失败重试最大次数 1
4. server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
max_fails=3 fail_timeout=30s代表在30秒内请求某一应用失败3次, 认为该应用宕机,
后等待30秒,这期间内不会再把新请求发送到宕机应用,而是直接发到正常的那一台,
等待的这30秒时间到后再有请求进来继续尝试连接宕机应用且仅尝试1次,
如果还是失败,则继续等待30秒...以此循环,直到恢复。
5.
2.2.4.fail_timeout
样例
upstream backend {
server 127.0.0.1:8080 fail_timeout=10s;
server 127.0.0.1:8081; #默认 相当于fail_timeout=10s 10秒
}
解析
1.在指定的fail_timeout时间范围内,超过max_fails不成功的尝试次数,认为应用服务不可用;
2.fail_timeout属性与max_fails属性组合使用;
2.2.5.backup
upstream backend {
server 127.0.0.1:8080 fail_timeout=10s;
server 127.0.0.1:8081 back;
}
1.标示 该server为备份的server 当主要的server不可用时,会请求到备份server中
2.如上127.0.0.1:8080 不可用时,会请求到127.0.0.1:8081
2.2.6.down
upstream backend {
server 127.0.0.1:8080;
server 127.0.0.1:8081 down;
}
解析
1.标示该server 已经永久不可用,宕机
2.2.7.resolve
http {
resolver 10.0.0.1;
upstream u {
server example.com resolve;
}
}
1.主要用于DNS解析,与http模块下的resolver 组合使用
2.2.7.ip_hash
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
server backend4.example.com;
}
解析
1.指定组应使用负载平衡方法,其中基于客户端IP地址的请求在服务器之间分布。
2.客户端IPv4地址或整个IPv6地址的前三个八进制数用作哈希键。
3.该方法确保来自同一客户端的请求始终传递到同一服务器,除非该服务器不可用。
4.在后一种情况下,客户机请求将被传递到另一台服务器。
最有可能的是,它也将始终是相同的服务器
参考
http://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream