Nginx 负责与上游交互的模块,统称为upstream模块。

包括 stream_upstream,http_upstream。

其实在之前我对upstream所说的上游 一直不太理解,总是和客户端弄混淆。不知道有没有像我一样迷糊过的小伙伴。其实就是源服务器 或 应用服务。

在upstream中除了指定上游服务器之外,还提供了最基本的负载均衡算法--round-robin。

nginx负载均衡策略(nginx负载均衡配置步骤)(1)

下面我们介绍一下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;
    }   
}