据说tomcat最高支持500并发,集群显得很有必要,将大量请求分发到多个tomcat来处理。
tomcat集群涉及两个问题:
1.请求分发,自动将请求分发到不同的tomcat
2.session同步(session复制)
一、请求分发
请求分发可以通过apache 或者 nginx来实现。(此例用nginx)
进入nginx/conf目录, 复制nginx.conf 为 nginx.conf.bak 留作备份,编辑nginx。
a.在 http > server > location 下添加 proxy_pass http://127.0.0.1;
b.在 http > 下添加
upstream 127.0.0.1 {
#weigth参数表示权值,权值越高被分配到的几率越大
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
完整配置文件见文末。
二、session复制
tomcat的session复制可参考tomcat文档 user guide 第18)
我采用的是在tomcat/conf/web.xml 文件 web-app 节点下添加 <distributable/>
tomcat/conf/server.xml 先修改两tomcat 服务端口,然后分别
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
三、测试
启动 两tomcat,启动nginx,新建测试页分别放到webapp/ROOT 下,然后访问。
一些代码:
nginx.conf配置
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
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;
server {
listen 90;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm test.jsp;
proxy_pass http://127.0.0.1;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
upstream 127.0.0.1 {
#weigth参数表示权值,权值越高被分配到的几率越大
server 127.0.0.1:8080 weight=1;
server 127.0.0.1:8081 weight=2;
}
}
nginx服务管理:
D:\>cd Server
D:\Server>cd nginx-1.3.8
#停止服务
D:\Server\nginx-1.3.8>nginx -s stop
#测试环境
D:\Server\nginx-1.3.8>nginx -t
#启动服务
D:\Server\nginx-1.3.8>nginx -c conf/nginx.conf
暴力结束进程: taskkill -F -IM nginx.exe
还有一点问题,就是不同主机上tomcat session复制的问题,留待下次研究。