美文网首页
nginx upstream模块

nginx upstream模块

作者: 麟之趾a | 来源:发表于2021-07-17 20:22 被阅读0次

what

upstream模块是对服务器的一个分组,在http里面,由proxy_pass 代理upstream的组名,
这个为http的7层代理
upsteam 可以对后台服务器做健康检查

where

做http的负载均衡使用

when

高并发场景用

who

运维人员

how

示例

http {
    upstream web_test {
          server 10.0.0.1;
          server 10.0.0.2;
    }
    server {
        listen 80;
        location / {
                proxy_pass http://web_test
            }
    }
}

upsteam调度算法加权轮询

 upstream web_test {
          server 10.0.0.1  weight=2;
          server 10.0.0.2;
    }

upsteam ip_hash算法

ip_hash默认使用 static hash取模运算,即取upstream服务器权重数进行取模,把源ip进行 hash运算对其权重数进行取模,然后分布。

ip_hash 问题

如果后台有一台服务器宕机,则基于权重数的取模就会出现问题。因为宕机了一台机器,其权重数就会发生变化。客户端请求过来的ip hash运算后,其取模的结果也就一样了。
ip_hash解决了解决了session问题,使用stick session的手段。但取模的地址太过粗糙,且后面有一台机器宕机,则整个取模算法就会完全改变

 upstream web_test {
          ip_hash;
          server 10.0.0.1  weight=2;
          server 10.0.0.2;
    }

upstream hash算法

hash算法就可以使用客户端请求的任一请求头进行hash运算取模,且可以设置一致性hash,是基于取模的权重是不变的

Syntax: hash key [consistent];
Default:    —
Context:    upstream
This directive appeared in version 1.7.2.

其中 consistent是设置一致性hash算法的参数

 upstream web_test {
          hash $remote_ip consistent;
          server 10.0.0.1  weight=2;
          server 10.0.0.2;
    }

实现与ip_hash一样的效果,且使用的是一致性hash算法
可以对其uri进行hash取模运算,如果后面使用的静态的缓存服务器,即提高缓存命中率

upsteam least_conn 最小连接算法

 upstream web_test {
          least_conn;
          server 10.0.0.1  weight=2;
          server 10.0.0.2;
    }

最小连接算法
建议如果开启长连接就使用最小连接算法,如果是短链接就使用轮询算法

keepalive

对于upstream模块中的服务器保持长连接的数量
在proxy_pass中应该把http版本设置为1.1,清楚原链接请求头中的Connection字段内容

upstream http_backend {
    server 127.0.0.1:8080;

    keepalive 16;
}

server {
    ...

    location /http/ {
        proxy_pass http://http_backend;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
        ...
    }
}

upstream 中server的参数

backup

将server置于备用状态及所有server宕机,此server提供sorry页面

down

将此server置于down不在接受用户请求。
一般在发布过程中,先用脚本将此server置为down,然后过一段时间,大概是一个长连接的周期。然后将server后面的服务器,进行版本更新。然后再把down去掉,提供服务。
保持一段时间,目的是否后面服务器的连接自动断开,提升用户的体验

weight

根据server的配置,设置其权重

 upstream web_test {
          least_conn;
          server 10.0.0.1  weight=2;
          server 10.0.0.2;
    }

max_conn

设置server的最大连接数数

max_fails

设置server连接的最大失败次数,默认为1

fail_timeout

设置server的探测的超时时间,默认为10秒
当客户端连接超过 fail_timeout * max_fails 秒后,此server被nginx标为不可用状态

相关文章

网友评论

      本文标题:nginx upstream模块

      本文链接:https://www.haomeiwen.com/subject/jznwpltx.html