一、Nginx是如何实现高并发的

service nginx start之后,然后输入#ps -ef|grep nginx,会发现Nginx有一个master进程和若干个worker进程,这些worker进程是平等的,都是被master fork过来的。在master里面,先建立需要listen的socket(listenfd),然后再fork出多个worker进程。当用户进入nginx服务的时候,每个worker的listenfd变的可读,并且这些worker会抢一个叫accept_mutex的东西,accept_mutex是互斥的,一个worker得到了,其他的worker就歇菜了。而抢到这个accept_mutex的worker就开始“读取请求--解析请求--处理请求”,数据彻底返回客户端之后(目标网页出现在电脑屏幕上),这个事件就算彻底结束。

nginx用这个方法是底下的worker进程抢注用户的要求,同时搭配“异步非阻塞”的方式,实现高并发量。

注:在nginx.conf里第二行就是work_process,有默认是4的,也可以更改成auto,这个值不是越大越好,要可实际情况而定。

二、负载均衡

随着业务不断拓展、用户量不断增多,原本一台Nginx代理的服务器已经显得吃力,不论在性能、响应速度等都显得力不从心,所以需要对后台服务器做负载均衡,缓解一台或几台服务器的高并发请求压力。

1、Upstream

负载均衡需要使用Nginx支持的HTTP Upstream模块,该模块通过一个简单的算法调度来实现客户端ip到服务端负载均衡。Upstream目前支持4种调度算法:

A、默认的轮循

默认的调度算法,在处理客户端的每次请求时,按照时间顺序逐一分配到均衡服务器,可以设定服务器的权重(weight)比值,比值越大访问的几率越大,一般用在后台服务器列表访问性能不均匀情况。

B、ip_hash

记录每次访客的ip地址,固定分配给指定的服务器,有效的解决了不同服务器网页Session的问题。

C、fair

根据后端服务器响应的时间长短来分配,响应时间越短被分配几率越大,它属于第三方插件,Nginx本身并不支持,如需使用必须下载Nginx的upstream_fair模块。

D、url_hash

按访问的地址url的hash值结果分配, 使每个url定向到指定的服务器,可以提高后端服务器的缓存效率,同样的,Nginx本身也不支持该算法,需要第三方的hash软件。

2、Upstream支持的状态参数

在Nginx的Upstream模块中,除了可以通过server指定到特定服务器和端口,还可以设置服务器在负载均衡中的状态。目前的状态如下:

A、down

代表当前的服务器server不参与负载均衡。

B、backup

预留的备用设备,也就是当其它的服务器故障或忙时才会分配它给客户请求,所以它的压力最小。

C、max_fails

服务器server允许请求失败的次数,默认为1次,当失败次数超过限定的次数,就会返回proxy_next_upstream错误信息。

D、fail_timeout

当经历了max_fails的次数后,暂停服务的时间,一般与max_fails配合使用。

注意:

当服务器的调度算法为ip_hash时,服务器在负载均衡中的状态不能是weight和backup,理由很明显,不做说明。

3、Nginx配置负载

Nginx中配置负载均衡比较简单,只需要修改nginx.conf配置文件,添加均衡服务器列表,以及使用proxy_pass引用服务器列表即可,具体如下:

A、upstream

#upstream

upstream webservers {

server 127.0.0.1:8080 weight=1;

server 127.0.0.1:8081 weight=1;

}

注:

该配置放在http{}内,server{}之外,否则会报错。

B、proxy_pass

location / {

proxy_pass http://webservers;

proxy_set_header X-Real-IP$remote_addr;

}

注:

引用均衡服务器的列表

C、测试均衡

浏览器输入:http://127.0.0.1 反复刷新页面,如果看到test1和test2服务端交替出现,那么说明负载已经成功(如果其中一台服务器挂掉,如test1挂掉,那么只会给test2服务器分配),测试结果如下:

4、Nginx的健康状态检查

配置upstream状态max_fails和fail_timeout,对Nginx健康检查。

A、upstream

#upstream

upstream webservers {

server 127.0.0.1:8080 weight=1max_fails=2 fail_timeout=2;

server 127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=2;

}

B、测试

这里的结果与上面的测试结果是一样的,这是添加了max_fails和fail_timeout。

5、配置backup服务器

这里需要添加一台backup虚拟机服务器,具体这里不介绍。服务器地址为:

http://backup.cwteam.com 端口:8082 内容:Error is now,please check theerror.log

A、upstream

#upstream

upstream webservers {

server 127.0.0.1:8080 weight=1max_fails=2 fail_timeout=2;

server 127.0.0.1:8081 weight=1max_fails=2 fail_timeout=2;

server 127.0.0.1:8082 backup;

}

B、测试

为了模拟在test1和test2服务器都不工作,这里我将test1和test2的虚拟机配置文件.conf中的监听端口分别改为:8084和8085,然后记得重启Nginx服务,这样在服务器列表中的test1和test2就不能正常工作。

输入:http://127.0.0.1 反复刷新,结果显示:

上图,说明了在test1和test2都坏掉之后,backup算法的服务器就会被访问了,下面来继续总结ip_hash算法。

6、配置ip_hash服务器

配置ip_hash算法调度服务器时,不能设置服务器的状态为weight和backup,所以需要关闭Nginx.conf中的backup状态服务器,配置完成记得重启nginx,如下:

A、upstream

#upstream

upstream webservers {

ip_hash;

server 127.0.0.1:8080 weight=1max_fails=2 fail_timeout=2;

server 127.0.0.1:8081 weight=1max_fails=2 fail_timeout=2;

#server 127.0.0.1:8082 backup;

}

B、测试

输入:http://127.0.0.1 反复刷新页面 如果调度的服务器总是test1或是test2时,那就说明ip_hash算法服务器设置成功,结果如下:

7、统计Web链接的次数

$ netstat -an | grep :8080 | wc -l

12

注意:

使用虚拟主机验证Nginx反向代理及负载均衡是有限制的,正常应该是为每个服务器配置web服务器,所以对应的均衡服务器配置验证时,因该以关闭web服务器为准,而且在对应的服务器中可以查看日志信息。

nginx 实现高并发和高负载的更多相关文章

  1. 在高并发、高负载的情况下,如何给表添加字段并设置DEFAULT值?

    在高并发.高负载的情况下,如何给表添加字段并设置DEFAULT值? 在Oracle 12c之前,当Oracle表数据量上亿时,对表执行“ALTER TABLE XXX ADD COLUMN_XX VA ...

  2. java亿级流量电商详情页系统的大型高并发与高可用缓存架构实战视频教程

    亿级流量电商详情页系统的大型高并发与高可用缓存架构实战 完整高清含源码,需要课程的联系QQ:2608609000 1[免费观看]课程介绍以及高并发高可用复杂系统中的缓存架构有哪些东西2[免费观看]基于 ...

  3. 【Distributed】大型网站高并发和高可用

    一.DNS域名解析 二.大型网站系统应有的特点 三.网站架构演变过程 3.1 传统架构 3.2 分布式架构 3.3 SOA架构 3.4 微服务架构 四.高并发设计原则 4.1 拆分系统 4.2 服务化 ...

  4. [ 高并发]Java高并发编程系列第二篇--线程同步

    高并发,听起来高大上的一个词汇,在身处于互联网潮的社会大趋势下,高并发赋予了更多的传奇色彩.首先,我们可以看到很多招聘中,会提到有高并发项目者优先.高并发,意味着,你的前雇主,有很大的业务层面的需求, ...

  5. 优秀开源项目之三:高性能、高并发、高扩展性和可读性的网络服务器架构State Threads

    译文在后面. State Threads for Internet Applications Introduction State Threads is an application library ...

  6. tcp/udp高并发和高吐吞性能测试工具

    在编写一个网络服务的时候都比较关心这个服务能达到多少并发连接,而在这连接的基础上又能达到一个怎样的交互能力.编写服务已经是一件很花力气的事情,而还要去编写一个能够体现结果的测试工具就更加消耗工作时间. ...

  7. 5.如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么?

    作者:中华石杉 面试题 如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么? 面试官心理分析 其实问这个问题,主要是考考你,redis ...

  8. 面试系列15 如何保证Redis的高并发和高可用

    就是如果你用redis缓存技术的话,肯定要考虑如何用redis来加多台机器,保证redis是高并发的,还有就是如何让Redis保证自己不是挂掉以后就直接死掉了,redis高可用 我这里会选用我之前讲解 ...

  9. 5. 支撑高并发,高可用,海量数据备份恢复的Redis重要性

    商品详情页的架构实现 缓存架构 第一块儿,要掌握的很好的,就是redis架构 高并发,高可用,海量数据,备份,随时可以恢复,缓存架构如果要支撑这些要点,首先呢,redis就得支撑 redis架构,每秒 ...

随机推荐

  1. 二元变量图形的pandas方法

    数据加载: 1.散点图 上图使用下采样的方法选取了100个样本点,因为把所有的数据加载进来太多了. 2.Hexplot图 上图是一个散点图再加上热力标注的形式,可以更准确的帮助我们看出数据集中在哪些区 ...

  2. React中,input外边如果包一个div,可以把input的onChange事件绑定到div上面,并且也生效

    最近第一次开始学习封装组件,遇到几个比较神奇的问题. 首先就是如果input外边包一个div,如果把input的onChange事件绑定到div上,也会生效 <div onChange={(e) ...

  3. 销售订单(SO)-API-更新销售订单

    更新销售订单和创建销售订单差不多,调用的API相同,只是传入的时候标识不一样:operation := oe_globals.g_opr_update 示例代码如下: PROCEDURE update ...

  4. 为何一线城市的企业更愿意选择 Spring Cloud?

    最近公司正在搭建微服务框架,处于小白的我,赶紧借书,上网,实操的学习了一下,下面是一些自己的入门的总结: 目录: 一.怎么理解Spring Cloud? 一.Spring Cloud 的优势在哪? 一 ...

  5. RobHess的SIFT代码解析之RANSAC

    平台:win10 x64 +VS 2015专业版 +opencv-2.4.11 + gtk_-bundle_2.24.10_win32 主要参考:1.代码:RobHess的SIFT源码:SIFT+KD ...

  6. Hadoop_17_MapRduce_案例2_实现用户手机流量统计(ReduceTask并行度控制)

    需求:1.统计每一个用户(手机号)所耗费的总上行流量.下行流量,总流量 1.数据如下:保存为.dat文件(因为以\t切分数据,文件格式必须合适) 1363157985066 13726230503 0 ...

  7. Linux磁盘及文件系统管理1

    RHCSA认证中的东西: Linux系统管理包括的内容有: 磁盘分区及文件系统管理 RAID LVM 网络属性管理 程序包管理 sed and awk 进程查看和管理 内核管理(编译和安装) 系统启动 ...

  8. JavaScript捕获和冒泡探讨

    <div id="div"> <input type="button" value="banana" id="b ...

  9. Java中wait()与notify()理解

    通常,多线程之间需要协调工作.例如,浏览器的一个显示图片的线程displayThread想要执行显示图片的任务,必须等待下载线程 downloadThread将该图片下载完毕.如果图片还没有下载完,d ...

  10. 修改 SQL SERVER 2008 編輯前200筆 資料表問題? 转载自:http://www.dotblogs.com.tw/easy1201/archive/2008/12/04/6179.aspx

    小弟前幾天 下載安裝了 SQL SERVER 2008 感覺系統效能還不錯 但是要編輯 資料表卻出現 很苦惱 但經過一番波折 終於了解如何改善 先執行SQL Server Management Stu ...