Nginx和Tomcat简单负载均衡示例

Nginx介绍

Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为“engine X”, 是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP 代理服务器.这个小巧的东西慢慢地在吞食apache和IIS的份额,说到反向代理,可能很多人都听说,但具体什么是反向代理,很多人估计就不清楚了。摘一段百度百科上的描述:

Nginx和Tomcat简单负载均衡示例

反向代理方式实际上就是一台负责转发的代理 服务器,貌似充当了真正服务器的功能,但实际上并不是,代理服务器只是充当了转发的作用,并且从真正的服务器那里取得返回的数据。这样说,其实nginx 完成的就是这样的工作。我们让nginx监听一个端口,譬如80端口,但实际上我们转发给在8080端口的tomcat,由它来处理真正的请求,当请求完 成后,tomcat返回,但数据此时没直接返回,而是直接给nginx,由nginx进行返回,这里,我们会以为是nginx进行了处理,但实际上进行处 理的是tomcat。

说到上面的方式,也许很多人又会想起来,这样可以把静态文件交由nginx来进行处理。对,很多用到nginx的地方都是作为静态伺服器,这样可以方便缓存那些静态文件,比如CSS,JS,html,htm等文件。

为什么需要对Tomcat服务器做负载均衡

Tomcat服务器作为一个Web服务器,其并发数在300-500之间,如果有超过500的并发数便会出现Tomcat不能响应新的请求的情况,严重影响网站的运行。另外,在访问量大的情况下,Tomcat的线程数会不断增加。由于Tomcat自身对内存的占用有控制,当对内存的占用达到最大值时便会出现内存溢出,对网站的访问严重超时等现象,这时便需要重新启动Tomcat以释放占用的内存,这样做便会阻断网站运行。 

所以对Tomcat做负载均衡便很有必要。目前可以和Tomcat做负载均衡的主流服务器是Apache,但是Nginx由于功能多、配置简单等优点逐渐成为很多负载均衡服务器的首选。Nginx的并发数可达到50000,所以理论上可以和Tomcat以1:100的比例来配置,这样便可以很好的解决网站并发瓶颈问题。而且Nginx、apache是基于http反向代理方式,位于ISO模型的第七层应用层。直白些就是TCP UDP 和http协议的区别,Nginx不能为基于TCP协议的应用提供负载均衡。

Nginx目录结构

Nginx和Tomcat简单负载均衡示例

配置方法

操作系统在Windows 8系统上模拟。以后更新在Ubunto系统上模拟,敬请关注

服务器列表:

Nginx和Tomcat简单负载均衡示例

Apache端口默认为8080,nginx默认端口为80,以上服务器单独测试有效后,进行负载均衡配置

关于nginx的安装与测试参考我的文章:http://www.ibloger.net/article/307.html

第一步:修改tomcat端口号,避免多个tomcat启动时端口号冲突

步骤一,修改Http端口

分别修改tomcat的Http端口,tomcat7的端口修改为8088,tomcat8的端口修改为8089,操作步骤一样。

在\apache-tomcat-7.0.52\conf\server.xml中找到一下代码段

Nginx和Tomcat简单负载均衡示例

将端口号修改为8088 (端口号自定义,只要不冲突就行)

Nginx和Tomcat简单负载均衡示例

步骤二,修改关闭端口

修改关闭端口,这里修改tomcat 8的关闭端口,tomcat 7默认不修改。

在\apache-tomcat-8.0.20\conf\server.xml中找到以下代码段

Nginx和Tomcat简单负载均衡示例

修改为

Nginx和Tomcat简单负载均衡示例

步骤三,修改AJP端口

修改tomcat 8的AJP端口,tomcat 7默认不修改。

在\apache-tomcat-8.0.20\conf\server.xml中找到以下代码段

Nginx和Tomcat简单负载均衡示例

修改为

Nginx和Tomcat简单负载均衡示例

步骤四,修改Https端口(可选)

修改修改tomcat 8的Https端口,tomcat 7默认不修改。

在\apache-tomcat-8.0.20\conf\server.xml中找到以下代码段

Nginx和Tomcat简单负载均衡示例

测试

保存完成,就可以测试了

Nginx和Tomcat简单负载均衡示例

Nginx和Tomcat简单负载均衡示例

第二步:配置Nginx

#Nginx配置文件主要分为4部分:

  • main(全局设置)部分设置的指令将影响其他所有设置;

  • server(主机设置)部分的指令主要用于指定主机和端口;

  • upstream(负载均衡服务器设置)部分指令主要用于负载均衡,设置一系列的后端服务器;

  • location(URL匹配特定位置的设置)部分用于匹配网页位置。

四者之间的关系:server继承main,location继承server,upstream既不会继承其他设置,也不会被继承。 

在\nginx-1.9.0\conf\nginx.conf文件中手动添加以下内容

Nginx和Tomcat简单负载均衡示例

Nginx和Tomcat简单负载均衡示例

修改完nginx.conf文件之后,使用nginx -t命令先测试一下配置文件的正确性,

然后再使用命令nginx -s reload 重新启动nginx,配置完成后测试。

Nginx和Tomcat简单负载均衡示例

测试

启动tomcat 7和tomcat 8,然后启动nginx,直接在浏览器中输入http:localhost:80,即可看到配置地址已经被转发到了tomcat界面,如果其中一个tomcat挂掉,nginx会转发到另外一个tomcat。

Nginx和Tomcat简单负载均衡示例

如果tomcat都挂掉,Nginx会调用error界面,默认nginx.conf中配置的是50x.html,位于\nginx-1.9.0\html\50x.html

Nginx和Tomcat简单负载均衡示例

总结

 至此window下nginx+tomcat负载均衡配置结束,关于tomcat Session的问题通常是采用memcached,或者采用nginx_upstream_jvm_route,他是一个Nginx的扩展模块,用来实现基于 Cookie的 Session Sticky的功能。如果tomcat过多不建议session同步,server间相互同步session很耗资源,高并发环境容易引起Session风暴。请根据自己应用情况合理采纳session解决方案。


未经允许请勿转载:程序喵 » Nginx和Tomcat简单负载均衡示例

点  赞 (0) 打  赏
分享到: