2013-09-19 1 views
3

У меня есть кластерная среда с Apache 2.2.6 и mod_proxy, указывающая на Tomcat 7.0.26 через AJP13 с Sticky Sessions.Отказоустойчивость в кластерной среде не работает с JSF 2, Richfaces 4, Tomcat 7

Конфигурация httpd.conf выглядит так:

<Proxy balancer://mycluster2> 
     BalancerMember ajp://192.168.0.1:8009 route=tomcat1 
     BalancerMember ajp://192.168.0.2:8009 route=tomcat2 
     ProxySet lbmethod=byrequests 
    </Proxy> 
    ProxyPass /MyApp balancer://myCluster2/MyApp stickysession=JSESSIONID 
    ProxyPassReverse /MyApp https://apache_server/MyApp 

В моем файле server.xml TOMCAT, я правильно настроил кластер внутри тега <Host> (размещен только файл tomcat1, tomcat2 такое же изменение только IP):

<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" 
     maxThreads="150" minSpareThreads="4"/> 


<Connector executor="tomcatThreadPool" 
      port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      redirectPort="8443" /> 

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

...

<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="192.168.0.1" 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" /> 
      <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener" /> 
      <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" /> 
    </Cluster> 

Это мошенника фигурации работает как шарм с любым Jsp веб-приложение, он размножается сессий и отлично работает на сбое с классическим тест шаг отказоустойчивого случае:

1.- Tomcat1 starts. 
2.- Tomcat2 starts. 
3.- A request is processed by the balancer: https://apache_server/MyApp and sent to Tomcat1. 
4.- Some operations are performed (i. e. refresh page with a counter as session attribute). 
5.- Tomcat1 is killed. 
6.- User refresh page and the session counter follows counting in Tomcat2. 

Таким образом, в тот момент у меня есть ясно, что нет неправильной настройки ни на апач, ни в Томкате. Затем я иду с MyApp. Прежде всего, он имеет тег <distributable/> в web.xml.

Далее я развернуть его на Tomcat1 и Tomcat2 успешно, и я вижу, что Tomcat является многоадресным и обменом информации между узлами для моего приложения:

INFO: Gestor [/MyApp], requiriendo estado de sesión desde org.apache.catalina.tribes.membership.MemberImpl[tcp://{192, 168, 0, 1}:4000,{192, 168, 0, 1},4000, alive=5113068, securePort=-1, UDP Port=-1, id={-31 113 14 29 99 -58 77 -75 -111 66 -103 86 102 -108 120 61 }, payload={}, command={}, domain={}, ]. Esta operación se agotará si no se recibe estado de sesión dentro de 60 segundos. 
19-sep-2013 18:49:51 org.apache.catalina.tribes.group.interceptors.ThroughputInterceptor report 
INFO: ThroughputInterceptor Report[ 
     Tx Msg:1 messages 
     Sent:0,00 MB (total) 
     Sent:0,00 MB (application) 
     Time:0,00 seconds 
     Tx Speed:0,12 MB/sec (total) 
     TxSpeed:0,12 MB/sec (application) 
     Error Msg:0 
     Rx Msg:1 messages 
     Rx Speed:0,00 MB/sec (since 1st msg) 
     Received:0,00 MB] 

19-sep-2013 18:49:51 org.apache.catalina.ha.session.DeltaManager waitForSendAllSessions 
INFO: Gestor [/MyApp]; estado de sesión enviado a las 19/09/13 18:49 recibido en 106 ms. 

Я пытаюсь воспроизвести вышеперечисленные навигации, и я могу видеть в Tomcat Managers для обоих узлов объекты моего домена, которые реплицируются (все они реализуют Serializable).

По какой-то причине мой JSF com.sun.faces.renderkit.ServerSideStateHelper.LogicalViewMap не реплицирует все объекты. Фактически, узел Backup всегда имеет один объект меньше основного узла в этом атрибуте сеанса.

В точке 6 после убийства Tomcat1 и обновляющейся страницы сеанс не восстанавливается, и пользователь отправляется на экран выхода из системы, недействительный сеанс.

MyApp работал раньше в некластерной среде. Вот конфигурация для STATE-SAVING из MyApp web.xml:

<context-param> 
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name> 
    <param-value>server</param-value> 
    </context-param> 

Даже я попытался обновить JSF 2.1.4 до 2.1.21, и я получаю ту же ошибку. Я не могу обновиться до 2.2.3, не изменяя многие вещи в MyApp (это в производстве, и это долгое время проект разработки, поэтому я должен попробовать все, прежде чем рассматривать реорганизацию всего проекта).

Я пытался поставить и это в моем web.xml и это еще хуже, так как он размножается меньше объектов в LogicalViewMap:

<context-param> 
     <param-name>com.sun.faces.serializeServerState</param-name> 
     <param-value>true</param-value> 
    </context-param> 

Мои лица-config.xml не имеет ничего особенного.

Я также попытался обновить JSF до версии 2.2.3, но в этом случае проект вообще не работал, поскольку я использую Richfaces 4.0.0-final, и мне нужно будет реорганизовать еще один код.

В это время я думаю, что JSF 2 несовместим с Tomcat Clustering. Кто-нибудь настраивал проект с Tomcat Clustering и JSF 2?

Любая помощь будет оценена по достоинству.

+0

Вы видите ошибки в файлах журнала Catalina? –

+0

Нет, никаких ошибок. На самом деле, когда я запускаю Tomcat, я вижу эту запись для MyApp и больше записей о сессиях 19-sep-2013 18:49:51 org.apache.catalina.ha.session.DeltaManager waitForSendAllSessions INFO: Gestor [/ MyApp]; состояние сеанса отправлено в 19/09/13 18:49 получено в 106 ms.' – idiazt

ответ

1

У меня была аналогичная проблема, но в веб-среде. См. jsf session failover

Надеюсь, это может помочь.

+0

Я видел это сообщение перед публикацией этого нового. Я попробовал настроить конфигурацию, но это не было решением для этого случая. Спасибо, в любом случае. – idiazt