Nginx实现负载均衡
Nginx实现负载均衡的原理:
负载均衡在服务端开发中算是一个比较重要的特性。因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理前端,因为Nginx的异步框架可以处理很大的并发请求(最大可以接收50000个请求),把这些并发请求hold住之后就可以分发给后台服务端(backend servers, 后面简称backend)来做复杂的计算、处理和响应,并且在业务量增加的时候可以方便地扩容后台服务器(Nginx只是分发,并不做处理)。
负载均衡可以分为硬件负载均衡和软件负载均衡,前者一般是专用的软件和硬件相结合的设备,设备商会提供完整成熟的解决方案,通常也会更加昂贵。软件的负载均衡以Nginx为主。
1、Nginx反向代理
先说明一下前向代理。代理 (Proxy) 也称网络代理,是一种特殊的网络服务,通俗来讲,就是在客户端和目标服务器之间的充当中间人,接收客户端的请求,再根据客户端请求向目标服务器发起相应的请求,从目标服务器获得指定资源后返回给客户端。且代理服务器可以对目标服务器的资源下载至本地缓存,如果客户端所要获取的资源在代理服务器的缓存之中,则代理服务器并不会再向目标服务器发起请求,而是直接返回缓存的资源。
而反向代理则是在服务器端作为代理使用,而不是客户端。也就是说,前向代理是代理内部网络用户访问 Internet 上服务器的连接请求,反向代理是以代理服务器来接受 Internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 Internet 上请求连接的客户端,此时的代理服务器对外就表现为一个服务器。
前向代理:代理服务器可以做一些预处理,比如作为前向代理的时候,可以存放一些缓存,在客户端想要获取缓存的数据的时候,可以直接在代理服务器获取,并不需要访问到后端的服务器了;
反向代理:此时的代理服务器,就充当一个转交的角色,将客户端发送的请求转发给后端的服务器,后端的服务器在经过处理后,将数据返回给代理服务器,然后代理服务器再将数据返回给客户端。当然,对于cache缓存,反向代理也是拥有这个功能的。
Nginx利用自身反向代理功能,在conf配置文件中添加反向代理地址,以代理服务器的身份接受客户端发送过来的请求,然后将请求转发给内部网络上的应用服务器,并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器,不过它只负责转发请求,不负责处理。
2、Nginx实现转发的5种方式
Nginx转发请求可按照调度规则通过轮询、ip哈希、URL哈希、权重等多种方式对应用服务器做负载均衡,同时还支持后端服务器的运行状态检查,也就是故障移除和恢复添加功能。
Nginx 的 upstream目前支持的分配算法:
(1)、轮询(默认)
每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,能自动剔除。
(2)、权重 – weight–>指定轮询比率
通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。
(3)、ip_哈希算法(即Nginx的前置服务器或者客户端IP)— 保证会话一致性
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。
(4)fair
fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即(rt)小的后端服务器优先分配请求。
(5)url_hash
与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下(url_hash用途cache服务业务)。
1 upstream backend {
2 server 192.168.1.101;
3 server 192.168.1.102;
4 server 192.168.1.103;
5 hash $request_uri;
6 hash_method crc32;
7 }
hash_method为使用的hash算法,需要注意的是:此时,server语句中不能加weight等参数。
Nginx本身不具备这个功能,如果需要使用的化,需要安装Nginx的hash包。
3、负载均衡的实现过程
(1)转发功能
按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。
(2)故障移除
通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。
(3)恢复添加
如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。
4、配置Nginx的负载均衡与分发策略
通过在upstream参数中添加的应用服务器IP后添加指定参数即可实现,如:
1 upstream myserver {
2 server 192.168127.147:8080 weight=3;
3 server 192.168.127.148:8081;
4 }
5 server {
6 listen 80;
7 server_name 8080.mini.com;
8 location / {
9 proxy_pass http://myserver ;
10 index index.html index.htm;
11 }
12 upstream myServer {
13 }
通过以上配置,便可以实现,在访问8080.mini.com这个网站时,由于配置了proxy_pass地址,所有请求都会先通过nginx反向代理服务器,在服务器将请求转发给目的主机时,读取upstream为 myserver 的地址,读取分发策略,配置myserver1权重为3,所以nginx会将大部分请求发送给49服务器上的myserver1,也就是8080端口;较少部分给myserver2来实现有条件的负载均衡,当然这个条件就是服务器1、2的硬件指数处理请求能力。
5、nginx其他配置
1 server 192.168.72.49:9090 down;
2 server 192.168.72.49:8080 weight=2;
3 server 192.168.72.49:6060;
4 server 192.168.72.49:7070 backup;
}
(1)down
表示当前的server暂时不参与负载,一般配合ip_hash使用
(2)Weight
默认为1,weight越大,负载的权重就越大。
(3)max_fails
允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
(4)fail_timeout
max_fails 次失败后,暂停的时间。
(5)Backup
其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
6、使用Nginx的高可用
除了要实现网站的高可用,也就是提供n多台服务器用于发布相同的服务,添加负载均衡服务器分发请求以保证在高并发下各台服务器能相对饱和的处理请求。同样,负载均衡服务器也需要高可用,以防如果负载均衡服务器挂掉了,后面的应用服务器也紊乱无法工作。
为了让学习变得轻松、高效,今天给大家免费分享一套阿里架构师传授的一套教学资源。帮助大家在成为架构师的道路上披荆斩棘。这套视频课程详细讲解了(Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构)等这些成为架构师必备的内容!而且还把框架需要用到的各种程序进行了打包,根据基础视频可以让你轻松搭建分布式框架环境,像在企业生产环境一样进行学习和实践。
为了帮助大家少走弯路,我总结出一个Java程序员的工作2-5年成长路线图。
一、开源框架解析
二、架构筑基
三、高性能架构
四、微服务架构
五、团队协作开发
六、B2C商城项目实战
免费获取学习Java高架构、分布式架构、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战学习架构师视频免费获取
架构群:960439918

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
12月26日云栖精选夜读 | 必须掌握的30种SQL语句优化
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 热点热议 必须掌握的30种SQL语句优化 作者:动力节点 Java 程序员都该懂的 Java8 HashMap 作者:jamesese 120分钟构建自己的Serverless应用,阿里云开发者实战营北京站精彩呈现 作者:pfytlm发表在:阿里云MVP 知识整理 Spark2.4.0 Dataset head 源码分析 作者:thinktothings 弹性伸缩定时任务支持Cron表达式 作者:弹的飞起 AutoScaling伸缩组伸缩模式之停机回收模式 作者:弹的飞起 SpringCloud服务治理与负载均衡原理 作者:小飞哥1112 Oracle 应用短连接导致连接风暴 作者:笱局长发表在:袋鼠云技术团队 美文回顾 Count Up Down(上下计数) 作者:honeymoose python调用hanlp分词包手记 作者:大数据资讯 DDoS攻击根据OSI层进...
- 下一篇
2019年人工智能硬件与应用大趋势
2019年即将到来,人工智能将往什么方向发展?机器学习将如何演变为人工智能?在神经网络领域具有20年的技术经验Eugenio Culerciello,在硬件和软件两方面都有经验积累。他预测,在硬件和应用两方面,2019年的人工智能都值得我们期待。 目标 一句话概括,人工智能领域的目标就是制造超越人类能力的机器:自动驾驶汽车、智能家居、人工助理和安防摄像头是首要的目标,接下来是智能厨房、清洁机器人以及安防无人机和机器人。其他应用包括永远在线的个人助理,和能够看见、听见用户生活经历的生活伴侣。人工智能的终极目标则是完全自动的人工个体,能在日常任务中达到、甚至超越人类的工作表现。 软件 通常,软件是指在最佳化算法训练之下,能够解决某一具体任务的神经网络架构。不过,这并不能等同于人工智能。人工智能必须能够在真实环境中进行无监督学习,从新的经验中学习,结合在各种环境中学到的知识、解决当下的问题。那么,目前的神经网络,如何能演变为人工智能呢? 神经网络架构神经网络的优势在于从数据中自动学习,但我们忘记了一点:训练的基础是手动设计的神经网络架构,这无法从数据中习得。这是目前这个领域的重大限制因素。问...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Windows10,CentOS7,CentOS8安装Nodejs环境
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Linux系统CentOS6、CentOS7手动修改IP地址
- Red5直播服务器,属于Java语言的直播服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8安装Docker,最新的服务器搭配容器使用