原文网址:Nginx系列--upstream模块的使用_IT利刃出鞘的博客-CSDN博客
简介
说明
** **本文介绍nginx的upstream模块的使用。
nginx的upstream模块是用于负载均衡的。
upstream模块介绍
Nginx的负载均衡功能依赖于ngx_http_upsteam_module模块,所支持的代理方式包括proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass和grpc_pass。
gx_http_upstream_module模块允许Nginx定义一组或多组服务组,使用的可以通过proxy_pass代理方式把网站的请求发送到事先定义好的对应upstream组的名字上。upstream模块可以实现**负载均衡**,而且在一个**节点故障**的时候,配置了upstream时可以**自动切换到正常工作的节点。**
负载均衡方式
官方自带的负载均衡
- ip_hash - 通过ip来计算hash值,根据hash值将分配到不同的机器中,同一个hash值会一直落在一台机器上(也就是同一个ip)。
- weight - 通过设置权重值指定集群中不同机器的权重,权重越高,落到该机器的请求次数越多。
- 轮询(默认) - 将请求均匀的分配到集群中的每一台机器上。
- 最小连接数: - least_conn是动态调度算法,会根据后端节点的连接数来决定分配情况,哪个机器连接数少就分发给它。
这几种方式优先级如下:
ip_hash > weight > 轮询 > 最小连接数
ip_hash优先级最高,若配置了ip_hash,其他三种配置就会失效,只会根据ip_hash策略。配置了weight也是同样,轮询和最小连接数会失效。
第三方负载均衡方式
- 最短响应时间 - 最短响应时间(fair)调度算法是动态调度算法,会根据后端节点服务器的响应时间来分配请求,响应时间短的优先分配。- Nginx 本身是不支持 fair 调度算法的,如果要使用这种调度算法,必须下载 Nginx 的相关模块 upstream_fair。
- url_hash算法 - url_hash算法是动态调度算法,按访问 URL 的 hash 结果来分配请求,使每个 URL 定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率命中率。(多用于后端服务器为缓存时的场景下)。- Nginx 本身是不支持 rul_hash的,如果要使用这种调度算法,必须安装 Nginx 的hash 模块软件包。
示例
ip_hash
upstream demo {
ip_hash;
server 192.168.0.1:8080;
server 192.168.0.2:9090;
}
server {
listen 80;
server_name test.xxx.com;
location / {
proxy_pass http://demo/;
}
}
当请求test.xxx.com时,会匹配进入到location,proxy_pass指定了upstream,此时就会根据ip_hash,对当前的请求IP做hash计算,得到最终会落到那台机器上。以后同一个ip请求,都会落到这个机器上。在某些项目中,可以考虑用这种方式来解决session共享的问题。
weight
upstream demo {
server 192.168.0.1:8080 weight 2;
server 192.168.0.2:9090 weight 1;
}
server {
# …… 同上面的示例
}
请求test.xxx.com时,会两次落在192.168.0.1:8080机器上,一次落在192.168.0.2:9090上。
轮询
轮询很简单,是默认的方式。如下:
upstream demo {
server 192.168.0.1:8080;
server 192.168.0.2:9090;
}
请求会均匀的落在两台机器上。
least_conn
upstream show {
least_conn;
server 192.168.0.141 ;
server 192.168.0.142 ;
}
版权归原作者 IT利刃出鞘 所有, 如有侵权,请联系我们删除。