Nginx + Tomcat 服务器集群架构及调优经验小结
数据库的配置及安装不在本文的讨论范围之内
一般商用的服务器搭建基于以上就可以运行良好,nginx作为HTTP层的代理服务器、Tomcat作为Webserver、同时配置静态资源缓存机制实现动静分离;
如果考虑到多IP区域部署的话,通过DNS智能制定就可以提供。
更大规模的本人没有过实际商用经验
这里有必要普及一下,服务器的架构分工演变的演进史,可以猛击这里:http://kb.cnblogs.com/page/109876/
实际调优总结点:
1、动静访问分离:正常的网页业务不仅仅是HTTP POST一个请求处理,还涉及到很多静态png\css\js等等的加载,为了减少业务服务器的不必要的负担,保证其好钢用在刀刃上。我们需要使用squid Varnish nginx cache等等静态加速器;
本案适用的是nginx 自带的cache,具体详细设置请见本文的【【【【附件】】】:
http://download.csdn.net/detail/shuzui1985/5065063
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|css|js|html|htm)$
{
#root /home/webos/sam/html;
proxy_pass http://localhost ;
#proxy_pass http://squid3server ;
##proxy_set_header Host $host;
##proxy_set_header X-Real-IP $remote_addr;
##proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_set_header Host $host;
proxy_cache cache_one;
proxy_cache_valid 200 302 1h;
proxy_cache_valid 301 1d;
proxy_cache_valid any 1m;
expires 30d;
}
2、 nginx代理服务器的nginx.conf 配置优化:
a) worker_processes 4; 开启的工作进程最好与你的硬件CPU个数一致,一味的加大processes,会使得系统的切换开销增大得不偿失
b) worker_rlimit_nofile 20000; 设定软配置每个进程的文件HANDLE打开数设置的尽量大,同时需要注意将linux系统中的该设置修改到20000以上最好.
ulimit -n 这个数字说明了一个普通用户能够在一个单独会话中所能打开最大的文件数目。注意。如果是root,以下操作不能使ulimit -n的输出增加。因为用户root用户不受这个ulimit限制。只有普通用户才会受这个限制。
修改方法
/etc/security/limits.conf
修改
* soft nofile 20000 * hard nofile 20000
c) proxy_connect_timeout 180;
proxy_read_timeout 180;
proxy_send_timeout 180; //将nginx与后端的tomcat连接超时,上行超时,下行超时的时间都设置的尽量大,范围大并发的情况下出现502 504.
3、Tomcat的调优请见本博客之前的总结:
Tomcat服务器-并发压力测试下调优注意点小结 进一步的nginx与tomcat优化点nginx 与后端的服务器连接默认是使用的http 1.0,这个大家应该都了解,如果设置为HTTP1.1 复用链接的话就会大大降低了tcp开销,节省系统资源
upstream nginx_test {
server 192.168.128.128:8080 weight=5;
server 192.168.128.132:8080 weight=5;
keepalive 20;
# 设置持久连接时间。
}
server {
location / {
proxy_http_version 1.1;
#开启对http1.1支持
proxy_set_header Connection "";
# 设置Connection为空串,以禁止传递头部到后端
# http1.0中默认值Connection: close
proxy_pass http://nginx_test;
}
}
具体参见:
http://linuxgp.blog.51cto.com/1708668/934588
补充:
商用业务服务器需要7*24的稳定,如何保证服务器的性能和稳定性需要前期进行大量的针对性用力测试以及服务器的性能调优。
本案适用HP的LR测试工作进行测试,只需要录制交互脚本,然后设定假定的用户并发数进行测试就可以进行压力性、稳定性等等测试。当然了本案例中少不了使用cacti监控软件对集群中的各个机器对每台机器的负载、IO作为详尽的统计,以在测试阶段来及时分析发现集群部署的瓶颈所在。