Кластеризация не работает с mod_cluster на JbossAS7 - Stateful Application
Я собираюсь объяснить мою ситуацию.
Фон:
Я использую три виртуальные машины с Debian Jessie на открытой туманности, одну в качестве мастера, а две другие в качестве рабов. В них я установил JBoss AS 7.1 и mod_cluster 1.2.
Цель:
Запустите приложение с отслеживанием состояния, поэтому, когда я выключаю главный сервер, кластер позволяет мне продолжать использовать приложение с общим сеансом и поддерживать значения переменных.
Я следовал этому руководству с данным веб-приложением.
Ошибки:
- Я не могу получить прямой доступ к приложению по адресу http://master/cluster-demo/, как в приведенном выше руководстве, я должен указать порт (8330 для сервера-три).
- Когда я выключаю сервер-3, ведомые устройства замечают, что сервер выключен, но сеанс не является общим, и приложение больше не доступно. Это выход ведомого, когда я выкрикиваю сервер-три на главном.
Конфигурационные файлы
Я прилагаю мои файлы конфигурации:
1 ответ
Ответ
mod_cluster не имеет ничего общего с подсистемами обмена сообщениями (JMS, HornetQ). Параметр mod_cluster также не имеет ничего общего с кластерной подсистемой, то есть Infinispan и его рабочей лошадкой, JGroups.
Подсистема mod_cluster AS7 делает то, что она слушает многоадресные рекламные сообщения UDP, отправляемые модулями Apache HTTP Server mod_cluster. Получив такое сообщение, он регистрируется на вашем балансировщике нагрузки Apache HTTP Server. С этого момента ваш зарегистрированный "рабочий" узел AS7 продолжает отправлять специализированные HTTP-сообщения (через TCP), информируя Apache HTTP Server о:
- его имя (jvmRoute или сгенерированный)
- его текущая нагрузка
- его развертывания, то есть контексты приложения
- псевдонимы и т. д.
Если с вашим балансировщиком Apache HTTP Server не зарегистрированы рабочие узлы, контексты отсутствуют, поэтому вам некуда перенаправлять ваши запросы.
В соответствии с конфигурацией, которую вы опубликовали, вы полагаетесь на многоадресные UDP-сообщения, отправляемые / получаемые от 224.0.1.105:23364.
Открытая туманность, межсетевой экран и многоадресная рассылка UDP
Возможно, что Open Nebula не разрешает многоадресную передачу UDP между узлами или что ваши iptables блокируют ее. Попробуй это:
- используйте curl на вашем рабочем хосте для доступа к хосту балансировщика - именно VirtualHost, где у вас есть директива
EnableMCPMReceive
определены. - если это не работает, вы должны исправить iptables, selinux, httpd's allow/deny и т. д.
- если это работает, это хороший знак того, что работник может поговорить с балансировщиком
- перейдите в свою AS7 xml, подсистему modcluster и добавьте атрибут в конфигурацию:
<mod-cluster-config advertise-socket="modcluster" proxy-list="your-httpd-address:port">
- тот, который вы только что попробовали с curl - теперь он должен работать даже без многоадресной рассылки UDP
- если вы хотите отладить настройки многоадресной рассылки UDP в Open Nebula, попробуйте это с Advertize.java
1.2.0 слишком стар, не используйте уязвимый код
Пожалуйста, не используйте mod_cluster 1.2.0 с вашим сервером Apache HTTP. Версия полностью устарела и содержит серьезные ошибки, в том числе CVE внедрения кода и серьезные проблемы с производительностью. Загрузите mod_cluster 1.3.1.Final для httpd 2.4.x или создайте свой собственный из источников, если вы хотите поддержку httpd 2.2.x. Если вам понадобится какая-либо помощь с этим, спросите.