一、upstream模块简介

  Nginx的负载均衡功能依赖于ngx_http_upsteam_module模块,所支持的代理方式包括proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass和grpc_pass。ngx_http_upstream_module模块有允许Nginx定义一组或多组服务组,使用的可以通过proxy_pass代理方式把网站的请求发送到事先定义好的对应upstream组的名字上。upstream模块可以实现负载均衡,其实隐含了一个重要功能那就是冗余,在一个web节点故障的时候,配置了upstream时可以自动切换到正常工作的节点。

二、负载均衡算法简介

  调度算法一般分为两类:第一类为静态调度算法,即负载均衡器根据自身设定的规则进行分配,不需要考虑后端节点服务器的情。第二类为动态调度算法,即负载均衡器会根据后端节点的当前状态来决定是否分发请求。

1、轮询

  rr 轮循即round robin 默认调度算法,静态调度算法。客户端请求顺序把客户端的请求逐一分配到不同的后端节点服务器,这相当于 LVS 中的 rr 算法,如果后端节点服务器宕机(默认情况下nginx 只检测80端口)。宕机的服务器会自动从节点服务器池中剔除,以便客户端的用户访问不受影响。新的请求会分配给正产的服务器。

2、权重轮询

  wrr即weight 权重轮循,静态调度算法。在 rr 轮循算法的基础上加上权重,即为权重轮循算法,当使用该算法时,权重和用户访问成正比,权重值越大,被转发的请求也就越多。可以根据服务器的配置和性能指定权重值大小,有效解决新旧服务器性能不均带来的请求分配问题。

3、IP哈希

  ip_hash是静态调度算法,每个请求按客户端 IP 的 hash 结果分配,当新的请求到达时,先将其客户端IP通过哈希算法哈希出一个值,在随后的客户端请求中,客户 IP 的哈希值只要相同,就会被分配至同一台服务器,该调度算法可以解决动态网页的 session 共享问题,但有时会导致请求分配不均,即无法保证 1:1 的负载均衡,因为在国内大多数公司都是 NAT 上网模式,多个客户端会对应一个外部 IP,所以,这些客户端都会被分配到同一节点服务器,从而导致请求分配不均。LVS 负载均衡的 -P 参数、keepalived 配置里的 persistence_timeout 50 参数都类似这个 Nginx 里的 ip_hash 参数,其功能均为解决动态网页的 session 共享问题。

4、最小连接数

  least_conn是动态调度算法,会根据后端节点的连接数来决定分配情况,哪个机器连接数少就分发。

5、最短响应时间

  最短响应时间(fair)调度算法是动态调度算法,会根据后端节点服务器的响应时间来分配请求,响应时间端的优先分配。这是更加智能的调度算法。此种算法可以依据页面大小和加载时间长短只能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx 本身是不支持 fair 调度算法的,如果需要使用这种调度算法,必须下载 Nginx 的相关模块 upstream_fair。

6、url_hash算法

  url_hash算法是动态调度算法,按访问 URL 的 hash 结果来分配请求,使每个 URL 定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率命中率。(多用于后端服务器为缓存时的场景下)Nginx 本身是不支持 rul_hash的,如果需要使用这种调度算法,必须安装 Nginx 的hash 模块软件包。

三、配置示例

1、配置示例模板

upstream backend {server backend1.example.com       weight=5;  #执行realserver,可以赋权重server backend2.example.com:8080; server unix:/tmp/backend3;server backup1.example.com:8080   backup;  #backup表示该节点为热备节点,激活节点失效时启用server backup2.example.com:8080   down;  #下线服务器,可以在real服务器需要维护时配置
}server {listen 80;  #listen、server_name这些正常配置server_name   www.test.com;location / {proxy_pass http://backend;  ##反向代理执行定义的upstream名字}
}

2、权重轮询配置示例

upstream  show {server 192.168.0.141 weight=1;server 192.168.0.142 weight=2; }

3、ip_hash配置示例

 upstream show {ip_hash;server 192.168.0.141 ;server 192.168.0.142 ;}

4、fair配置示例

 upstream show {fair;server 192.168.0.141 ;server 192.168.0.142 ;}

5、least_conn配置示例

 upstream show {least_conn;server 192.168.0.141 ;server 192.168.0.142 ;}

6、url_hash配置示例

 upstream show {server 192.168.0.141 ;server 192.168.0.142 ;hash $request_uri;hash_method crc32;}

四、负载均衡效果展示

1、部署2个web服务器

  分别在s142主机和s142主机部署2个Tomcat服务,服务访问页面内容如下:

2、配置nginx服务

upstream show {ip_hash ;  #使用ip_hash负载均衡调度算法server 192.168.10.141:8080 ;server 192.168.10.142:8080 ;}
server {listen  80;  #listen、server_name这些正常配置server_name   www.test.com;access_log /var/log/nginx/test.access.log;location / {proxy_pass http://show;  ##反向代理执行定义的upstream名字}
}

3、配置域名解析

  这是模拟测试,使用测试域名,通过修改hosts文件(C:\Windows\System32\drivers\etc\hosts)实现直接通过域名访问,实际应用需要申请域名并解析。

4、访问域名验证

5、停止s142的web服务后再次访问

  停止s142的web服务后应用自动切换到了s141节点,其实upstream模块可以作为负载均衡,更重要的是实现冗余,如果是单机部署的web应用在出现节点故障时服务即无法访问,通过upstream可以实现多节点冗余。

6、修改调度算法为轮询

Nginx之负载均衡upstream模块简介和使用相关推荐

  1. Nginx做负载均衡的模块

    负载均衡模块 使用nginx做负载均衡的两大模块: upstream 定义负载节点池 ocation 模块 进行URL匹配. proxy模块 发送请求给upstream定义的节点池 upstream模 ...

  2. nginx源码编译、负载均衡及模块的扩展

    1.nginx源码编译 实验环境: iptables和selinux关闭 redhat6.5 nginx:test1: 172.25.1.11 [root@test1 ~]# ls nginx-1.1 ...

  3. Nginx学习之负载均衡fair模块

    2019独角兽企业重金招聘Python工程师标准>>> Nginx学习之负载均衡fair模块 2017-04-10 20:27 写在开始 前面对Nginx的三种负载均衡实现做了一个简 ...

  4. Nginx简介及使用Nginx实现负载均衡的原理【通俗易懂,言简意赅】

    nginx 这个轻量级.高性能的 web server 主要可以干两件事情:〉直接作为http server(代替apache,对PHP需要FastCGI处理器支持):〉另外一个功能就是作为反向代理服 ...

  5. Nginx四层负载均衡模块添加

    Nginx四层负载均衡 Nginx在1.9之后,增加了一个stream模块,用来实现四层协议的转发.代理.负载均衡等.stream模块的用法跟http的用法类似,允许我们配置一组TCP或者UDP等协议 ...

  6. 【转载】Nginx简介及使用Nginx实现负载均衡的原理

    原文地址:http://blog.csdn.net/u014749862/article/details/50522276 是什么? Nginx 这个轻量级.高性能的 web server 主要可以干 ...

  7. Nginx网络负载均衡,负载均衡,网络负载,网络均衡

    本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题 文件上传下载 通常解决服务器负载问题,都会通过多服务器分载来解决.常见的解决方案有: 网站入口通过分站链接负载(天空软件站,华军软 ...

  8. Nginx搭建负载均衡集群

    (1).实验环境 youxi1 192.168.5.101 负载均衡器 youxi2 192.168.5.102 主机1 youxi3 192.168.5.103 主机2 (2).Nginx负载均衡策 ...

  9. lnmp架构——nginx的负载均衡

    lnmp架构--nginx的负载均衡 1 什么是nginx 2 nginx的作用 3 nginx的特点 4 nginx的安装以及优化 4.1 安装nginx 4.2 优化 5 nginx主配置文件操作 ...

最新文章

  1. _ISD-SMG518L2CT-F 海康威视测温人脸安检门 温度精度±0.5℃ 人脸抓拍金属探测
  2. MATLAB知识点1
  3. 【Flask】Jinja2模板之过滤器
  4. 鸿蒙os2.0通知栏,网友上手鸿蒙手机OS 2.0公测版:界面与EMUI已有明显不同
  5. SQL Server:移动系统数据库
  6. java jobdetail_Java JobDetail.setName方法代码示例
  7. 【机器学习课程笔记(吴恩达)】1.3 监督学习
  8. Mobx | 强大的状态管理工具 | 可以用Mobx来替代掉redux
  9. cmd管道无法接收特定程序返回值_CQRS amp; Event Sourcing — 解决检索应用程序状态问题的一剂良方...
  10. 良心推荐:40个Google Chrome扩展程序
  11. cad2012打开后闪退_2012cad闪退怎么解决win10_cad2012闪退win10系统如何修复
  12. python中的可迭代是什么意思_Python可迭代跟迭代器的区别
  13. 视频转GIF+GIF录制
  14. 性能测试(二)-重要性能指标TPS、RT
  15. 表情包gif动图太大怎么处理
  16. 【Jboss EAP】初识JBoss EAP
  17. 欢迎评论指正,如有问题可在具体文章下或本文留言,看见就回!
  18. fegin get请求调用报错
  19. taglist 修复中文路径的问题
  20. 数字科技行业的“挖井人”:京东数科不做一锤子买卖

热门文章

  1. 【Springboot-Listener】整合监听器Listener
  2. 故障代码0xC004F074,系统与KMS服务器之间激活失败的解决办法
  3. 设计模式之单例模式应用场景篇
  4. js导出excel单元格内换行符代码_javascript导出excel或者csv如何让单元格内容换行?...
  5. 两种方法,巧看Mac电脑电池使用情况及健康状况
  6. redis原理之快照(rdb)原理
  7. 关于win10系统JDK安装javac不是内部或外部命令等问题
  8. EA开发系列---开发第一个交易EA
  9. vwap 公式_【IB交易者词汇】交易量加权平均价格(VWAP )
  10. 解决ecshop退出登录会清空购物车的bug优化最完美方法