私は現在、Tomcat6クラスター環境であるliferay6.0.6をセットアップ中です。セッションレプリケーションを備えた4つのノード。スティッキーセッションはありません。
したがって、このサイトで提供されているガイドに従って、私は次のことを行いました:
webapps / conf / context.xmlが追加されました:webapps / ROOT / WEB-INF / web.xmlが追加されました:ファイルの先頭の最初の角かっこの後。また、すべてのカスタムポートレットweb.xmlに配布可能ファイルを追加しました。setenv.shの場合:-Djava.net.preferIPv6Addresses = false -Djava.net.preferIPv4Stack = true
webapps / conf/server.xml内
<Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcatA" />
ノード間でのtomcatA/B / C/D。
<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.10" 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" timeout="30000" />
</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=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.css;.*\.txt;" />
<ClusterListener
className="org.apache.catalina.ha.session.ClusterSessionListener" />
</Cluster>
起動時に各ノードがお互いを検出し、動作しているようです。ただし、誰かがWebコンテンツを変更しようとすると、エラーが発生します。
SEVERE: Manager [localhost#/]: Unable to receive message through TCP channel
java.lang.IllegalStateException: setAttribute: Session already invalidated
at org.apache.catalina.session.StandardSession.setAttribute(StandardSession.java:1326)
at org.apache.catalina.ha.session.DeltaSession.setAttribute(DeltaSession.java:594)
at org.apache.catalina.ha.session.DeltaRequest.execute(DeltaRequest.java:164)
at org.apache.catalina.ha.session.DeltaManager.handleSESSION_DELTA(DeltaManager.java:1487)
at org.apache.catalina.ha.session.DeltaManager.messageReceived(DeltaManager.java:1437)
at org.apache.catalina.ha.session.DeltaManager.messageDataReceived(DeltaManager.java:1171)
at org.apache.catalina.ha.session.ClusterSessionListener.messageReceived(ClusterSessionListener.java:92)
at org.apache.catalina.ha.tcp.SimpleTcpCluster.messageReceived(SimpleTcpCluster.java:901)
at org.apache.catalina.ha.tcp.SimpleTcpCluster.messageReceived(SimpleTcpCluster.java:882)
at org.apache.catalina.tribes.group.GroupChannel.messageReceived(GroupChannel.java:269)
at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:79)
at org.apache.catalina.tribes.group.interceptors.TcpFailureDetector.messageReceived(TcpFailureDetector.java:110)
at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:79)
at org.apache.catalina.tribes.group.ChannelInterceptorBase.messageReceived(ChannelInterceptorBase.java:79)
at org.apache.catalina.tribes.group.ChannelCoordinator.messageReceived(ChannelCoordinator.java:241)
at org.apache.catalina.tribes.transport.ReceiverBase.messageDataReceived(ReceiverBase.java:225)
at org.apache.catalina.tribes.transport.nio.NioReplicationTask.drainChannel(NioReplicationTask.java:188)
at org.apache.catalina.tribes.transport.nio.NioReplicationTask.run(NioReplicationTask.java:91)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
私のliferay-ext.properties:
cluster.link.autodetect.address=www.google.com:80
lucene.replicate.write=true
cluster.link.enabled=true
net.sf.ehcache.configurationResourceName=/cache/hibernate-clustered.xml
ehcache.multi.vm.config.location=/cache/liferay-multi-vm-clustered.xml
また、すべてのノードでjspを作成しました
<td>
Session ID</td>
<td><%= session.getId() %></td>
<% session.setAttribute("abc","abc"); %>
</tr>
<tr>
<td>
Created on</td>
<td><%= new java.util.Date(session.getCreationTime()).toString() %></td>
</tr>
</table>
</body>
</html>
同じユーザーでサーバーを切り替えることができ、セッションは問題なく複製されているようです。ただし、liferayで何かを変更すると、スタックトレースが取得されます。
私は今しばらく立ち往生しています。すべてのサーバーとJVM時間がNTPサーバーと正しく同期されていることを確認しました。ブロックされているポートはありません。サーバーはインターネットにアクセスできません。それらはすべてVMで実行されています。
誰かが私が間違っていることについて何か考えを持っていますか?
ありがとうございました。