apache + tomcat + mod_jk解決session會話共享的問題

  1. 一.配置虛擬主機css

    <VirtualHost *:80>
        ServerAdmin webmaster@yesky.com
        DocumentRoot /home/afocus/apush/web
        ServerName apush.afocus.com.cn
        DirectoryIndex index.jsp

        <Directory /home/afocus/apush/web>
                Options FollowSymLinks
                AllowOverride None
                Order deny,allow
                Allow from all
        </Directory>

        ErrorLog logs/apush_error-log
        CustomLog logs/apush_access-log combined

        JkMount /*.* controller
    </VirtualHost>html

    二.配置 jk.confjava

    LoadModule jk_module modules/mod_jk.sonode

    JkWorkersFile conf/workers.propertiesweb

    JkMountFile conf/uriworkermap.propertiesapache

    JkLogFile  logs/mod_jk.logwindows

    JkLogLevel info瀏覽器

    JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"tomcat

    第一句說明 將mod_jk.so 加入到httpd 中, 所以須要將 tomcat-connectors-1.2.40-windows-x86_64-httpd-2.4.x.zip 內的mod_jk.so文件放入到  E:/work/test/Apache24/modules 目錄下
    第二句是說明 apach關聯的tomcat服務器有哪些。session共享的設置。 要求 在conf目錄下新建 workers.properties 文件
    第三句 是說明 apach要攔截那些請求,那些請求讓tomcat處理。要求 在conf目錄下新建 uriworkermap.properties 文件
    第四句 是日誌文件 
    第五句 是日誌級別

    服務器

    三.配置 workers.properties


    ps=/

    worker.list=controller,loadbalancer,jkstatus,apushtomcat,tomcat1,tomcat2


    #worker.apushtomcat.port=8069

    #worker.apushtomcat.host=localhost

    #worker.apushtomcat.type=ajp13


    #========apache-tomcat-1========

    worker.tomcat1.port=8069

    worker.tomcat1.host=localhost

    worker.tomcat1.type=ajp13

    worker.tomcat1.lbfactor=1

    #========apache-tomcat-2========

    worker.tomcat2.port=8070

    worker.tomcat2.host=localhost

    worker.tomcat2.type=ajp13

    worker.tomcat2.lbfactor=1


    #========controller========

    worker.controller.type=lb

    worker.controller.balance_workers=tomcat1,tomcat2

    worker.controller.sticky_session=true

    worker.controller.sticky_session_force=false


    worker.jkstatus.type=status


    說明: 
    我的理解的 worker.list=controller,status   是有哪些攔截類型,如contorller是tomcat,status是httpd。
    一、其中worker.tomcat1.host中,tomcat1表明節點名,host值爲節點IP, 若是有更多節點,順序定義更多的node段,並在worker.controller.balance_workers後所有列出。 
    二、lbfactor是負載分配權重,值越大分配的負載越多。 
    三、worker.controller.sticky_session,設置爲1或true使用粘着session,設置爲0或false不使用粘着session。若是sticky_session設爲true時,建議sticky_session_force設爲false,

    此參數代表若是集羣中某臺服務器在屢次請求沒有響應後,將轉發當前的請求到其它服務器上處理;sticky_session=false時,影響比較大,會致使轉發到其它服務器上的請求,找不到原來的session,

    因此若是此時請求中有讀取session中某些信息的話,就會致使應用的null異常。sticky_session、sticky_session_force的默認值分別爲true,false。 

    sticky_session   sticky_session_force             含義 
         true             false            SESSION會複製,有粘性 
         true             true             SESSION不復制,有粘性 
         false            false            SESSION會複製,無粘性 
         false            true             SESSION會複製,無粘性  

    四、worker.status.type=status 用於查看 集羣信息


    四.配置uriworkermap.properties

    /*=controller  

    /jkstatus=status  

      

    !/*.gif=controller  

    !/*.jpg=controller  

    !/*.png=controller  

    !/*.css=controller  

    !/*.js=controller  

    !/*.htm=controller  

    !/*.html=controller

    說明:

    即 tomcat 攔截全部的請求 (controller表明tomcat集羣)  下面的配置是特殊狀況 apache只負責攔截 /jkstatus  的請求和 靜態資源  若是不想用 apach處理,

    能夠把 下面的去除掉。網上有人寫攔截 /*.jsp 而後也沒有配不攔截的資源,致使頁面顯示不完整。
    還能夠在workers.properties 中把 worker.list=controller,status,tomcat1,tomcat2,tomcat3 
    而後將攔截的內容 爲 /*.jsp /*.do 分別交給不一樣的服務器處理。



    五.修改tomcat的server.xml

    在同一臺機器上部署兩個及以上,要修改 server.xml 中的端口,讓他們不同
     <Server port="9005" shutdown="SHUTDOWN">  

     <Connector port="9090" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443" />

     <Connector port="11009" protocol="AJP/1.3" redirectPort="8443" />

    這三個的端口 port  protocol="AJP/1.3" 的 port 要和 workers.properties  內的配置一致

    修改 
        <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"  />

    在 Engine  標籤內添加  jvmRoute="tomcat2"    且 要和 workers.properties  內的配置一致 

    而後啓動httpd,tomcat 在瀏覽器內鍵入 http://localhost:80/jkstatus 查看集羣的信息。



    六.在部署的項目的web.xml 中的<web-app>標籤內添加 <distributable/>標籤



    曾經碰到的問題

    1. Unable to receive message through TCP channel  

    登錄的時候,將用戶信息放入session  發現可以登錄單個的tomcat,可是不能經過apache進入,修改 workers.properties 就能夠了,這個網上沒找到答案,暫時這樣。

    worker.controller.sticky_session=true
    worker.controller.sticky_session_force=false 

    2.全部的要放入session的內容必須實現Serializable接口不然會報錯,java.io.NotSerializableException  

    3.apache httpd 找不到tomcat  可能緣由是 mod_jk 的版本不匹配,我剛開始用的是 tomcat-connectors-1.2.39-windows-x86_64-httpd-2.4.x.zip 發現連接不上tomcat 可是換爲tomcat-connectors-1.2.40-windows-x86_64-httpd-2.4.x.zip  後就能夠了。

    4.將靜態資源放到httpd  的E:\work\test\Apache24\htdocs目錄下, 結構要和 jsp文件中寫的路徑一致。



    必定要注意的問題:

    切記將定時任務單獨部署,不然會執行屢次。

相關文章
相關標籤/搜索