nginx如何实现负载均衡

小课堂

分享人:魏振恒

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

什么是nginx

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器。Nginx是由俄罗斯人 Igor Sysoev为俄罗斯访问量第二的 Rambler.ru站点开发的,它已经在该站点运行超过两年半了。Igor Sysoev在建立的项目时,使用基于BSD许可。 nginx主要为优化性能,是一种反向代理服、负载均衡务器。有报告表明能支持高达 50,000 个并发连接数。

工作原理

Nginx由内核和模块组成,完成工作是通过查找配置文件将客户端请求映射到一个location block(location是用于URL匹配的命令),location配置的命令会启动不同模块完成工作。 Nginx模块分为核心模块,基础模块和第三方模块。
核心模块:HTTP模块、EVENT模块(事件)、MAIL模块。
基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块、HTTP Rewrite模块。
第三方模块:HTTP Upstream Request Hash模块、Notice模块、HTTP Access Key模块。

性能优势

web服务器,处理静态文件、索引文件以及自动索引效率高。
代理服务器,快速高效反向代理,提升网站性能。
负载均衡器,内部支持Rails和PHP,也可支持HTTP代理服务器,对外进行服务。同时支持简单容错和利用算法进行负载均衡。
性能方面,Nginx专门为性能设计,实现注重效率。采用Poll模型,可以支持更多的并发连接,并在大并发时占用很低内存。


稳定性方面,采用分阶段资源分配技术,使CPU资源和内存占用率低。当遇到访问的峰值,或者有人恶意发起慢速连接时,不会导致像其他HTTP服务器因耗尽服务器物理内存而失去响应,导致只能重启服务器。
高可用性方面,支持热部署,启动迅速,可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。

一、nginx负载均衡原理

单从字面上的意思来理解就可以解释N台服务器平均分担负载,不会因为某台服务器负载高宕机而某台服务器闲置的情况。那么负载均衡的前提就是要有多台服务器才能实现,也就是两台以上即可。
我觉得他像是一个中转站,在形式上省略了客户端输入端口,而他在帮我们填入端口号时会选择不同的端口号,只要你有设置,就像一个一个中转站帮我们转入地址。

2.知识剖析

nginx是通过upstream模块来进行负载均衡

upstream具有数据转发功能,为nginx提供了跨越单机的横向处理能力,使nginx摆脱只能为终端节点提供单一功能的限制,而使它具备了网路应用级别的拆分、封装和整合的战略功能。在云模型大行其道的今天,数据转发是nginx有能力构建一个网络应用的关键组件。当然,鉴于开发成本的问题,一个网络应用的关键组件一开始往往会采用高级编程语言开发。但是当系统到达一定规模,并且需要更重视性能的时候,为了达到所要求的性能目标,高级语言开发出的组件必须进行结构化修改。此时,对于修改代价而言,nginx的upstream模块呈现出极大的吸引力,因为它天生就快。作为附带,nginx的配置系统提供的层次化和松耦合使得系统的扩展性也达到比较高的程度。

如何使用upstream进行负载均衡

1.首先需要在服务器上生成两个项目地点,比如安装两个tomcat,各自部署一个项目。
2.更改nginx配置文件。

tomcat部署两个项目流程

nginx负载均衡中的属性

1.轮询(默认)按时间顺序分欸
2.指定权重 weight和访问的成功率成正比
3.IP绑定 ip_hash 根据访问ip的hash结构分配,这样每个客户端访问剃个服务器可以解决session的问题
还有down表示当前的server不参加分配,backup表示上面的server都挂了后用这个。

7.参考文献

网络

8.更多讨论

欢迎大家交流和讨论

鸣谢

感谢大家观看

BY : 魏振恒