1. 程式人生 > >tomcat apache session粘性配置和session複製配置

tomcat apache session粘性配置和session複製配置

好早前配置了負載均衡和session複製,今天寫出來備忘。

方案:
1、基於request的負載均衡
    該種方式下,負載均衡器 (load balancer)會根據各個node的狀況,把每個 http request進行分發。使用這樣的均衡策略,就必須在多個node之間複製使用者的session,實時保持整個cluster的使用者狀態同步,這種操作被稱為session複製(session replication)。Jboss的實現原理是使用攔截器(interceptor),根據使用者的同步策略攔截request,做同步處理後再交給server產生響應。

     優點是客戶不會被繫結都具體的node,只要還有一個node存活,使用者狀態都不會丟失,cluster都能夠繼續工作。

缺點是node之間通訊頻繁,響應速度有影響,多併發、高頻操作的情況下效能下降比較厲害。

2、    基於使用者的負載均衡
該種方式下,當用戶發出第一個request後,負載均衡器動態的把該使用者分配到某個節點,並記錄該節點的jvm路由,以後該使用者的所有request都會被繫結這個jvm路由,使用者只會與該server發生互動,這種策略被稱為粘性session(session sticky)。

     優點是響應速度快,多個節點之間無須通訊。

缺點也很明顯,某個node死掉以後,它負責的所有使用者都會丟失session。

採取方案:

         目前採用第二種,也就是session stiky (1小時)

         檔案伺服器的配置   (1天)  

         Tomcat引數優化    (1天)

叢集的配置

首先在apache 的conf目錄下找到httpd.conf(apache 的配置檔案)檔案

在該檔案裡找到

LoadModule proxy_module modules/mod_proxy.so

LoadModule proxy_ajp_module modules/mod_proxy_ajp.so

LoadModule proxy_balancer_module modules/mod_proxy_balancer.so

LoadModule proxy_connect_module modules/mod_proxy_connect.so

LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

LoadModule proxy_http_module modules/mod_proxy_http.so

並且把上面的#號去掉

然後找到

Include conf/extra/httpd-vhosts.conf

把上面的#號去掉

在最後一行加上

ProxyRequests Off

<proxy balancer://cluster>

BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=tomcat3(與該tomcat裡德jvmRote名字一樣)

BalancerMember ajp://127.0.0.1:8020 loadfactor=1 route=tomcat2

</proxy>

第二步找到\conf\extra包下面的httpd-vhosts.conf

在下面加上

<VirtualHost *:80>

ServerAdmin [email protected]

ServerName localhost

ServerAlias   localhost

ProxyPass / balancer://cluster/ stickysession=jsessionid nofailover=On

ProxyPassReverse / balancer://cluster/

ErrorLog "logs/dummy-host2.163.com-error.log"

    CustomLog "logs/dummy-host2.163.com-access.log" common

</VirtualHost>

第三步找到解壓後的tomcat在不同的tomcat裡修改server.xml裡的埠引數使之不重複

(大家都知道就不詳細說了)

這裡改幾個比較重要的引數

一個是<Engine name="Catalina" defaultHost="localhost">

改成<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat2">

另一個後面改成tomcat3

然後加上

<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"

                                                        mcastBindAddress="127.0.0.1"

                        address="228.0.0.4"

                        port="45564"

                        frequency="500"

                        dropTime="3000"/>

            <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"

                                               tcpListenAddress="127.0.0.1"

                      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>      

這個是session複製用的不需要session複製的可以不用

最後一步

在需要session複製的程式裡面的web.xml里加上

  <distributable />

Session粘性,一般用到粘性就不用sesssion複製了

只需要在httpd.conf裡最後一段加上

ProxyRequests Off

ProxyPass / balancer://cluster/ lbmethod=byrequests stickysession=JSESSIONID nofailover=Off timeout=5 maxattempts=3 

ProxyPassReverse / balancer://cluster/ 

【www.sufms.com】

<proxy balancer://cluster>

BalancerMember ajp://127.0.0.1:8010 loadfactor=1 route=tomcat3

BalancerMember ajp://127.0.0.1:8020 loadfactor=1 route=tomcat2

</proxy>

就行了。

相關推薦

tomcat apache session粘性配置session複製配置

好早前配置了負載均衡和session複製,今天寫出來備忘。方案:1、基於request的負載均衡    該種方式下,負載均衡器 (load balancer)會根據各個node的狀況,把每個 http request進行分發。使用這樣的均衡策略,就必須在多個node之間複製使

weblogic叢集配置session共享(12c版本) 上

weblogic安裝太多就不細說了。直接百度即可,由於圖片太多限制,所以分為上,下篇。直接說正題! 配置叢集大體步驟: 1 建立多個服務(server) 2 建立一個叢集(cluster) 3 建立代理(proxy用於分發請求到server) 4 配置擴充套件域 5 配置p

weblogic叢集配置session共享(12c版本) 下

接著上篇繼續。。。 擴充套件域配置截圖 結束後會生成apps目錄,如圖。代理會需要到下面這2個檔案,下面會講 根據截圖目錄找到命令,啟動各個server:命令  xxx.cmd  Server-4 http://127.0.0.1:7001 其中Ser

Centos7安裝MySQL5.7主從複製配置

一:MySQL安裝 1、下載tar包,這裡使用wget從官網下載 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz 2、將mysql安裝

Session的獲取session存取值

獲取session HttpServletRequest request=ServletActionContext.getRequest(); HttpSession session= request.getSession(); 存取session值 &nbs

什麼是session? cookiesession有何聯絡?

什麼是session: 1.session 是一種服務端機制,類似散列表結構來儲存使用者資料。 2.瀏覽器第一次向伺服器傳送請求的時候,伺服器會自動生成一個session和sessionID 3.sessionID唯一標識這個session 4.伺服器通過返回響應將s

redis4.0.1(stable)安裝主從複製配置

依賴環境 Centos 6.5 gcc-4.4.7:編譯redis原檔案 tcl-8.5.7:執行編譯檢測 1.編譯redis #cd /usr/local #tar -zx

什麼是cookie,什麼是session,cookiesession的區別

會話跟蹤1. 什麼是會話  * 使用者撥打10086,從服務檯接通後會話開始;  * 使用者發出話費查詢請求,服務檯響應。這是該會話中的一個請求;  * 使用者發出套餐變更請求,服務檯響應。這是該會話中的又一個請求;  * ...  * 使用者結束通話電話,會話結束。2. 會

初識Hibernate的主配置映射配置

rac 子元素 映射 關聯 ref des ring 用戶 package Hibernate.cfg.xml 主配置 Hibernate.cfg.xml 主配置文件夾中主要配置:數據庫鏈接配置,其他參數配置,映射信息等。 常用配置查看源碼:

Spring application.xml配置web.xml配置

事務 mybatis 配置 ive word tran ransac pro web application.xml<!--掃描包—-> <context:compent-scan package="com.bdqn.exam">&

Redis主從配置哨兵監控配置——伺服器端環境搭建

一:介紹 公司用到的redis框架,主要分為cluster的快取叢集和sentinel中的哨兵主從。這種的選用方式一般需要更具業務場景來做區分,兩種框架的配置圖為:右圖為哨兵主從框架和cliuster的叢集框架。sentienl的叢集框架,適用於redis的key值都屬於熱

Git使用者名稱郵箱的全域性配置單倉庫配置

Git可以配置了一個全域性的使用者名稱和郵箱: $ git config --global user.name "xxxxx" $ git config --global user.email "[email protected]" $ git config

Dubbo的Zookeeper單機配置Zookeeper叢集配置

Zookeeper單機配置: 方式一、 <dubbo:registry address="zookeeper://10.20.153.10:2181"/> 方式二、 <dubbo:registry protocol="zookeeper" addre

spring配置:xml配置java註解配置對比

雖然spring早就推出java註解的方式配置框架,由於習慣了看xml所以一直沒有去學習,然而最近需要學習springboot,為了平滑過渡,先被迫研究一下註解配置方式。 這裡展示3種spring配置檔案,來對比xml配置和java註解配置的區別,分別是spring\mv

SpringBoot 全域性配置靜態資源配置

1、配置檔案 SpringBoot使用一個全域性的配置檔案,配置檔名是固定的; application.properties application.yml 配置檔案的作用:修改SpringBoot自動配置的預設值;SpringBoot在底層都給我們自動配置好;

android 許可權配置測試環境配置

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"       package="com.y

django drf 動態權限配置動態seriaizer_class配置

miss turn urn generic cti model 重寫 create 實現 可以通過重寫get_permissions方法和get_serializers_class方法來實現動態的配置權限和序列化 VIewDemo class RegUserS

springWeb之全註解配置全xml配置

1.springWeb之java配置 @Configuration @ComponentScan(basePackages =

apache負載均衡tomcat6叢集session複製

系統環境:Windows XP SP3 ,jdk1.5.0_05 軟體版本:apache_2.2.11-win32-x86-openssl-0.9.8i.msi apache-tomcat-6.0.16 apache-tomcat-6.0.18 備註:tomcat可以下載壓縮包

Apache + Tomcat基於HTTP協議實現反代、動靜分離、負載均衡session會話保持

1、演示環境: IP 作業系統 部署程式 192.168.1.143 CentOS 7.6 Apache 192.168.1.144 CentOS 7.6 Tomcat