web-dev-qa-db-ja.com

Tomcat7.0クラスタリングFarmWarDeployerが機能しない

現在、Q&A用のTomcatクラスターに取り組んでいますが、残念ながら、このクラスター全体での戦争の自動展開はまったく機能していないようです。

各サーバーがマルチキャスト通信を正しく受信し、欠落しているホストを即座に認識しているため、クラスターが完全に機能していることを私は知っています。

ここでの問題は、機能していないように見えるFarmWarDeployer関数に起因しています。

実際、Tomcatマネージャーまたは単純なSFTPdプッシュを使用してwarをクラスターのnode1にアップロードすると、warは解凍され、node1によって使用されますが、node2には送信されません。代わりにnode1言っている:

警告:マネージャー[localhost#/ APPTest ## 1.0.0]:コンテキストマネージャーは2012年9月14日5:21に送信されませんPM 103ミリ秒で受信されました。

そして私のnode2は主張しています:

警告:コンテキストマネージャーが存在しません:localhost#/ APPTest ## 1.0.0

さて、ノード2でアプリケーションを手動でプッシュすると、APPTestはタグで正しく設定され、クラスターはセッションを正しく受信しています。

だから、私については、問題は私のFarmWarDeployer設定から来ています:

103     <Engine name="Catalina" defaultHost="localhost">
104
105
106
107         <Cluster className="org.Apache.catalina.ha.tcp.SimpleTcpCluster"
108                  channelSendOptions="8">
109
110           <Manager className="org.Apache.catalina.ha.session.DeltaManager"
111                    expireSessionsOnShutdown="false"
112                    notifyListenersOnReplication="true"/>
113
114           <Channel className="org.Apache.catalina.tribes.group.GroupChannel">
115             <Membership className="org.Apache.catalina.tribes.membership.McastService"
116                         address="224.0.0.1"
117                         port="45564"
118                         frequency="500"
119                         dropTime="3000"/>
120             <Receiver className="org.Apache.catalina.tribes.transport.nio.NioReceiver"
121                       address="auto"
122                       port="4000"
123                       autoBind="100"
124                       selectorTimeout="5000"
125                       maxThreads="6"/>
126
127             <Sender className="org.Apache.catalina.tribes.transport.ReplicationTransmitter">
128               <Transport className="org.Apache.catalina.tribes.transport.nio.PooledParallelSender"/>
129             </Sender>
130             <Interceptor className="org.Apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
131             <Interceptor className="org.Apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
132           </Channel>
133
134           <Valve className="org.Apache.catalina.ha.tcp.ReplicationValve"
135                  filter=""/>
136           <Valve className="org.Apache.catalina.ha.session.JvmRouteBinderValve"/>
137
138           <Deployer className="org.Apache.catalina.ha.deploy.FarmWarDeployer"
139                     tempDir="/opt/Tomcat/temp/"
140                     deployDir="/opt/Tomcat/webapps/"
141                     watchDir="/opt/Tomcat/webapps/"
142                     watchEnabled="enable"/>
143
144           <ClusterListener className="org.Apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
145           <ClusterListener className="org.Apache.catalina.ha.session.ClusterSessionListener"/>
146         </Cluster>
147
148       <Realm className="org.Apache.catalina.realm.LockOutRealm">
149         <Realm className="org.Apache.catalina.realm.UserDatabaseRealm"
150                resourceName="UserDatabase"/>
151       </Realm>
152
153       <Host name="localhost"  appBase="webapps"
154             unpackWARs="true" autoDeploy="true">
155       </Host>
156     </Engine>

私については、テストクラスターとしてはそれほど奇妙なことはありませんが、Tomcatの専門家ではありません。

だから、何かが間違っているか欠けているなら、私に知らせてください;-)

1
Dr I

FarmWarDeployerは、ホストレベルのクラスターでのみ構成できます。クラスター設定は<Host>...</Host>に移動します。それは私のために働きます。

https://Tomcat.Apache.org/Tomcat-7.0-doc/config/cluster-deployer.html

1
Sarwar kamal

WatchDirとdeployDirは同じ場所にしないでください。 Tomcatが変更を検出すると、これをダウンロードしようとしますが、瞬時に何も行われないため、ストリームが不完全になります。これにより、戦争展開で見られるエラーが発生します。デプロイディレクトリに直接戦争をscpしようとすると、同じシナリオが再現される可能性があります。最初にサーバーでステージングしてからデプロイする必要があります。

WatchDir paramに別のディレクトリを追加してみて、そのディレクトリにデプロイしようとすると、すべてのノードがそれを取得するはずです。

1
user182320