Балансировщик нагрузки не перенаправляет запрос на второй экземпляр tomcat

Я запускаю 2 экземпляра tomcat на своей машине со следующими записями в server.xml в обоих tomcat:

Томкэт 1::

<Connector port="8081" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8444" />
    <!-- A "Connector" using the shared thread pool-->
    <!--
    <Connector executor="tomcatThreadPool"
               port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    -->
    <!-- Define a SSL HTTP/1.1 Connector on port 8443
         This connector uses the BIO implementation that requires the JSSE
         style configuration. When using the APR/native implementation, the
         OpenSSL style configuration is required as described in the APR/native
         documentation -->
    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
               maxThrea="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS" />
    -->

    <!-- Define an AJP 1.3 Connector on port 8009 -->
    <Connector port="8010" protocol="AJP/1.3" redirectPort="8444" />

Tomcat2 : server.xml::

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
<!-- A "Connector" using the shared thread pool-->
<!--
<Connector executor="tomcatThreadPool"
           port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
-->
<!-- Define a SSL HTTP/1.1 Connector on port 8443
     This connector uses the BIO implementation that requires the JSSE
     style configuration. When using the APR/native implementation, the
     OpenSSL style configuration is required as described in the APR/native
     documentation -->
<!--
<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS" />
-->

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Оба экземпляра tomcat работают параллельно.

Теперь я представил балансировщик нагрузки со следующими записями в файле /etc/httpd/httpd.conf, наконец

 #
    # Load mod_jk
    #
    LoadModule jk_module modules/mod_jk.so
    JkWorkersFile conf/workers.properties
    JkLogFile logs/mod_jk.log
    JkLogLevel info
    JkLogLevel debug
    JkLogLevel warn
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
    JkMount / loadbalancer
    JkMount /* loadbalancer

И с файлом work.properties как::

worker.list=loadbalancer

worker.jvm1.port=8009
worker.jvm1.host=127.0.0.1
worker.jvm1.type=ajp13
worker.jvm1.lbfactor=1
worker.jvm1.max_packet_size=65536
#worker.jvm1.socket_timeout=60
#worker.jvm1.connection_pool_timeout=60

worker.jvm2.port=8010
worker.jvm2.host=127.0.0.1
worker.jvm2.type=ajp13
worker.jvm2.lbfactor=1
worker.jvm2.max_packet_size=65536
#worker.jvm2.socket_timeout=60
#worker.jvm2.connection_pool_timeout=60

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=jvm1,jvm2
worker.loadbalancer.sticky_session=0

worker.jvm1.socket_keepalive=1
worker.jvm2.socket_keepalive=1
worker.loadbalancer.method=B

Теперь, перезапустив службы httpd, а затем перезагрузив tomcat и проведя тестирование, я обнаружил, что балансировщик нагрузки перенаправляет запрос только на tomcat1, а не на tomcat2. Я увеличил скорость запросов до 1000 запросов в секунду, но все еще не перенаправлял на tomcat2.

В worker.properties я отключил jvm1, а затем перезапустил httpd и tomcat2. Я получаю следующую ошибку::

    ==> error_log <==
    [Fri Jul 04 15:44:52 2014] [error] (111)Connection refused: proxy: HTTP: attempt to connect to 127.0.0.1:8080 (paisa-tomcat) failed
    [Fri Jul 04 15:44:52 2014] [error] ap_proxy_connect_backend disabling worker for (paisa-tomcat)

==> error_log <==
[Fri Jul 04 15:44:52 2014] [error] proxy: HTTP: disabled connection for (paisa-tomcat)

==> error_log <==
[Fri Jul 04 15:44:52 2014] [error] proxy: AJP: disabled connection for (paisa-tomcat)

person user3363969    schedule 04.07.2014    source источник


Ответы (1)


Я думаю, что это "worker.loadbalancer.method=B":

Если установлено значение B[usyness], балансировщик выберет воркера с самая низкая текущая нагрузка в зависимости от того, сколько запросов обслуживает рабочий процесс. Это число делится на lbfactor работников, и выбирается работник с наименьшим значением (наименее занятый). Этот метод особенно интересен, если ваш запрос обрабатывается долго, например, приложение для загрузки.

Попробуйте установить его на «N» для циклического перебора, т.е. используйте два разных браузера для проверки.

person Stefan    schedule 04.07.2014
comment
Вы установили атрибут jvmRoute в элементе двигателя? То есть: jvmRoute=jvm1 - person Stefan; 04.07.2014
comment
Не могу найти в вашем посте. Это должно выглядеть так: <Engine defaultHost="localhost" jvmRoute="jvm1" name="Catalina"> - person Stefan; 04.07.2014
comment
в одном tomcat в server.xml я добавил ‹Engine name=Catalina defaultHost=localhost jvmRoute=jvm1›, а в другом файле я добавил ‹Engine name=Catalina defaultHost=localhost jvmRoute=jvm2› - person user3363969; 04.07.2014
comment
В worker.properties я отключил jvm1, а затем перезапустил httpd и tomcat2. Я получаю следующее: [Пт, 04 июля, 15:44:52 2014] [ошибка] (111) Отказано в соединении: прокси: HTTP: попытка подключения к 127.0.0.1:8080 (paisa-tomcat) не удалась [Пт, 04 июля 15: 44:52 2014] [ошибка] ap_proxy_connect_backend отключение рабочего процесса для (tomcat) error_log: [Пт, 04 июля 15:44:52 2014] [ошибка] прокси: HTTP: отключено соединение для (paisa-tomcat) ==> error_log ‹== [Пт, 04 июля 15:44:52 2014] [ошибка] прокси: AJP: отключено соединение для (paisa-tomcat) - person user3363969; 04.07.2014