1. 程式人生 > >tomcat叢集配置session,並用nginx做反向代理和負載均衡

tomcat叢集配置session,並用nginx做反向代理和負載均衡

一、tomcat伺服器配置session共享

tomcat配置session共享,有兩種方式
    ①通過修改配置檔案,讓tomcat不停的廣播自己的session給其他的tomcat,建議使用5臺以下的伺服器,5臺及以上,建議使用方式二
    ②將使用者資訊存入redis,每臺伺服器都從redis中讀取使用者資訊,並設定過期時間,適用於多臺伺服器
    以下給出方式一的配置:
    由於window系統和Linux系統配置有點差別,window系統上面的直接拷貝到Linux系統上面會報錯
    以下給出兩者的配置:
    **windows系統配置:**
    第一步:
    解壓一份tomcat ,放在tomcat-cluster目錄下,命名為tomcat1
    修改tomcat中conf資料夾下的server.xml檔案
    在<Engine name="Catalina" defaultHost="localhost">程式碼下面加上

    <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.0.4"  
                   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.JvmRouteSessionIDBinderListener"/>  
     <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>  
   </Cluster>     
   這段配置

圖片一

注意:如果在同一臺電腦上做叢集,需要修改埠號,只要不用同一埠號就行了

第二步:部署web專案
新建test專案,只需要一個index.jsp頁面即可,做測試

在index.jsp中加入如下:

SessionID:<%=session.getId()%>

    SessionIP:<%=request.getServerName()%>  

    SessionPort:<%=request.getServerPort()%>  
    <%  
    out.println("This is Tomcat Server 1");  
    %>  

修改test專案的web.xml檔案,在其中加入 <distributable/> 程式碼

圖片二

配置完成,將test工程部署(拷貝)到tomcat的webapp目錄下,啟動tomcat,看看會不會報錯,如果不報錯,那麼配置正確

第三步:複製剛才的tomcat1,命名為tomcat2,修改埠號,test工程中的index.jsp頁面,方便區分
啟動tomcat2,啟動成功,說明配置已經完成。

第四步:測試

訪問
圖片三

圖片四

從圖中可以看出,兩者的sessionID是一樣的,說明session共享了

Linux系統配置:

server.xml中叢集配置拷貝下面這段程式碼,其他的一模一樣

 <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  
                 channelSendOptions="6">  

          <Manager className="org.apache.catalina.ha.session.BackupManager"  
                   expireSessionsOnShutdown="false"  
                   notifyListenersOnReplication="true"  
                   mapSendOptions="6"/>  
          <!--  
          <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.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>

至此,session共享配置完成

二、配置nginx反向代理到上面三臺伺服器

下面配置nginx反向代理到上面三臺伺服器

首先yum安裝nginx,配置安裝源
sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

安裝nginx:
$: yum install nginx

安裝完成之後,訪問ip: 192.168.0.140
若出現歡迎頁,表示安裝成功

網站檔案存放預設目錄

/usr/share/nginx/html
網站預設站點配置

/etc/nginx/conf.d/default.conf
自定義Nginx站點配置檔案存放目錄

/etc/nginx/conf.d/
Nginx全域性配置

/etc/nginx/nginx.conf

先備份nginx.conf配置檔案
$: cp nginx.conf nginx.conf.bak以便還原
修改配置檔案:
vi /etc/nginx/nginx.conf

在http{}裡面新增如下配置:

upstream tomcatserver {
    server 192.168.0.140:8081;
    server 192.168.0.140:8082;
    server 192.168.0.140:8083;
    }


    server {
        listen       80;
        server_name  192.168.0.140;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            proxy_pass   http://tomcatserver;
            index  index.html index.htm;
        }     
    }

配置

配置完成後,重啟nginx服務.
$: nginx -s reload

訪問測試:
測試

3

sessionID還是沒變,說明session共享,伺服器名和下標跟著改變,負載均衡成功

三、通過ip設定本地域名

找到C:\Windows\System32\drivers\etc 下面的 hosts檔案

host

在裡面新增 192.168.0.140 www.new.com

域名

可以配置多個

完成!