Tomcat Apache 7.0.57 Кластера и mod_proxy / mod_proxy_ajp

Я настроил Кластер Tomcat Apache с Apache сервер HTTP и выравнивание нагрузки на CentOS 6.6 следующий путь:

+ 1 VM рабочий сервер HTTP и 1 экземпляр Tomcat (используемый для развертывания, не отвечая на запросы)
+ 1 VM выполнение 2 экземпляров Tomcat на различных портах


Важные вещи сначала:
+ watchEnabled: на ведущем устройстве = "верный", на ведомых устройствах = "ложь"
+ Коннектор HTTP только для главного узла, не определенного на ведомых устройствах
+ порт для коннектора AJP, отличающегося на каждом экземпляре
+ tcpListenerPort для NioReceiver, отличающегося на каждом экземпляре
+ значение jvmRoute равняется соответствующему имени хоста на всех экземплярах
+ соедините каналом к watchDir / tempDir отличающийся, deployDir = веб-приложения на каждом экземпляре
+ порт для завершения работы, отличающегося на каждом экземпляре
+ firewalld/iptables выключен на всех узлах (тестовая среда)
+ ДА, я уже считал много вещей об этой теме (официальная документация, учебные руководства, и т.д....).

server.xml (только важная часть)

<Server port="8004" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <!-- HTTP connector on port 8081 -->
    <Connector 
      connectionTimeout="20000" 
      port="8081" protocol="HTTP/1.1" 
      redirectPort="8443"/>
    <!-- Define an AJP 1.3 Connector on port 8012 -->
    <Connector 
      port="8012" 
      protocol="AJP/1.3" 
      redirectPort="8443"/>
    <!-- Engine definition for clustering -->
    <Engine 
      defaultHost="localhost" 
      jvmRoute="acd10-master" 
      name="Catalina">
      <Realm className="org.apache.catalina.realm.MemoryRealm"/>
      <Host 
        appBase="webapps" 
        autoDeploy="true" 
        name="192.168.2.139" 
        undeployOldVersions="true" 
        unpackWARs="true">
        <Cluster 
          channelSendOptions="6" 
          className="org.apache.catalina.ha.tcp.SimpleTcpCluster" 
          useDirtyFlag="true">
          <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
          <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
          <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
          <Channel className="org.apache.catalina.tribes.group.GroupChannel">
            <Membership 
              address="228.0.0.4" 
              className="org.apache.catalina.tribes.membership.McastService" 
              dropTime="3000" 
              frequency="500" 
              port="45564"/>
            <Receiver 
              address="auto" 
              className="org.apache.catalina.tribes.transport.nio.NioReceiver" 
              maxThreads="6" 
              port="4005" 
              timeout="100"/>
            <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>
          <Deployer 
            className="org.apache.catalina.ha.deploy.FarmWarDeployer" 
            deployDir="/usr/local/tomcat7/webapps/" 
            tempDir="/usr/local/tomcat7/war-temp/" 
            watchDir="/usr/local/tomcat7/war-watch/" 
            watchEnabled="true"/>
        </Cluster>
      </Host>
    </Engine>
  </Service>
</Server>



mod_proxy.conf

<VirtualHost *:80>
  DocumentRoot /var/www/html

  ProxyRequests Off
  ProxyPreserveHost On

  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>

  <Proxy balancer://testcluster>
    BalancerMember ajp://192.168.2.166:8010/ route=acd11-node01
    BalancerMember ajp://192.168.2.166:8011/ route=acd11-node02
    ProxySet lbmethod=byrequests
  </Proxy>

  # Exclude balancer-manager app to make it available on master
  ProxyPass /balancer-manager !

  ProxyPass / balancer://testcluster/ stickysession=JSESSIONID|jsessionid
  ProxyPassReverse / balancer://testcluster/ stickysession=JSESSIONID|jsessionid

  <Location /balancer-manager>
    SetHandler balancer-manager
  </Location>
</VirtualHost>



Править:

Журнал ошибок Apache (что это дает мне после запуска):

[Tue Jan 06 08:29:49.235859 2015] [mpm_prefork:notice] [pid 9655] AH00170: caught SIGWINCH, shutting down gracefully
[Tue Jan 06 08:29:50.306520 2015] [core:notice] [pid 9727] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Tue Jan 06 08:29:50.307867 2015] [suexec:notice] [pid 9727] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Tue Jan 06 08:29:50.319218 2015] [so:warn] [pid 9727] AH01574: module proxy_module is already loaded, skipping
[Tue Jan 06 08:29:50.319797 2015] [so:warn] [pid 9727] AH01574: module proxy_ajp_module is already loaded, skipping
[Tue Jan 06 08:29:50.319827 2015] [so:warn] [pid 9727] AH01574: module proxy_balancer_module is already loaded, skipping
[Tue Jan 06 08:29:50.320610 2015] [so:warn] [pid 9727] AH01574: module proxy_http_module is already loaded, skipping
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::50a0:e2ff:fe74:5294. Set the 'ServerName' directive globally to suppress this message
[Tue Jan 06 08:29:50.328101 2015] [auth_digest:notice] [pid 9727] AH01757: generating secret for digest authentication ...
[Tue Jan 06 08:29:50.329387 2015] [lbmethod_heartbeat:notice] [pid 9727] AH02282: No slotmem from mod_heartmonitor
[Tue Jan 06 08:29:50.333216 2015] [mpm_prefork:notice] [pid 9727] AH00163: Apache/2.4.6 (CentOS) configured -- resuming normal operations
[Tue Jan 06 08:29:50.333263 2015] [core:notice] [pid 9727] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'



Чего я пытаюсь достигнуть:
У нас есть много веб-приложений предприятия, которые мы хотим загрузить баланс всюду по ферме Tomcat.


Что действительно работает:
+ Кластеризация Tomcat
+ Репликация
+ FarmWarDeployer


Что не работает:
Каждый раз, когда я пытаюсь назвать приложение, это было развернуто всюду по кластеру, это дает мне 404 не найденный. То же для корневых приложений Tomcat, таких как/manager/html или/host-manager. Только приложение, которое работает,/balancer-manager, очевидно.

httpd сервер, как предполагается, служит подсистемой балансировки нагрузки и прокси котам. Это должно будет поставить некоторое статическое содержание, но прежде всего, я должен разбудить эту вещь, и работающий для загрузки балансируют приложения JavaEE (сервлеты). AJP к кластерным узлам является необходимой вещью для меня, так как http доступ не должен быть, позволяют (+ по некоторым другим причинам, которые стоят полностью другого обсуждения).

Так как все, кажется, настраивают mod_proxy конфигурацию другим способом, я ищу прямое решение, которое дает мне что-то, на чем я могу основываться. При необходимости в большей информации или большем количестве деталей конфигурации сообщите мне, и я предоставлю Вам тех. У меня уже есть настроенное использование второго кластера mod_jk, и все работает, как предназначено, но Заинтересованные стороны требуют этого mod_proxy (_ajp) вещь, и это просто шлифует мои механизмы.


Ваша справка очень ценится!

С уважением!

0
задан 6 January 2015 в 18:32
1 ответ

Я не пробовал воспроизвести вашу конфигурацию, но когда я посмотрел на нее сегодня утром, похоже, что проблема заключается в отсутствии места и, возможно, ProxyPassReverse не соответствует ProxyPass (однако более поздний вариант не Думаю, не даст вам 404).

ProxyPass / balancer: // testcluster / stickysession = JSESSIONID | jsessionid

ProxyPassReverse / balancer: // testcluster /

должно быть:

ProxyPass / balancer: // testcluster / stickysession = JSESSIONID | jsessionid

ProxyPassReverse / balancer: // testcluster / stickysession = JSESSIONID | jsessionid

По крайней мере, у меня так и нет проблем (но я не использую AJP, просто обычный http-прокси).

Очевидно, это предполагает, что все основные вещи на месте (сайт включен, перезагрузка, установлен и включен мод http-прокси и т. д.).

0
ответ дан 5 December 2019 в 13:00

Теги

Похожие вопросы