upstream机制提供了负载均衡的功能,可以将请求负载分担到集群服务器的某个服务器上面。它的工作流程如下:
1)分析客户端请求报文,构建发往上游服务器的请求报文;
2)调用ngx_http_upstream_init开始与上游服务器建立TCP连接;
3)发送在第一步中组建的请求报文;
4)接收来自上游服务器的响应头并进行解析,之后往下游转发;
5)接收来自上游服务器的相应体,并进行转发。
upstream支持6种负载分配方式,前三种为Nginx原生支持的分配方式,后三种为第三方支持的分配方式。
1. Nginx轮询
轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器宕掉后,则能自动将其剔除,剩下的继续轮询。
upstream cms.cat {
server 192.168.1.10:8081;
server 192.168.1.11:8081;
}
2. Nginx权重
权重是轮询的加强版,即在轮询的基础上还可以指定轮询比率,weight和访问概率成正比,主要应用于应用服务器性能不均的情况。Nginx权重实现如代码清单所示,这里192.168.1.11的访问比例是192.168.1.10的两倍。
upstream cms.cat {
server 192.168.1.10:8081 weight=1;
server 192.168.1.11:8081 weight=2;
}
3. Nginx ip_hash
ip_hash即每个请求会按照访问IP的hash值分配,这样同一客户端连续的Web请求都会被分发到同一服务器进行处理,可以解决session的问题。如果服务器宕掉,则能自动将其剔除。
upstream cms.cat {
ip_hash
server 192.168.1.10:8081;
server 192.168.1.11:8081;
}
4. Nginx fair
fair即按后端服务器的响应时间来分配请求,响应时间短的优先分配。
upstream cms.cat {
server 192.168.1.10:8081;
server 192.168.1.11:8081;
fair;
}
5. Nginx url_hash
url_hash与ip_hash类似,但是其按照访问URL的hash结果来分配请求,使得每个URL定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景中。
upstream cms.cat {
server 192.168.1.10:8081;
server 192.168.1.11:8081;
hash $request_uri;
hash_method crc32;
}
6. Nginx least_conn
least_conn把请求转发给连接数较少的后端服务器。
upstream cms.cat {
least_conn; #把请求转发给连接数较少的后端服务器
server 192.168.1.10:8081;
server 192.168.1.11:8081;
}
网络 Nginx