Nginx八层负载均衡

upstream指令

该指令是用来定义一组服务器,它们可以是监听不同端口的服务器,并且也可以是同时监听TCP和Unix socket的服务器。

服务器可以指定不同的权重,默认为1


server指令

该指令用来指定后端服务器的名称和一些参数,可以使用域名、IP、端口或者Unix socket


负载均衡案例

客户端发送请求,通过nginx进行负载均衡到各个服务器上(proxy_pass指令)


负载均衡状态

代理服务器在负责均衡调度中的状态有以下几个:

1)down:

将该服务器标记为永久不可用,该代理服务器不参与负载均衡

down状态一般会对需要停机维护的服务器进行设置


2)backup

将该服务器标记为备份服务器,当主服务器不可用时,将用来传递请求


当正常访问时,因为此时9002已经作为了备份服务器,所以nginx只负载均衡到9003端口。

当9003端口不可用时,9002将传递请求,此时nginx负载均衡到9002端口


3)max_fails 和 fail_timeout

  • max_fails=number

设置允许请求代理服务器失败的次数,默认为1

  • fail_timeout=time

设置经过max_fails失败后,服务暂停的时间,默认为10s

  • 案例

当9003服务器出问题后,如果访问失败的次数达到3次后,在15s内 9003服务器将不再提供服务


4)max_conns

max_conns=number

用来设置代理服务器同时活动链接的最大数量,默认为0,表示不限制

使用该配置可以根据后端服务器处理请求的并发量来进行设置,防止后端服务器被压垮。


负载均衡策略

算法名称 说明
轮询 默认方式
weight 权重方式
ip_hash 依据ip分配方式
least_conn 依据最少连接方式
url_hash 依据URL分配方式
fair 依据响应时间方式

轮询

是upstream模块负载均衡默认的策略,每个请求会按时间顺序注意分配到不同的后端服务器


weight加权[加权轮询]

weight=number:用来设置服务器的权重

权重数据越大,被分配到的概率就越高


ip_hash

当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上


least_conn

最少连接,把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同

但是,有些请求占用的时间很长,会导致其所在的后端负载较高

在这种情况下,使用least_conn可以达到更好的方法(适合请求长短不一导致服务器过载的情况)


url_hash

按访问的url的hash结果来分配请求,使某个url定向到同一个后端服务器,要配合缓存命中来使用。

使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取

fair

fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。

安装 nginx-upstream-fair 模块

  1. 下载nginx-upstream-fair模块:https://github.com/gnosek/nginx-upstream-fair
  2. 将下载的文件上传到服务器并进行解压缩:unzip nginx-upstream-fair-master.zip
  3. 重命名资源:mv nginx-upstream-fair-master fair
  4. 将资源添加到Nginx模块中:./configure --add-module=/root/fair
  5. 编译:make

案例一:对所有请求实现一般轮询规则的负载均衡

案例二:对所有请求实现加权轮询规则的负载均衡

案例三:对特定资源实现负载均衡


案例四:对不同域名实现负载均衡


案例五:实现带有URL重写的负载均衡


Nginx四层负载均衡

需要添加stream模块的支持

  1. 将原有/usr/local/nginx/sbin/nginx进行备份
  2. 拷贝nginx之前的配置信息
  3. 在nginx的安装源码进行配置指定对应模块 ./configure –with-stream
  4. 通过make模板进行编译
  5. 将objs下面的nginx移动到/usr/local/nginx/sbin下
  6. 在源码目录下执行 make upgrade进行升级,这个可以实现不停机添加新模块的功能

stream指令和upstream指令

该指令提供在其中指定流服务器指令的配置文件上下文。和http指令同级

案例: