Nginx 负责与上游交互的模块,统称为upstream模块。
包括 stream_upstream,http_upstream。
其实在之前我对upstream所说的上游 一直不太理解,总是和客户端弄混淆。不知道有没有像我一样迷糊过的小伙伴。其实就是源服务器 或 应用服务。
在upstream中除了指定上游服务器之外,还提供了最基本的负载均衡算法--round-robin。
下面我们介绍一下upstream模块的基本使用方法。
我们指定上游服务地址主要靠upstream指令和server指令。
Syntax: upstream $name { ... } Default: — Context: http Syntax: server $address [parameters]; Default: — Context: upstream
server: 主要是指定一组上游服务器的地址,得要让Nginx知道往哪儿转发流量啊,地址可以是域名,也可以是IP,或者socket地址。可以指定端口,如果不加端口的话默认是80端口。
server 有2个通用参数:
backup: 指定一个server为备胎,当有不是backup的server坏的时候,才会用到这个备胎。如果原配可用,那么这个备胎是不会有流量的。
down: 就是已经下线的服务,将不再转发流量。相当于注释。
加权Round-Robin负载均衡算法
这个算法很重要,因为它是其他负载均衡算法的基础。
比如:hash算法,一致性hash算法,在某些情况下会退化成加权Round-Robin算法。就像树在特定情况下会退化成链表一样。
Round-Robin其实就是依次轮询。比如A B C台机器,当有请求来了,就A-B-C-A-B-C挨个请求。
加权的意思是:
A:1核1G的配置,
B:2核2G的配置,
C:3核3G的配置,
这时候如果再依次轮询的话,有时候A机器忙不过来了。B机器刚好,C还有富余的性能。
所以就要按一定的权重分配请求到不同的机器上。
比如 16%的请求给到A, 34%的请求给到B, 50%的请求给到C。
server主要靠这些指令来进行配置。
weight:服务的权重,如果不配置,默认是1.
max_conns: server的最大并发连接数,仅作用于单worker进程,默认是0,表示没有限制。
max_fails和fail_timeout是配合使用的。
max_fails: 当fail_timeout时间段内,最大的失败次数。当到达这个最大失败次数的时候,将在接下来的fail_timeout时间段内不再向该server转发流量。
fail_timeout: 单位为秒,默认值是10秒。
例子:
server { listen 127.0.0.1:8011; default_type text/plain; return 200 '8011 server response.\n'; } server { listen 8012; default_type text/plain; return 200 '8012 server response.\n'; } upstream up { server 127.0.0.1:8011 weight=2 max_conns=2 max_fails=2 fail_timeout=5; server 127.0.0.1:8012; } server { server_name local.com; error_log myerror.log info; location /{ proxy_pass http://up; proxy_http_version 1.1; } }