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. 1,Nginx负载均衡策略upstream,六种策略

    upstream提供负载均衡功能,支持6种负载分配方式,默认是轮询分配方式 负载均衡作用 转发功能 故障转移 恢复添加 工作流程 分析客户端请求,构建调用服务器 调用ngx_http_upstream ...

  2. Nginx负载均衡策略介绍

    负载均衡策略 介绍完Nginx负载均衡的相关指令后,我们已经能实现将用户的请求分发到不同的服务器上,那么除了采用默认的分配方式以外,我们还能采用什么样的负载算法? Nginx的upstream支持如下 ...

  3. Nginx负载均衡策略之fair介绍

    fair fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小.加载时间长短智能的进行负载均衡.那么如何使用第三方模块的fair负载均衡策略. upstream backend{f ...

  4. Nginx 负载均衡策略之加权轮询分析

    为什么80%的码农都做不了架构师?>>>    nginx 作为方向代理服务,能作为后端服务器提供负载均衡功能,其中加权轮询策略是默认使用的负载均衡策略. 直观上就是将来自客户的请求 ...

  5. Nginx负载均衡策略 - least_conn 最少连接

    配置 $ vim $NGINX_HOME/conf/nginx.conf worker_processes auto; events {use epoll;worker_connections 655 ...

  6. DNS负载均衡与NGINX负载均衡策略

    负载均衡是指的是把请求均匀的分摊到多个服务器上处理.一般常见的负载均衡有两种:①客户端与反向代理服务器之间的DNS负载均衡②反向代理服务器与应用服务器之间的负载均衡(这种负载均衡有很多,可以是webl ...

  7. nginx负载均衡策略

    nginx的负载均衡策略有4种: 轮询(默认) 最基本的配置方法,它是upstream的默认策略,每个请求会按时间顺序逐一分配到不同的后端服务器. 参数有: 项目 Value fail_timeout ...

  8. Nginx负载均衡策略之least_conn

    least_conn 最少连接,把请求转发给连接数较少的后端服务器.轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同:但是,有些请求占用的时间很长,会导致其所在的后端负载较高.这种情况下,l ...

  9. Nginx负载均衡策略之轮询与加权轮询

    轮询 是upstream模块负载均衡默认的策略.每个请求会按时间顺序逐个分配到不同的后端服务器.轮询不需要额外的配置. upstream backend{server 192.168.200.146: ...

最新文章

  1. Windows Server 2016 部署Hyper-V
  2. Cython fatal error C1083: 无法打开包括文件: “numpy/arrayobject.h”: No such file or directory
  3. 如何在asp.net页面使用css和js
  4. 在linux系统上运行新加的内核模块(驱动模块) 需要安装的东西
  5. linux下怎样查看环境变量,Linux下查看和添加环境变量(示例代码)
  6. ThinkPHP(3)SQL查询语句
  7. 不是纯技术的管理技术
  8. BZOJ 1192 [HNOI2006]鬼谷子的钱袋 (思维)
  9. 个人向常用的一些函数的汇总成一个简易模板
  10. 2021-01-18
  11. 小工具-FTP文件传输(FlashFXP4.4.2 )
  12. 我的世界服务器java出错_如何看懂 游戏《Minecraft》的错误报告 客户端/服务端...
  13. 在上海社保千万不要断,如果断了,一定要这样做!
  14. c语言 switch案例,c语言switch case语句使用例子
  15. apns java 证书_GitHub - linyu19872008/apns-http2-java: 苹果推送apns的http2解决方案
  16. 标准差(Standard Deviation) 和 标准误差(Standard Error)
  17. win10系统安装jdk8,并且配置环境变量教程
  18. 时空跳跃者的魔法(codevs3315)
  19. QtCreator编译错误: -1: error: [debug/main.o] Error 1 问题的解决办法
  20. IMX6 VPU解码流程

热门文章

  1. 全网最全的Python常见命令大全,建议收藏,以防备用
  2. 5g云游戏的战略布局
  3. 用自定义函数来求1的阶乘加到5的阶乘
  4. 【Java高级程序设计】注解实验
  5. memset()函数使用详解
  6. Ubuntu下使用draw.io绘制逻辑流程图
  7. MySQL自增字段不连续的原因和解决方法
  8. UNET家族网络之Unet++(附带了Nestnet、uent、PSPnet等)
  9. 紧握入场门票,字节跳动游戏地位能否逆转?
  10. 远程连接MySQL报错1045解决方案