解決apachehttpd+tomcatsession複製失敗導致登入不成功問題

來源:互聯網
上載者:User

在將自己的項目做負載平衡時,使用apache 2.4.6和tomcat 7.0.

配置過程

在做session複製時使用如下的配置。

1。在tomcat中tomcat路徑下%/config/servel.xml中配置cluster標籤:

  <Service name="Catalina">    <!--The connectors can use a shared executor, you can define one or more named thread pools-->    <!--    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"        maxThreads="150" minSpareThreads="4"/>    -->    <!-- A "Connector" represents an endpoint by which requests are received         and responses are returned. Documentation at :         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)         Java AJP  Connector: /docs/config/ajp.html         APR (HTTP/AJP) Connector: /docs/apr.html         Define a non-SSL HTTP/1.1 Connector on port 8080    -->    <Connector port="8080" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="8443" URIEncoding="UTF-8"/>    <!-- A "Connector" using the shared thread pool-->    <!--    <Connector executor="tomcatThreadPool"               port="8080" protocol="HTTP/1.1"               connectionTimeout="20000"               redirectPort="8443" />    -->    <!-- Define a SSL HTTP/1.1 Connector on port 8443         This connector uses the JSSE configuration, when using APR, the         connector should be using the OpenSSL style configuration         described in the APR documentation -->    <!--    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"               maxThreads="150" scheme="https" secure="true"               clientAuth="false" sslProtocol="TLS" />    -->    <!-- Define an AJP 1.3 Connector on port 8009 -->    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />    <!-- An Engine represents the entry point (within Catalina) that processes         every request.  The Engine implementation for Tomcat stand alone         analyzes the HTTP headers included with the request, and passes them         on to the appropriate Host (virtual host).         Documentation at /docs/config/engine.html -->    <!-- You should set jvmRoute to support load-balancing via AJP ie :    <Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">    -->    <Engine name="Catalina" defaultHost="localhost"  jvmRoute="tomcat1">      <!--For clustering, please take a look at documentation at:          /docs/cluster-howto.html  (simple how to)          /docs/config/cluster.html (reference documentation) -->      <!--      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>      -->      <!-- Use the LockOutRealm to prevent attempts to guess user passwords           via a brute-force attack -->      <Realm className="org.apache.catalina.realm.LockOutRealm">        <!-- This Realm uses the UserDatabase configured in the global JNDI             resources under the key "UserDatabase".  Any edits             that are performed against this UserDatabase are immediately             available for use by the Realm.  -->        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"               resourceName="UserDatabase"/>      </Realm>      <Host name="localhost"  appBase="webapps"            unpackWARs="true" autoDeploy="true">        <!-- SingleSignOn valve, share authentication between web applications             Documentation at: /docs/config/valve.html -->        <!--        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />        -->        <!-- Access log processes all example.             Documentation at: /docs/config/valve.html             Note: The pattern used is equivalent to using pattern="common" -->        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"               prefix="localhost_access_log." suffix=".txt"               pattern="%h %l %u %t "%r" %s %b" />      </Host>          <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"/>           <Interceptor className="org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor"/>            </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>   </Engine>  </Service>
2。進入項目 中 %tomcat路徑下%/webapps/項目/web_inf/web.xml配置如下: 
  <distributable/>  
但是在運行項目登入是因為在 % apache路徑%/config/extra/httpd-vhosts.conf中配置了: 
  ProxyPass / balancer://cluster/ stickysession=JSESSIONID|jsessionid nofailover=Off
即使用session複製而不使用在第一次訪問了某一個應用伺服器時就一直訪問那個伺服器。而是每個伺服器都擁有一樣的session,可根據壓力有apache均衡訪問。

問題出現

--------------但是遺憾的是一直沒有登入成功,session沒有複製成功。

解決:

   在做一番資料查詢之後,終於找到了方式,除了需要做以上所有的配置(一定要配置)之後,還需要在tomcat路徑下%/config/context.xml配置如下:

 

<?xml version='1.0' encoding='utf-8'?><!--  Licensed to the Apache Software Foundation (ASF) under one or more  contributor license agreements.  See the NOTICE file distributed with  this work for additional information regarding copyright ownership.  The ASF licenses this file to You under the Apache License, Version 2.0  (the "License"); you may not use this file except in compliance with  the License.  You may obtain a copy of the License at      http://www.apache.org/licenses/LICENSE-2.0  Unless required by applicable law or agreed to in writing, software  distributed under the License is distributed on an "AS IS" BASIS,  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the specific language governing permissions and  limitations under the License.--><!-- The contents of this file will be loaded for each web application --><Context distributable="true">    <!-- Default set of monitored resources -->    <WatchedResource>WEB-INF/web.xml</WatchedResource>    <!-- Uncomment this to disable session persistence across Tomcat restarts -->    <!--    <Manager pathname="" />    -->    <!-- Uncomment this to enable Comet connection tacking (provides events         on session expiration as well as webapp lifecycle) -->    <!--    <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />    --> </Context>
提醒:

 有時候在寫代碼的時候如寫pojo 類時,總是懶得將她們實現序列化,(因為在使用像hirbernate或者mybatis時不寫也不錯,更加別說jdbc了),

當時確實不會出問題的,但是在一些項目需要使用strust-json外掛程式是,將對象轉化為流時會提示一定需要將對象實現序列化介面。

那麼在本次負載平衡學習中更加是將為什麼需要序列化pojo解釋的很清楚,因為需要使用session複製,就需要將session中存放的對象拷貝到其他伺服器。而此時就需要要將對象序列化之後才能在網路中傳輸。否則就連簡單的登陸也實現不了!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.