nginx 负载均衡策略
Nginx的upstream支持如下六种方式的分配算法,分别是:
算法名称 | 说明 |
---|---|
轮询 | 默认方式 |
weight | 权重方式 |
ip_hash | 依据ip分配方式 |
least_conn | 依据最少连接方式 |
url_hash | 依据URL分配方式 |
fair | 依据响应时间方式 |
轮询
是upstream模块负载均衡默认的策略。每个请求会按时间顺序逐个分配到不同的后端服务器。轮询不需要额外的配置。
upstream backend{ server 192.168.1.100:9001 weight=1; server 192.168.1.100:9002; server 192.168.1.100:9003;
}
server { listen 8083; server_name localhost; location /{ proxy_pass http://backend; }
}
weight加权[加权轮询]
weight=number:用来设置服务器的权重,默认为1,权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的,所有此策略比较适合服务器的硬件配置差别比较大的情况。
upstream backend{ server 192.168.1.100:9001 weight=10; server 192.168.1.100:9002 weight=5; server 192.168.1.100:9003 weight=3;
}
server { listen 8083; server_name localhost; location /{ proxy_pass http://backend; }
}
ip_hash
当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上。这样,当来自某一个IP的用户在后端Web服务器A上登录后,在访问该站点的其他URL,能保证其访问的还是后端web服务器A。
语法 | ip_hash; |
---|---|
默认值 | — |
位置 | upstream |
upstream backend{ ip_hash; server 192.168.1.100:9001; server 192.168.1.100:9002; server 192.168.1.100:9003;
}
server { listen 8083; server_name localhost; location /{ proxy_pass http://backend; }
}
需要额外多说一点的是使用ip_hash指令无法保证后端服务器的负载均衡,可能导致有些后端服务器接收到的请求多,有些后端服务器接收的请求少,而且设置后端服务器权重等方法将不起作用。可以采用redis来存储session。
least_conn
最少连接,把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。
upstream backend{ least_conn; server 192.168.1.100:9001; server 192.168.1.100:9002; server 192.168.1.100:9003;
}
server { listen 8083; server_name localhost; location /{ proxy_pass http://backend; }
}
此负载均衡策略适合请求处理时间长短不一造成服务器过载的情况。
url_hash
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用url_hash,可以使得同一个url(也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再此收到请求,就可以从缓存中读取。
upstream backend{ hash &request_uri; server 192.168.1.100:9001; server 192.168.1.100:9002; server 192.168.1.100:9003;
}
server { listen 8083; server_name localhost; location /{ proxy_pass http://backend; }
}
fair
fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。那么如何使用第三方模块的fair负载均衡策略。
upstream backend{ fair; server 192.168.1.100:9001; server 192.168.1.100:9002; server 192.168.1.100:9003;
}
server { listen 8083; server_name localhost; location /{ proxy_pass http://backend; }
}
但是如何直接使用会报错,因为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.使用./configure命令将资源添加到Nginx模块中
./configure --add-module=/root/fair
5.编译
make
编译可能会出现如下错误,ngx_http_upstream_srv_conf_t结构中缺少default_port
解决方案:
在Nginx的源码中 src/http/ngx_http_upstream.h,找到ngx_http_upstream_srv_conf_s,在模块中添加添加default_port属性
in_port_t default_port
然后再进行make.
6.更新nginx
6.1将sbin目录下的nginx进行备份
mv /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginxold
6.2将安装目录下的objs中的nginx拷贝到sbin目录
cd objs
cp nginx /usr/local/nginx/sbin
6.3更新nginx
cd ../
make upgrade
7.编译测试使用Nginx
nginx 负载均衡策略相关推荐
- 1,Nginx负载均衡策略upstream,六种策略
upstream提供负载均衡功能,支持6种负载分配方式,默认是轮询分配方式 负载均衡作用 转发功能 故障转移 恢复添加 工作流程 分析客户端请求,构建调用服务器 调用ngx_http_upstream ...
- Nginx负载均衡策略介绍
负载均衡策略 介绍完Nginx负载均衡的相关指令后,我们已经能实现将用户的请求分发到不同的服务器上,那么除了采用默认的分配方式以外,我们还能采用什么样的负载算法? Nginx的upstream支持如下 ...
- Nginx负载均衡策略之fair介绍
fair fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小.加载时间长短智能的进行负载均衡.那么如何使用第三方模块的fair负载均衡策略. upstream backend{f ...
- Nginx 负载均衡策略之加权轮询分析
为什么80%的码农都做不了架构师?>>> nginx 作为方向代理服务,能作为后端服务器提供负载均衡功能,其中加权轮询策略是默认使用的负载均衡策略. 直观上就是将来自客户的请求 ...
- Nginx负载均衡策略 - least_conn 最少连接
配置 $ vim $NGINX_HOME/conf/nginx.conf worker_processes auto; events {use epoll;worker_connections 655 ...
- DNS负载均衡与NGINX负载均衡策略
负载均衡是指的是把请求均匀的分摊到多个服务器上处理.一般常见的负载均衡有两种:①客户端与反向代理服务器之间的DNS负载均衡②反向代理服务器与应用服务器之间的负载均衡(这种负载均衡有很多,可以是webl ...
- nginx负载均衡策略
nginx的负载均衡策略有4种: 轮询(默认) 最基本的配置方法,它是upstream的默认策略,每个请求会按时间顺序逐一分配到不同的后端服务器. 参数有: 项目 Value fail_timeout ...
- Nginx负载均衡策略之least_conn
least_conn 最少连接,把请求转发给连接数较少的后端服务器.轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同:但是,有些请求占用的时间很长,会导致其所在的后端负载较高.这种情况下,l ...
- Nginx负载均衡策略之轮询与加权轮询
轮询 是upstream模块负载均衡默认的策略.每个请求会按时间顺序逐个分配到不同的后端服务器.轮询不需要额外的配置. upstream backend{server 192.168.200.146: ...
最新文章
- Windows Server 2016 部署Hyper-V
- Cython fatal error C1083: 无法打开包括文件: “numpy/arrayobject.h”: No such file or directory
- 如何在asp.net页面使用css和js
- 在linux系统上运行新加的内核模块(驱动模块) 需要安装的东西
- linux下怎样查看环境变量,Linux下查看和添加环境变量(示例代码)
- ThinkPHP(3)SQL查询语句
- 不是纯技术的管理技术
- BZOJ 1192 [HNOI2006]鬼谷子的钱袋 (思维)
- 个人向常用的一些函数的汇总成一个简易模板
- 2021-01-18
- 小工具-FTP文件传输(FlashFXP4.4.2 )
- 我的世界服务器java出错_如何看懂 游戏《Minecraft》的错误报告 客户端/服务端...
- 在上海社保千万不要断,如果断了,一定要这样做!
- c语言 switch案例,c语言switch case语句使用例子
- apns java 证书_GitHub - linyu19872008/apns-http2-java: 苹果推送apns的http2解决方案
- 标准差(Standard Deviation) 和 标准误差(Standard Error)
- win10系统安装jdk8,并且配置环境变量教程
- 时空跳跃者的魔法(codevs3315)
- QtCreator编译错误: -1: error: [debug/main.o] Error 1 问题的解决办法
- IMX6 VPU解码流程