5-nginx-负载均衡
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 模块
- 下载nginx-upstream-fair模块:https://github.com/gnosek/nginx-upstream-fair
- 将下载的文件上传到服务器并进行解压缩:
unzip nginx-upstream-fair-master.zip
- 重命名资源:
mv nginx-upstream-fair-master fair
- 将资源添加到Nginx模块中:
./configure --add-module=/root/fair
- 编译:
make
案例一:对所有请求实现一般轮询规则的负载均衡
案例二:对所有请求实现加权轮询规则的负载均衡
案例三:对特定资源实现负载均衡
案例四:对不同域名实现负载均衡
案例五:实现带有URL重写的负载均衡
Nginx四层负载均衡
需要添加stream模块的支持
- 将原有/usr/local/nginx/sbin/nginx进行备份
- 拷贝nginx之前的配置信息
- 在nginx的安装源码进行配置指定对应模块 ./configure –with-stream
- 通过make模板进行编译
- 将objs下面的nginx移动到/usr/local/nginx/sbin下
- 在源码目录下执行 make upgrade进行升级,这个可以实现不停机添加新模块的功能
stream指令和upstream指令
该指令提供在其中指定流服务器指令的配置文件上下文。和http指令同级
案例: