• Tomcat反带和集群


     Nginx|Apache反带用户请求到Tomcat

    • LNMT:
    client -->http --> nginx --> reverse_proxy --> http --> tomcat (http connector)
    
    location ~* .(jsp|do)$ {
    proxy_pass http://web1.evescn.com:8080;
    }
    

      

    • LAMT:
    client --> http --> httpd --> reverse_proxy --> {http|ajp} --> tomcat {http connector|ajp connector}
    

      

    反代模块:
        主:proxy_module
        子:proxy_module_http, proxy_module_ajp
    

      

    proxy_module_http:
        <VirtualHost *:80>
            ServerName web1.evescn.com
            ProxyVia On
            ProxyRequests Off    # 开启反向代理时,需要关闭正向代理
            ProxyPreserveHost On # 直接反带用户请求的虚拟主机名
            <Proxy *>
                Require all granted
            </Proxy>
            ProxyPass / http://172.16.100.67:8080/
            ProxyPassReverse / http://172.16.100.67:8080/
            <Location />
                Require all granted
            </Location>
        </VirtualHost>
    

      

    proxy_module_ajp:
        <VirtualHost *:80>
            ServerName web1.evescn.com
            ProxyVia On
            ProxyRequests Off
            ProxyPreserveHost On
            <Proxy *>
                Require all granted
            </Proxy>
            ProxyPass /status !
            ProxyPass / ajp://172.16.100.67:8009/
            ProxyPassReverse / ajp://172.16.100.67:8009/
            <Location />
                Require all granted
            </Location>
        </VirtualHost>
    

      

    • LNAMT:
    client -->http --> nginx -->  httpd --> reverse_proxy --> {http|ajp} --> tomcat {http connector|ajp connector}
    

      

     Tomcat会话保持

    session sticky
        source ip
        cookie
    session cluster: 
    session server
        kv: memcached, redis
    

      

     Tomcat集群

    • (1) LB tomcat
    nginx tomcats (upsteam模块)
    apache tomcats  
    • (2) LB tomcat cluster
    • (3) LB tomcat
    session server
        memcached
    

      

    • apache: tomcats
    (1) apache:
            mod_proxy
            mod_proxy_http
            mod_proxy_balancer
    
        tomcat:
            http connector
    (2) apache: 
            mod_proxy
            mod_proxy_ajp
            mod_proxy_balancer	
        tomcat:
            ajp connector
    (3) apache:
            mod_jk
        tomcat:
            ajp connector
    

      

    • 第一种方法的实现:
    <proxy balancer://lbcluster1>
        BalancerMember http://172.16.100.68:8080 loadfactor=10 route=TomcatA
        BalancerMember http://172.16.100.69:8080 loadfactor=10 route=TomcatB
    </proxy>
    
    <VirtualHost *:80>
        ServerName web1.evescn.com
        ProxyVia On
        ProxyRequests Off
        ProxyPreserveHost On
        <Proxy *>
            Require all granted
        </Proxy>
        ProxyPass / balancer://lbcluster1/
        ProxyPassReverse / balancer://lbcluster1/
        <Location />
            Require all granted
        </Location>
    </VirtualHost>
    

      如果需要会话绑定:

    Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
    <proxy balancer://lbcluster1>
        BalancerMember http://172.16.100.68:8080 loadfactor=10 route=TomcatA
        BalancerMember http://172.16.100.69:8080 loadfactor=10 route=TomcatB
    	ProxySet stickysession=ROUTEID
    </proxy>
    
    <VirtualHost *:80>
        ServerName web1.evescn.com
        ProxyVia On
        ProxyRequests Off
        ProxyPreserveHost On
        <Proxy *>
            Require all granted
        </Proxy>
        ProxyPass / balancer://lbcluster1/
        ProxyPassReverse / balancer://lbcluster1/
        <Location />
            Require all granted
        </Location>
    </VirtualHost>
    

      

    • 第二种方法的实现:
    #Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
    <proxy balancer://lbcluster1>
        BalancerMember ajp://172.16.100.68:8009 loadfactor=10 route=TomcatA
        BalancerMember ajp://172.16.100.69:8009 loadfactor=10 route=TomcatB
        ProxySet stickysession=ROUTEID
    </proxy>
    
    <VirtualHost *:80>
        ServerName web1.evescn.com
        ProxyVia On
        ProxyRequests Off
        ProxyPreserveHost On
        <Proxy *>
            Require all granted
        </Proxy>
        ProxyPass / balancer://lbcluster1/
        ProxyPassReverse / balancer://lbcluster1/
        <Location />
            Require all granted
        </Location>
    </VirtualHost>
    

      

    • 补充:mod_proxy_balancer模块内置的manager:
    <Location /balancer-manager>
    	SetHandler balancer-manager
    	Proxypass !
    	Order Deny,Allow
    	Allow from all
    </Location>	
    

      

    • 第三种方式:
    mod_jk:额外编译安装
    

      

    (1) 反向代理
    	模块配置文件:mod_jk.conf 
    		LoadModule  jk_module  modules/mod_jk.so
    		JkWorkersFile  /etc/httpd/conf.d/workers.properties
    		JkLogFile  logs/mod_jk.log
    		JkLogLevel  debug
    		JkMount  /*  TomcatA
    		JkMount  /status/  stat1
    
    	workers配置文件:workers.properties
    		worker.list=TomcatA,stat1
    		worker.TomcatA.port=8009
    		worker.TomcatA.host=172.16.100.68
    		worker.TomcatA.type=ajp13
    		worker.TomcatA.lbfactor=1
    		worker.stat1.type = status
    
    	注意:status的访问要做访问控制;
    

      

    (2) 负载均衡
    	模块配置文件:mod_jk.conf
    		LoadModule  jk_module  modules/mod_jk.so
    		JkWorkersFile  /etc/httpd/conf.d/workers.properties
    		JkLogFile  logs/mod_jk.log
    		JkLogLevel  debug
    		JkMount  /*  lbcluster1
    		JkMount  /status/  stat1
    
    	workers配置文件:workers.properties
    		worker.list = lbcluster1,stat1
    		worker.TomcatA.type = ajp13
    		worker.TomcatA.host = 172.16.100.68
    		worker.TomcatA.port = 8009
    		worker.TomcatA.lbfactor = 1
    		worker.TomcatB.type = ajp13
    		worker.TomcatB.host = 172.16.100.69
    		worker.TomcatB.port = 8009
    		worker.TomcatB.lbfactor = 1
    		worker.lbcluster1.type = lb
    		worker.lbcluster1.sticky_session = 0
    		worker.lbcluster1.balance_workers = TomcatA, TomcatB
    		worker.stat1.type = status	
    

      

    • Session Cluster:
    session manager:会话管理器
    
        StandardManager
        PersistentManager:
        FileStore
        JDBC
        DeltaManager
        BackupManager
    

      

    构建步骤:
    (1) 各节点配置使用deltamaanager:
        <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"
                     channelSendOptions="8">
    
              <Manager className="org.apache.catalina.ha.session.DeltaManager"
                       expireSessionsOnShutdown="false"
                       notifyListenersOnReplication="true"/>
    
              <Channel className="org.apache.catalina.tribes.group.GroupChannel">
                <Membership className="org.apache.catalina.tribes.membership.McastService"
                            address="228.0.1.7"
                            port="45564"
                            frequency="500"
                            dropTime="3000"/>
                <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                          address="auto"
                          port="4000"
                          autoBind="100"
                          selectorTimeout="5000"
                          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"/>
              </Channel>
    
              <Valve className="org.apache.catalina.ha.tcp.ReplicationValve"
                     filter=""/>
              <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
    
              <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>
    
    (2) 为需要使用session cluster的webapps开启session distribution的功能:
       	WEB-INF/web.xml中添加
       		<distributable/>
    

      

  • 相关阅读:
    android gridview布局,实现长按某一个,所有项都显示删除的图标
    Error:Execution failed for task ':app:transformClassesWithDexForDebug&#
    FragmentActivity和Activity的具体区别在哪里
    android批量文件上传(android批量图片上传)
    Android studio修改debug.keystore
    2 weekend110的SecureCRTPortable远程连接 + 上传安装jdk + 上传安装配置hadoop
    1 weekend110的Linux带图形系统安装 + 网络配置 + 静态IP设置
    weekend110(Hadoop)的 第一天笔记
    详细讲解Hadoop源码阅读工程(以hadoop-2.6.0-src.tar.gz和hadoop-2.6.0-cdh5.4.5-src.tar.gz为代表)
    如何自己编译生成hadoop的eclipse插件,如hadoop-eclipse-plugin-2.6.0.jar
  • 原文地址:https://www.cnblogs.com/evescn/p/8892428.html
Copyright © 2020-2023  润新知