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

mod_cluster сообщает «MEM: не удается прочитать узел» и «Все рабочие в состоянии ошибки» для кластера JBoss AS 7.1.1

Я пытаюсь настроить кластер JBoss AS 7.1.1 в режиме домена с помощью mod_cluster на прокси-сервере apache2. Все хосты работают под управлением Ubuntu и являются облачными серверами Rackspace.

Моя проблема в том, что когда я нажимаю на свое приложение на http://project.example.com/ Я просто получаю 503

Отчеты журнала JBoss:

org.jboss.modcluster.mcmp.impl.DefaultMCMPHandler] (ContainerBackgroundProcessor[StandardEngine[jboss.web]]) Error [MEM: MEM: Can't read node: {4}] sending command STATUS to proxy proxy-ip/proxy-ip:6666, configuration will be reset

На странице управления mod_cluster есть эта информация:

Выход DUMP

balancer: [1] Name: main-server-group Sticky: 1 [JSESSIONID]/[jsessionid] remove: 0 force: 0 Timeout: 0 maxAttempts: 1
node: [1:1],Balancer: main-server-group,JVMRoute: slave:server-two,LBGroup: [],Host: project-jb-node1,Port: 8159,Type: ajp,flushpackets: 0,flushwait: 10,ping: 10,smax: 26,ttl: 60,timeout: 0
node: [2:2],Balancer: main-server-group,JVMRoute: master:server-one,LBGroup: [],Host: project-jb-master,Port: 8009,Type: ajp,flushpackets: 0,flushwait: 10,ping: 10,smax: 26,ttl: 60,timeout: 0
node: [3:3],Balancer: main-server-group,JVMRoute: master:server-two,LBGroup: [],Host: project-jb-master,Port: 8159,Type: ajp,flushpackets: 0,flushwait: 10,ping: 10,smax: 26,ttl: 60,timeout: 0
node: [4:4],Balancer: main-server-group,JVMRoute: slave:server-one,LBGroup: [],Host: project-jb-node1,Port: 8009,Type: ajp,flushpackets: 0,flushwait: 10,ping: 10,smax: 26,ttl: 60,timeout: 0

Вывод INFO:

Node: [1],Name: slave:server-two,Balancer: main-server-group,LBGroup: ,Host: project-jb-node1,Port: 8159,Type: ajp,Flushpackets: Off,Flushwait: 10,Ping: 10,Smax: 26,Ttl: 60,Elected: 0,Read: 0,Transfered: 0,Connected: 0,Load: 100
Node: [2],Name: master:server-one,Balancer: main-server-group,LBGroup: ,Host: project-jb-master,Port: 8009,Type: ajp,Flushpackets: Off,Flushwait: 10,Ping: 10,Smax: 26,Ttl: 60,Elected: 0,Read: 0,Transfered: 0,Connected: 0,Load: 100
Node: [3],Name: master:server-two,Balancer: main-server-group,LBGroup: ,Host: project-jb-master,Port: 8159,Type: ajp,Flushpackets: Off,Flushwait: 10,Ping: 10,Smax: 26,Ttl: 60,Elected: 0,Read: 0,Transfered: 0,Connected: 0,Load: 100
Node: [4],Name: slave:server-one,Balancer: main-server-group,LBGroup: ,Host: project-jb-node1,Port: 8009,Type: ajp,Flushpackets: Off,Flushwait: 10,Ping: 10,Smax: 26,Ttl: 60,Elected: 0,Read: 0,Transfered: 0,Connected: 0,Load: 100

После перезапуска apache error.log содержит:

[Sun May 26 19:17:51 2013] [notice] Apache/2.2.22 (Ubuntu) mod_cluster/1.2.0.Final configured -- resuming normal operations
[Sun May 26 19:17:52 2013] [warn] manager_handler STATUS error: MEM: Can't read node
[Sun May 26 19:17:53 2013] [warn] manager_handler STATUS error: MEM: Can't read node
[Sun May 26 19:17:55 2013] [warn] manager_handler STATUS error: MEM: Can't read node
[Sun May 26 19:18:00 2013] [warn] manager_handler STATUS error: MEM: Can't read node
[Sun May 26 19:18:26 2013] [error] proxy: CLUSTER: (balancer://main-server-group). All workers are in error state

Если я ударил http://project.example.com/index.html Я получаю это в журнале ошибок apache:

[Sun May 26 19:34:33 2013] [warn] proxy: No protocol handler was valid for the URL /index.html. If you are using a DSO version of mod_proxy, make sure the proxy submodules are included in the configuration using LoadModule.

Имена хостов (project-jb-master etc) сопоставлены с IP-адресами в / etc / hosts, и я могу подключиться по telnet и пинговать.

Погуглив об этом, я нашел много упоминаний идентификатора экземпляра, поэтому я установил его в профиле full-ha:

<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" instance-id="${jboss.node.name}" native="false">
    <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
    <connector name="ajp" protocol="AJP/1.3" scheme="http" socket-binding="ajp"/>
    <virtual-server name="default-host" enable-welcome-root="false">
        <alias name="localhost"/>
        <alias name="project.example.com"/>
    </virtual-server>
</subsystem>

но исходное сообщение все еще там.

Многоадресная рассылка в настоящее время запрещена на серверах Rackspace Cloud. Объем многоадресного трафика приводит к перегрузке уровня коммутации и ухудшает производительность сети для всего трафика.

По этой причине конфигурация должна выглядеть примерно так:

Конфигурация Apache:

Listen host:6666

<VirtualHost host:6666>
  EnableMCPMReceive
  <Location /mod_cluster-manager>
    SetHandler mod_cluster-manager
  </Location>
</VirtualHost>

ServerAdvertise не включена

Конфигурация JBoss:

<subsystem xmlns="urn:jboss:domain:modcluster:1.1">
  <mod-cluster-config advertise="false" connector="ajp" proxy-list="host:6666">
    ...
  </mod-cluster-config>
</subsystem>

список прокси

Определяет разделенный запятыми список прокси-серверов httpd, с которыми этот узел будет первоначально связываться. Значение должно иметь вид:

address1:port1,address2:port2

рекламировать

Используя конфигурацию по умолчанию, этим свойством можно управлять через jboss.mod_cluster.proxyList системное свойство.

Если этот параметр включен, прокси httpd будут автоматически обнаруживаться через многоадресные объявления. Его можно использовать вместе или вместо статического списка прокси.

mod_cluster Документация

прокси: для URL /index.html не действовал обработчик протокола. Если вы используете DSO-версию mod_proxy, убедитесь, что подмодули прокси включены в конфигурацию с помощью LoadModule.

Убедитесь, что вы загрузили mod_proxy_http и / или mod_proxy_ajp.

Настройте HTTP-сервер Apache на отладку LogLevel. Тогда вы сможете увидеть в error_log, какие сообщения отправляют экземпляры AS7. Кроме того, обновите mod_cluster до 1.2.6. Он полностью обратно совместим с 1.2.4 и содержит множество важных исправлений ошибок.