Nginx与Tomcat6集群
Tomcat6集群配置
参考文档 http://tomcat.apache.org/tomcat-6.0-doc/
Tomcat1 /home/web/tomcat1 Server_port:8005 Conn_port:7518 Conn_AJP13_port:8009 Conn_redirectPort:8443
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
Tomcat2 /home/web/tomcat2 Server_port:8006 Conn_port:7519 Conn_AJP13_port:8010 Conn_redirectPort:8444
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
Tomcat1的server.xml文件如下:(Tomcat2类似)
<?xml version='1.0' encoding='utf-8'?>
<Server port="8005" shutdown="SHUTDOWN">
...
<Connector port="7518" protocol="HTTP/1.1"
maxHttpHeaderSize="8192" connectionTimeout="20000"
disableUploadTimeout="true" enableLookups="false"
redirectPort="8443" maxThreads="600"
minSpareThreads="25" maxSpareThreads="75" acceptCount="100" />
<Connector port="8009" protocol="AJP/1.3"
maxHttpHeaderSize="8192" connectionTimeout="20000"
disableUploadTimeout="true" maxThreads="600"
minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat1">
...
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
channelSendOptions="6">
<Manager className="org.apache.catalina.ha.session.BackupManager"
expireSessionsOnShutdown="false"
notifyListenersOnReplication="true"
mapSendOptions="6"/>
<Channel className="org.apache.catalina.tribes.group.GroupChannel">
<Membership className="org.apache.catalina.tribes.membership.McastService"
address="228.0.0.4"
port="45564"
frequency="500"
dropTime="3000"/>
<Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
address="auto"
port="5000"
selectorTimeout="100"
maxThreads="6"/>
<Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
<Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
</Sender>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
<Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>
</Channel>
<Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/>
<Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
tempDir="/tmp/war-temp/"
deployDir="/tmp/war-deploy/"
watchDir="/tmp/war-listen/"
watchEnabled="false"/>
<ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster></Host></Engine></Service></Server>
Tomcat6的集群主要作用是session的复制,如果Nginx用ip_hash方式固定某IP访问,则Tomcat的集群无需配置。
但若某IP固定访问的一后端服务器宕机,则此IP下所有访问session丢失。
Nginx转发设置
Nginx的Nginx.conf设置如下:
user nobody;
worker_processes 2;
error_log logs/error.log notice;
pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 10240;
}
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;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
sendfile on;
tcp_nodelay on;
keepalive_timeout 65;
upstream servers1 {
server 192.168.1.190:7518 weight=1;
server 192.168.1.190:7519 weight=1;
}
server {
listen 80;
server_name localhost;
charset utf-8;
access_log logs/host.access.log main;
location / {
root html;
index index.jsp index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location /mygold {
proxy_pass http://servers1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
client_max_body_size 100m;
proxy_connect_timeout 60;
#proxy_busy_buffers_size 2048k;
} } }
Nginx转发会自动识别后端服务器的存活状态。一旦发现其中一台宕机,会把请求转发给其它服务器。
应用程序的session同步
修改程序目录WEB-INF下的web.xml:在</web-app>前加如下行:
<distributable/>即可实现session同步
session固定,ip_hash方式.
ip_hash方式仅能用ip这个因子来分配后端,即针对同一IP固定访问后端一服务器.
配置在upstream内加一行 ip_hash; 不过以下两种方式中慎用:
nginx不是最前端的服务器。
nginx的后端还有其它方式的负载均衡。
另一种方式是用模块upstream_hash. 能用作url_hash.
Nginx与Tomcat6集群
最新推荐文章于 2024-08-27 13:37:27 发布