在业界,一直流传这样一句话:Nginx抗并发能力强!为什么Nginx抗并发能力强?原因是使用了非阻塞、异步传输
阻塞:如apache代理tomcat时,apache开启10个进程,同时处理着10个请求,在tomcat没有返回给apache结果时,apache是不会处理用户发出的第11个请求
非阻塞:如nginx代理tomcat时,nginx开启1000个并发,同时处理着1000个请求,在tomcat没有返回给nginx结果时,nginx会依然处理后面用户发给的请求
同步传输:比如squid代理tomcat时,浏览器发起请求,然后请求会squid立刻被转到后端服务器,于是在浏览器和后端服务器之间就建立了一个连接。在请求发起到请求完成,这条连接都是一直存在的。
异步传输:比如nginx代理tomcat时,浏览器发起请求,请求不会立刻转到后端服务器,而是将请求数据(header)先保存到nginx上,然后nginx再把这个请求发到后端服务器, 后端服务器处理完之后把数据返回到nginx上,nginx将数据流发到浏览器。

如上图所示假设用户执行一个上传文件操作,由于用户网速较慢,因此需要花半个小时才能把文件传到服务器。squid的同步代理在用户开始上传后就和后端tomcat建立了连接,半小时后文件上传结束,所以,后端tomcat服务器连接保持了半个小时;而nginx异步代理就是先将数据保存在nginx上,因此仅仅是nginx和用户 保持了半小时连接,后端服务器在这半小时内没有为这个请求开启连接,半小时后用户上传结束,nginx才将上传内容发到后端tomcat,nginx和后台之间的带宽 是很充裕的,所以只花了一秒钟就将请求发送到了后台,由此可见,后端服务器连接保持了一秒。

一、负载均衡
1、负载均衡模块(upstream)
Upstream模块是Nginx 负载均衡的主要模块,它提供了简单的办法来实现在轮询和客户端IP之间的后端服务器负载均衡,并可以对服务器进行健康检查。upstream并不处理请求,而是通过请求后端服务器得到用户的请求内容。在转发给后端时,默认是轮询,也可以是ip_hash。

Nginx常见负载均衡方式

1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2、weight:指定轮询几率,权重值越高,轮询几率越大

upstream bakend {server 192.168.1.1 weight=10;server 192.168.1.2 weight=10;
}

3、ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream resinserver{ip_hash;server 192.168.1.1:8080;server 192.168.1.2:8080;
}

4、fair(第三方):按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream resinserver{server server1;server server2;fair;
}

5、url_hash(第三方):按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

例:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法

upstream resinserver{server squid1:3128;server squid2:3128;hash $request_uri;hash_method crc32;
}

每个设备的状态设置为:
1.down 把后端标记为离线,仅限于ip_hash

2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:nginx在fail_timeout设定的时间内与后端服务器通信失败的次数超过max_fails设定的次数,则认为这个服务器不在起作用;在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server。
5.backup: 标记后端为备份服务器,若后端服务器全部无效时才启用

client_body_in_file_only 设置为On 可以讲client post过来的数据记录到文件中用来做debug
client_body_temp_path 设置记录文件的目录 可以设置最多3层目录
location 对URL进行匹配.可以进行重定向或者进行新的代理 负载均衡

upstream中使用ip_hash模式时,为什么weight选项会被忽略?
因为ip_hash模式使用的负载均衡算法是根据请求ip进行hash,而weight模式使用的wrr算法,所以不可同时使用

2、代理模块(proxy)
    Proxy为Nginx的代理模块,允许负责将用户的HTTP请求转发到后端服务器,同时也可以结合upstream模块,达到负载均衡的目的
注:proxy相关功能、指令很多,在此只讲与upstream相关的指令和功能

proxy模块常用指令解释:
proxy_pass:指定转发到后端服务器的请求,在location中指定,常用URI类型如下
TCP套接字:proxy_pass http://127.0.0.1:8080; 
Unix套接字:proxy_pass http://unix:/tmp/nginx.sock;
Upstream区段:proxy_pass http://nginx_pool;
域名:proxy_pass http://www.a.com;

proxy_pass使用域名命名时,为什么不能和server_name相同 ?

如上图所以,其数据访问流如下:
①用户访问www.a.com,server_name指令监听并接受www.a.com请求内容
②server_name将www.a.com的请求转交给proxy_pass指令处理
③proxy_pass接到请求后根据相应URI进行处理(此处URI为www.a.com),因为我们此处URI为域名,所以proxy_pass会请求DNS进行解析
④proxy_pass收到DNS解析结果(www.a.com),去请求server_name
由此可见如果proxy_pass的URI命名若和server_name命名相同,则形成一个请求环路。所以在配置proxy_pass的URI时,应避免和本server内的server_name重名

二、健康检查
   Nginx的健康检查主要体现在对后端服务提供健康检查,且功能被集成在upstream模块中,共有两个指令
max_fails:定义定义可以发生错误的最大次数
fail_timeout:nginx在fail_timeout设定的时间内与后端服务器通信失败的次数超过max_fails设定的次数,则认为这个服务器不在起作用;在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server。
健康检查机制:
   Nginx在检测到后端服务器故障后,nginx依然会把请求转向该服务器,当nginx发现timeout或者refused后,会把改请求会分发到upstream的其它节点,直到获得正常数据后,nginx才会把数据返回给用户,这也便体现了nginx的异步传输,而lvs/haproxy/apache责无法做到这些(在lvs/haproxy/apache里,每个请求都只有一次机会,假如用户发起一个请求,结果该请求分到的后端服务器刚好挂掉了,那么这个请求就失败了)

转载于:https://blog.51cto.com/qiangsh/1554624

Nginx负载均衡与健康检查相关推荐

  1. nginx负载均衡之健康检查

    严格来说,nginx到目前为止没有针对负载均衡后端节点的健康检测的模块,但是可以通过upstream负载均衡组中的max_fails=number和fail_timeout=time来间接实现,但还是 ...

  2. apache负载均衡 健康检查_Nginx负载均衡之健康检查

    负载均衡实例http{ upstream myserver { server 10.10.10.1 weight=3 max_fails=3 fail_timeout=20s; server 10.1 ...

  3. Nginx负载均衡配置和健康检查

    Nginx负载均衡配置和健康检查 注:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任. nginx的强大之处不必要我细说,当初第一次接触ngin ...

  4. nginx反向代理+缓存开启+url重写+负载均衡(带健康探测)的部署记录

    在日常运维工作中,运维人员会时常使用到nginx的反向代理,负载均衡以及缓存等功能来优化web服务性能. 废话不多说,下面对测试环境下的nginx反向代理+缓存开启+url重写+负载均衡(带健康探测) ...

  5. Nginx负载均衡集群介绍

    第1章 集群介绍 1.1 集群简介 1.1.1 什么是集群 简单说,集群就是一组(若干个)相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点(即集群中的每台计算机)都是运行 ...

  6. Nginx系列1: 正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡

    一.什么是正向代理.什么是反向代理 1. 正向代理,意思是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器 ...

  7. 一文带你了解SLB、F5、Nginx负载均衡

    前言: 负载均衡(Load Balance),其含义就是指将负载(工作任务)进行平衡.分发到多个操作单元上进行运行,负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备 ...

  8. nginx后端节点的健康检查

    简介 本文主要介绍nginx后端节点的健康检查,在此之前我们先来介绍下nignx反向代理主要使用的模块. nginx原生模块介绍 我们在使用nginx做反向代理都会使用到以下两个模块: 1.ngx_h ...

  9. nginx负载均衡集群(二)

    nginx负载均衡配置实战 一.配置基于域名虚拟主机的web节点 web02和web01做同样的操作,nginx配置文件如下: [root@web01 conf]# cat nginx.conf wo ...

  10. Nginx负载均衡配置策略

    转自:http://www.freeoa.net/osuport/cluster/nginx-load-equilibrium-configuration-strategy_1652.html Ngi ...

最新文章

  1. CFRunLoopRef 的内部逻辑(向 ibireme学习)
  2. 一键ghost奥运版_超详细的纯净版windows系统重装示例
  3. python与办公自动化-用 Python 自动化办公,我与大神之间的差距一下就
  4. 使用electron脚手架electron-vue
  5. CF710F-String Set Queries【AC自动机,二进制分组】
  6. 前端基础-html-表格的基本标签和相关属性
  7. VMware Workstation下载,安装centos7.6 配置【图文教程】
  8. sql decimal 转string_音频怎么转文字?这个软件带你体验飞一般的感觉
  9. Oracle导入大数据量(百万以上)dmp文件,报错ora-12592 :包错误
  10. 详解微信小程序开发(项目从零开始)
  11. 深入浅出Linux设备驱动编程--引言
  12. 三极管共射放大电路调试
  13. 翼支付门户架构之搭建SpringMvc环境
  14. [NLP]高级词向量表达之Word2vec详解(知识点全覆盖)
  15. 安装Kubernets管理平台Ratel
  16. FreeSWITCH+CentOS7.9+firewalld+fail2ban Internet部署的安全加固实战
  17. Unity UGUI DoTween 学习笔记
  18. 书写历史的甲骨文--ORACLE公司传奇
  19. windows C 盘扩容
  20. 数据仓库之数据同步策略

热门文章

  1. (转)Linux系统中sysctl命令详解 sysctl -p、sysctl -a、sysctl -w
  2. matplotlib实现数据的可视化
  3. Ubuntu16.04安装java(Oracle jre)
  4. javascript -- 事件代理
  5. Linux下进程通信方式(简要概述)
  6. 操作 Wave 文件(5): 获取 Wave 文件的格式信息
  7. 查询性能优化 in and union
  8. [13]2019-ICML-Active Learning for Probabilistic Structured Prediction of Cuts and Matchings
  9. ZED2 ROS下bag包的录制与回放数据
  10. 作业要求 20181030-1 Alpha发布用户使用报告