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标为不可用状态
网友评论