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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容