Nginx 0.8.54+Tomcat 6实现负载均衡

最近公司后台系统自从加了 lucene 以来 , 上个星期每天因为内存溢出导致宕机或者系统运行极慢 ( 我都快崩溃了 ), 不得不在后台打开 Jconsole 就行实时监控 , 每当内存达到一定峰值就手动执行 GC, 释放几百 M 的内存 , 才得以正常运行 ! 后来通过 jprofiler6 监控是 lucene Term 实例过多的问题 !

虽然内存问题通过以上方式暂时解决了 , 但是也出现了致命的问题 lucene 打开索引的文件数过多没有及时释放 ,服务器一直在后台打印错误日志 ( 一天有 10G 的日志 )

在上面的放两个问题 , 希望的到大家的回帖帮助 !

下面进入主题 :

测试环境:

一共两台服务器 A.B, 都是 RedHat Linux

A:ip(211.151.*.39)  服务器装有 Tomcat39 , http 请求端口为 8080

B:ip(211.151.*.40)  服务器装有 Tomcat40 ,  http 请求端口为 8080;  nginx 服务器 ,http 请求端口 8085

ip 地址 ( 外网 IP) 有一个被省略 , 推荐大家在一台机器测试改变 tomcat 端口就可以啦

以上是公司提供的两台测试服务器

软件版本

Nginx 0.854

Apache Tomcat/6.0.20

安装

过程细节网上资料很多 , 我就不写了 ……

配置 ngnix 服务器 /usr/local/nginx/conf/nginx.conf

#user  nobody;
# 工作进程数
worker_processes  6;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid         logs/nginx.pid;
# 工作模式及连接数上限
events {
worker_connections  4096;
}
http {
include       mime.types;
default_type  application/octet-stream;
#log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
#                   '$status $body_bytes_sent "$http_referer" '
#                  '"$http_user_agent" "$http_x_forwarded_for"';
#access_log  logs/access.log  main;
sendfile        on;
#tcp_nopush     on;
#keepalive_timeout  0;
keepalive_timeout  65;
#gzip  on;
upstream tqcrm {           # tqcrm 项目名
# 配置 tomcat 服务器
server 211.151.*.39:8080 weight=1; # tomcat 地址和端口
server 211.151.*.40:8080 weight=1;
}
server {
listen       8085;     #nginx 监听端口
server_name  localhost;
#charset koi8-r;
charset gb2312;
#access_log  logs/host.access.log  main;
location / {
root   html;
#index  index.html index.htm;
proxy_pass http://tqcrm;
}
location /NginxStatus {
stub_status  on;
access_log   on;
auth_basic  "NginxStatus";
}
#error_page  404              /404.html;
# redirect server error pages to the static page /50x.html
#
error_page    500 502 503 504  /50x.html;
location = /50x.html {
root   html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
#    proxy_pass   http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
#    root           html;
#    fastcgi_pass   127.0.0.1:9000;
#    fastcgi_index  index.php;
#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#    include        fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
#    deny  all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
#    listen       8000;
#    listen       somename:8080;
#    server_name  somename   alias  another.alias;
#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}
# HTTPS server
#
#server {
#    listen       443;
#    server_name  localhost;
#    ssl                  on;
#    ssl_certificate      cert.pem;
#    ssl_certificate_key  cert.key;
#    ssl_session_timeout  5m;
#    ssl_protocols  SSLv2 SSLv3 TLSv1;
#    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
#    ssl_prefer_server_ciphers   on;
#    location / {
#        root   html;
#        index  index.html index.htm;
#    }
#}
}