Я пытаюсь настроить кластер 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 будут автоматически обнаруживаться через многоадресные объявления. Его можно использовать вместе или вместо статического списка прокси.
прокси: для 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 и содержит множество важных исправлений ошибок.