Module ngx_http_upstream_module 英文文档
upstream 模块相关说明
1,upstream 模块应放于 nginx.conf 配置的 http{}标签内
2,upstream 模块默认算法是 wrr (权重轮询 weighted round-robin)
一, 分配方式
Nginx 的 upstream 支持 5 种分配方式, 下面将会详细介绍, 其中前三种为 Nginx 原生支持的分配方式, 后两种为第三方支持的分配方式.
1, 轮询
轮询是 upstream 的默认分配方式, 即每个请求按照时间顺序轮流分配到不同的后端服务器, 如果某个后端服务器 down 掉后, 能自动剔除.
- upstream backend {
- server 192.168.1.101:8888;
- server 192.168.1.102:8888;
- server 192.168.1.103:8888;
- }
- 2,weight
轮询的加强版, 即可以指定轮询比率, 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:7777;
- server 192.168.1.102:8888;
- server 192.168.1.103:9999;
- }
注意:
1, 当负载调度算法为 ip_hash 时, 后端服务器在负载均衡调度中的状态不能是 weight 和 backup.
2, 导致负载不均衡.
4,fair
fair 顾名思义, 公平地按照后端服务器的响应时间 (rt) 来分配请求, 响应时间短即 rt 小的后端服务器优先分配请求. 如果需要使用这种调度算法, 必须下载 Nginx 的 upstr_fair 模块.
- upstream backend {
- server 192.168.1.101;
- server 192.168.1.102;
- server 192.168.1.103;
- fair;
- }
5,url_hash, 目前用 consistent_hash 替代 url_hash
与 ip_hash 类似, 但是按照访问 url 的 hash 结果来分配请求, 使得每个 url 定向到同一个后端服务器, 主要应用于后端服务器为缓存时的场景下.
- upstream backend {
- server 192.168.1.101;
- server 192.168.1.102;
- server 192.168.1.103;
- hash $request_uri;
- hash_method crc32;
- }
其中, hash_method 为使用的 hash 算法, 需要注意的是: 此时, server 语句中不能加 weight 等参数.
提示: url_hash 用途 cache 服务业务, Memcached,squid,varnish. 特点: 每个 rs 都是不同的.
二, 设备状态
从上面实例不难看出 upstream 中 server 指令语法如下: server address [parameters]
参数说明:
server: 关键字, 必选.
address: 主机名, 域名, ip 或 unix socket, 也可以指定端口号, 必选.
parameters: 可选参数, 可选参数如下:
1.down: 表示当前 server 已停用
2.backup: 表示当前 server 是备用服务器, 只有其它非 backup 后端服务器都挂掉了或者很忙才会分配到请求.
3.weight: 表示当前 server 负载权重, 权重越大被请求几率越大. 默认是 1.
4.max_fails 和 fail_timeout 一般会关联使用, 如果某台 server 在 fail_timeout 时间内出现了 max_fails 次连接失败, 那么 Nginx 会认为其已经挂掉了, 从而在 fail_timeout 时间内不再去请求它, fail_timeout 默认是 10s,max_fails 默认是 1, 即默认情况是只要发生错误就认为服务器挂掉了, 如果将 max_fails 设置为 0, 则表示取消这项检查.
举例说明如下:
- upstream backend {
- server backend1.example.com weight=5;
- server 127.0.0.1:8080 max_fails=3 fail_timeout=30s;
- server unix:/tmp/backend3;
- }
来源: http://www.bubuko.com/infodetail-2964777.html