nginx学习1.5 nginx负载均衡配置

环境:

centos6/7,nginx-1.9.15.

摘要说明:

上一篇主要讲述nginx下的一些常用语法;

本章节主要讲述nginx的三种负载均衡策略及其相关配置:

步骤:

1.upstream

首先我们看一个负载均衡upstream的配置示例:

upstream backend  {
  server backend1.example.com weight=5;
  server backend2.example.com:8080;
  server unix:/tmp/backend3;
}
 
server {
  location / {
    proxy_pass  http://backend;
  }
}

从上面我们可以看到:

  1. upstream是独立于server的一个配置
  2. upstream下包含多个server
  3. upstream可搭配proxy_pass使用

总结,请求到达server,匹配到location,后调用upstream,按照一定规则选择其中一台sever进行反向代理;

接下来我们看下upstream和server的主要语法:

upstream

语法:upstream name { ... } 
默认值:none 
使用字段:http 
说明:upstream主要用于设置一群服务器,可以将upstream放在proxy_pass和fastcgi_pass指令中作为一个单独的实体,upstream可以是监听不同端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。
服务器可以指定不同的权重,默认为1。

server

语法:server name [parameters] 
默认值:none 
使用字段:upstream 
说明:指定后端服务器的名称和一些参数,可以使用域名,IP,端口,或者unix socket。如果指定为域名,则首先将其解析为IP。此外还有下需配置参数

  • ·weight = NUMBER - 设置服务器权重,默认为1。
  • ·max_fails = NUMBER - 在一定时间内(这个时间在fail_timeout参数中设置)检查这个服务器是否可用时产生的最多失败请求数,默认为1,将其设置为0可以关闭检查,这些错误在proxy_next_upstream或fastcgi_next_upstream(404错误不会使max_fails增加)中定义。
  • ·fail_timeout = TIME - 在这个时间内产生了max_fails所设置大小的失败尝试连接请求后这个服务器可能不可用,同样它指定了服务器不可用的时间(在下一次尝试连接请求发起之前),默认为10秒,fail_timeout与前端响应时间没有直接关系,不过可以使用proxy_connect_timeout和proxy_read_timeout来控制。
  • ·down - 标记服务器处于离线状态,通常和ip_hash一起使用。
  • ·backup - (0.6.7或更高)如果所有的非备份服务器都宕机或繁忙,则使用本服务器(无法和ip_hash指令搭配使用)。

示例配置:

upstream  backend  {
  server   backend1.example.com    weight=5;
  server   127.0.0.1:8080          max_fails=3  fail_timeout=30s;
  server   unix:/tmp/backend3;
}

注意:如果你只使用一台上游服务器,nginx将设置一个内置变量为1,即max_fails和fail_timeout参数不会被处理。如果nginx不能连接到上游,请求将丢失。所以upstream一般使用多台上游服务器。

2.upstream默认负载策略——轮询

轮询:按照访问时间先后,按照顺序访问不同的后端服务器

	#默认负载策略---轮询,会依次将请求分发到三台server上
	upstream  backend  {
        server   127.0.0.1:8080;
        server   127.0.0.1:8888;
        server   127.0.0.1:9999;
    }
	server {
        listen       2009;
        server_name  localhost;
        location  / {
          proxy_pass http://backend;
        }
        error_page   500 502 503 504  /50x.html;
        location  /50x.html {
            root   html;
        }
    }

这里需要注意的是upstream中若有服务挂了,upstream就会将请求进行顺延,并不会丢失请求,直到服务正常;

3.upstream负载策略——权重

权重的本质还是轮询,只是在轮询的同时给每个server加上了轮询机率;

权重配置的越大,轮询机率越大,成正比,默认权重为1;常用于不用配置服务器配置不同权重;

	#负载策略---权重,会根据权重将请求按机率分发到后端服务器,权重越高,机率越大,默认权重为1;若后端服务器挂了则不参与负载
	upstream  backend2010  {
        server   127.0.0.1:8080 weight=3;
        server   127.0.0.1:8888 weight=2;
        server   127.0.0.1:9999;
    }
	server {
        listen       2010;
        server_name  localhost;
        location  / {
          proxy_pass http://backend2010;
        }
        error_page   500 502 503 504  /50x.html;
        location  /50x.html {
            root   html;
        }
    }

上述配置,若服务都正常,访问6次,会访问8080端口3次,8888端口2次,9999端口1次

:需要注意的下,同一个nginx下,upstream的名称需要保持唯一

4.upstream负载策略——ip哈希

ip_hash

语法:ip_hash 
默认值:none 
使用字段:upstream 
ip_hash 指令将基于客户端连接的IP地址来分发请求。
哈希的关键字是客户端的C类网络地址,这个功能将保证这个客户端请求总是被转发到一台服务器上,但是如果这台服务器不可用,那么请求将转发到另外的服务器上,这将保证某个客户端有很大概率总是连接到一台服务器。
无法将权重(weight)与ip_hash联合使用来分发连接。如果有某台服务器不可用,你必须标记其为“down”;

	#负载策略-ip_hash;根据客户端ip固定客户端请求的后端服务器
	upstream  backend2011  {
	    ip_hash;
        server   127.0.0.1:8080;
        server   127.0.0.1:8888;
        server   127.0.0.1:9999 down;
    }
	server {
        listen       2011;
        server_name  localhost;
        location  / {
          proxy_pass http://backend2011;
        }
        error_page   500 502 503 504  /50x.html;
        location  /50x.html {
            root   html;
        }
    }

ip_hash主要用于解决session问题,后端服务器若不想做session共享可采用此种策略

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章