Назад | Перейти на главную страницу

Tomcat 7.0 Clustering FarmWarDeployer Не работает

В настоящее время я работаю над кластером Tomcat для вопросов и ответов, но, к сожалению, кажется, что автоматическое развертывание войны в этом кластере вообще не работает.

Я знаю, что кластер работает отлично, потому что каждый сервер правильно принимает многоадресные сообщения и мгновенно узнает о любом пропавшем узле.

Проблема здесь в функции FarmWarDeployer, которая, похоже, не работает.

Действительно, когда я загружаю войну с помощью диспетчера tomcat или простой отправки SFTPd на узел 1 моего кластера, война распаковывается и используется узлом 1, но не отправляется на мой узел 2. Вместо этого мой узел 1 говорит:

ВНИМАНИЕ: Менеджер [localhost # / APPTest ## 1.0.0]: Менеджер контекста не отправляет 14.09.12 в 17:21 за 103 мс.

и мой узел2 утверждает:

ВНИМАНИЕ: диспетчер контекста не существует: localhost # / APPTest ## 1.0.0

Что ж, мой APPTest правильно настроен с тегом, и кластер правильно принимает сеанс, если я вручную нажимаю приложение на node2.

Итак, обо мне проблема исходит из моих настроек 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>

Во мне нет ничего слишком странного для тестового кластера, но я определенно не эксперт по котам.

Итак, если что-то не так или отсутствует, дайте мне знать ;-)

Ваши watchDir и deployDir не должны находиться в одном месте. Когда tomcat увидит изменение, он попытается загрузить это, и у него будет неполный поток, поскольку ничего не происходит мгновенно. Это вызовет ошибки, которые вы видите при развертывании войны. Тот же сценарий может быть воспроизведен, если вы попытаетесь запустить scp-войну прямо в каталог развертывания. Сначала вам нужно выполнить этап на сервере, а затем развернуть.

Попробуйте добавить другой каталог для параметра watchDir, а затем попытайтесь выполнить развертывание в этот каталог, и все узлы должны его подобрать.

FarmWarDeployer можно настроить только на уровне кластера. Настройки кластера перемещаются в <Host>...</Host>. Это работает для меня.

https://tomcat.apache.org/tomcat-7.0-doc/config/cluster-deployer.html