Nginx与Tomcat6集群

http://cms163.iteye.com/blog/1104292

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.

你可能感兴趣的:(tomcat,nginx,server,session,Interceptor,header)