1 案例描述
随着web访问并发数的增加,当并发数达到一定值后,单台tomcat服务器的性能随着并发量的增大而降低,请求的响应时间也随着并发量的增大而增加,从而降低了客户对产品的好感度以及忠诚度。所以集群是大并发下的必然发展。本案例通过比较集群服务器性能,选择Nginx+Tomcat作为集群方案,并介绍了Nginx+Tomcat安装配置过程以及测试分析,最后简单介绍了下步工作计划。
2 方案选择
2.1 Nginx较Apache的优势
Nginx能承受3万并发连接数,胜过Apache 10倍。
Nginx是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru站点开发的,它已经在该站点运行多年。Igor将源代码以类BSD许可证的形式发布。
Nginx国内外使用Nginx作为Web服务器的网站也越来越多,其中国内用户包括新浪博客、新浪播客、网易新闻等门户网站频道,六间房、56.com等视频分享网站,Discuz!官方论坛、水木社区等知名论坛,豆瓣、YUPOO相册、海内SNS、迅雷在线等网站。
2.2Tomcat作为web服务器
Tomcat是高性能稳定的web服务器,公司内部一直将Tomcat作为web服务器,而且Tomcat是Apche基金会下的开源项目,并且有强大活跃的社区支持,所以本案例将Tomcat作为web服务器。
2.3 Nginx+ Tomcat部署方案
所以本案例采用Nginx+Tomcat作为web集群部署方案。其中Nginx为负载均衡服务器,Tomcat为web服务器,部署结构如下图所示。
图1 Nginx+Tomcat部署架构
3 Nginx+Tomcat部署及测试
接下来介绍Nginx+Tomcat负载均衡安装配置过程。
3.1 安装环境
1) 硬件环境:普通PC机
1) 软件环境:
a. CentOS 6.3(Final) Kernel Linux 2.6.32-279.el6.i686
b. pcre-8.31正则表达式库
c. openssl-1.0.1c.tar.gz SSL加密
d. zlib-1.2.7.tar.gz
e. nginx-upstream-jvm-route-0.1
是一个 Nginx 的扩展模块,用来实现基于 Cookie 的 Session Sticky 的功能
f. nginx-1.3.8负载均衡/反向代理服务器
3.2 安装步骤
1. 软件包下载
2. 加压各个软件包
[root@localhost ~]# tar -zxvf pcre-8.31.tar.gz
[root@localhost ~]# tar -zxvf zlib-1.2.7.tar.gz
[root@localhost ~]# tar -zxvf openssl-1.0.1c.tar.gz
[root@localhost ~]# tar -zxvf nginx-upstream-jvm-route-0.1.tar.gz
[root@localhost ~]# tar –zxvfnginx-1.3.8.tar.gz
3. 安装
[root@localhost ~]# cd nginx-1.3.8
[root@localhost ~]# patch-p0 < ../nginx_upstream_jvm_route/jvm_route.patch
[root@localhost ~]# ./configure --prefix=/usr/local/nginx--with-pcre=../pcre-8.31 --with-http_stub_status_module --with-openssl=../openssl-1.0.1c--with-http_ssl_module --add-module=../nginx_upstream_jvm_route --with-zlib=../zlib-1.2.7
[root@localhost ~]# make
[root@localhost ~]# make install
注意:如果出现以下错误
注意设置系统时间为当前时间,否则因为系统时间小于文件时间而无法编译
4. 修改tomcat的server.xml文件
修改tomcat的server.xml,服务器的tomcat的配置文件中分别找到:
<Engine name="Catalina" defaultHost="localhost" >
分别修改为:
Tomcat01:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
Tomcat02:
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm2">
5. 修改nginx的nginx.conf文件
该文件路径为:/usr/local/nginx/conf/nginx.conf。需要修改的地方如下:
upstream 172.7.9.100{ #这里是您需要修改的地方,修改为您的服务器IP:端口号 srun_id为您在tomcat中所配置的jvmRoute server 172.7.4.115:8080 srun_id=jvm1; server 172.7.9.201:80 srun_id=jvm2; } server { listen 81; #根据需要修改监听端口 server_name 172.7.9.100; #这里也是您所需要修改的地方,多域名用空格隔开 #charset UTF-8; #access_log logs/host.access.log main; location / { root html; index index.html index.htm login.jsp; proxy_pass http://172.7.9.100; proxy_set_header X-Real-Ip $remote_addr; client_max_body_size 100m; } ………….. } |
修改/usr/local/nginx/conf/nginx.conf配置文件后,用命令/usr/local/nginx/sbin/nginx -t 检查配置文件是否正确;
6. 常用命令
启动nginx的命令 /usr/local/nginx/sbin/nginx
停止nginx的命令 /usr/local/nginx/sbin/nginx-s stop
在不停止Nginx服务的情况下加载Nginx配置 kill -HUP `cat/usr/local/nginx/nginx.pid`
重启nginx:/usr/local/nginx/sbin/nginx-s reload
7. 部署Web应用
把web应用的ROOT.war包放到 /webapps目录下面,启动tomcat服务
8. 至此部署完成,登录172.7.9.100即可访问web平台
注意:
在采用源码安装nginx的过程中可能出现的问题,“No CCompiler… ”或者“C Compiler not work…”等那时因为没有C++的编译环境,需要另行安装。
3.3 测试结果
1个tomcat(windows环境)的并发数为280 ;
2个tomcat(windows环境)的并发数为480;
4个windows tomcat的并发数为800;
4个windows 1个linux机器并发数为1350。
3.4 结果分析
1) 2个tomcat集群的性能优于1个tomcat性能;
2) 集群性能与tomcat数量不是线性关系的,随着tomcat数量的增加性能提升会逐渐减弱,到某个值后会降低的。
3) 另外对比windows与linux环境下的tomcat,linux下的tomcat明显优于windows下的tomcat。
4 总结及工作计划
由测试结果表明,采用上述集群方案,能够明显提升web并发性能。而且linux下的Tomcat性能明显优于windows下的Tomcat。所以建议在集群部署的时候,尽量采用linux环境。另外,Tomcat与Nginx的配置文件中存在很多可配置项,Nginx+Tomcat的调优还能大幅提升并发访问性能。这也是接下来的工作之一。
接下来还计划加入Varnish,作为静态页面缓存服务器,加入F5(或者lvs)作为四层负载均衡(Nginx是七层负载均衡服务器,所以这里不冲突)。如何合理地架设这些服务器将成为下步计划的关键。