Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Как сделать кластер в JBoss AS 7.1 в самостоятельном (standalone) режиме?

Anna | 5.06.2014 | нет комментариев

Статья переведена и опубликована тут с целью дополнить ее рецептом от себя, добытом на основе личного навыка. Есть вера, что кто-то сэкономит полдня-день гугления и массу проб и ошибок, с которыми пришлось столкнуться мне. Дальше следует свободный перевод и дополнение лично от меня.

JBoss AS 7 кардинально отличается от предыдущих версий JBoss, следственно, если вы хотите сделать кластер в JBoss AS 7, вам следует знать несколько пророческой, Дабы не столкнуться с задачами.

В JBoss AS 7 есть два режима: режим домена (domain) и самостоятельный (standalone) режим, в этой статье мы расскажем о самостоятельном режиме. В самостоятельном режиме есть разные XML-файлы в папке конфигурации, но помощь кластеризации включена только в standalone-ha.xml и standalone-full-ha.xml, следственно удостоверитесь, что вы используете при старте один из них (см. ниже команду запуска).

Шаги для создания кластера в JBoss AS 7.1

Позже того как вы распаковали JBoss-как-7.1.1.Final.zip (от переводчика: проверено в версии 7.2.2), сделайте две копии папки standalone и переименуйте их, скажем, в standalone-node1 и standalone-node2, как показано ниже:
1 Home/user/jboss-as-7.1.1.Final/standalone-node1
2 Home/user/jboss-as-7.1.1.Final/standalone-node2
Примечание: Удостоверитесь, что вы сберегли подлинную копию папки standalone для потенциального грядущего применения.

Сейчас вы обязаны запустить JBoss дальнейшей командой, Дабы он работал как узел в кластере
Node1
./standalone.sh -c standalone-ha.xml -b 10.10.10.10 -u 230.0.0.4 -Djboss.server.base.dir=../standalone-node1 -Djboss.node.name=node1 -Djboss.socket.binding.port-offset=100

Node2
./standalone.sh -c standalone-ha.xml -b 10.10.10.10 -u 230.0.0.4 -Djboss.server.base.dir=../standalone-node2 -Djboss.node.name=node2 -Djboss.socket.binding.port-offset=200

Где:
-c = файл настроек сервера, тот, что будет применяться
-b = предуготовлен для указания адреса, тот, что прослушивает JBoss
-u = широковещательный (multicast) адрес. (от переводчика: предполагается, что будет применяться при объединение узлов в кластер, но с этим могут быть задачи, см. ниже)
-Djboss.server.base.dir = путь к папке, в которой развернут узел
-Djboss.node.name = имя узла
-Djboss.socket.binding.port-offset = смещение по портам

Примечание: Обратите внимание на следующие вещи:
— Оба узла обязаны иметь идентичный широковещательный адрес
— Оба узла обязаны иметь различные имена узлов
— В случае запуска на одном компьютере, оба узла обязаны иметь различные различное смещение по портам, во избежание раздоров. Для одного из узлов параметр -Djboss.socket.binding.port-offset дозволено опустить, он запустится на портах по-умолчанию. Также данный параметр дозволено не применять в случае запуска на различных компьютерах.

Позже запуска узлов в кластерной конфигурации вы не увидите никаких изменений. Дабы удостовериться в том, что оба узла объединились в кластер, вам необходимо будет развернуть веб-приложение, которое имеет тег <distributable/> в web.xml. Вы можете скачать один из наших примеров кластерного приложения тут.

Позже загрузки ClusterWebApp.war вы легко обязаны скопировать его в (/home/user/jboss-as-7.1.1.Final/standalone-nodeX/deployments) на обоих узлах, и сразу позже этого вы увидите сходственные сообщения:

Лог JBoss

18:32:46,863 INFO  [stdout] (pool-13-thread-1) -------------------------------------------------------------------
18:32:46,863 INFO  [stdout] (pool-13-thread-1) GMS: address=node1/web, cluster=web, physical address=10.10.10.10:55300
18:32:46,863 INFO  [stdout] (pool-13-thread-1) -------------------------------------------------------------------
18:32:47,572 INFO  [org.infinispan.configuration.cache.EvictionConfigurationBuilder] (MSC service thread 1-8) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be pasivated.
18:32:47,581 INFO  [org.infinispan.configuration.cache.EvictionConfigurationBuilder] (MSC service thread 1-1) ISPN000152: Passivation configured without an eviction policy being selected. Only manually evicted entities will be pasivated.
18:32:47,771 INFO  [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (pool-15-thread-1) ISPN000078: Starting JGroups Channel
18:32:47,791 INFO  [org.infinispan.remoting.transport.jgroups.JGroupsTransport] (pool-15-thread-1) ISPN000094: Received new cluster view: [node1/web|1] [node1/web, node2/web]
От переводчика

Если дублировать папку JBoss целиком, а не только standalone, то дозволено не указывать параметр -Djboss.server.base.dir.

В данной статье, и в большей части источников в Сети не решается одна задача. Многие (в т.ч. и я) при старте указывают параметр -b 0.0.0.0, тот, что уведомляет JBoss-у о том, что следует прослушивать все доступные сетевые интерфейсы. Это требуется если у вашего сервера, скажем, есть внешний и внутренний IP адреса, либо требуется Дабы он был доступен также и по адресам по-умолчанию (скажем, localhost). Так вот, задача в том, что jgroups, применяемый JBoss-ом для объединения кластера отказывается трудиться если указан параметр -b 0.0.0.0. При старте узлов выводится сообщение:

GMS: address=node1/web, cluster=web, physical address=0.0.0.0:55200

а при попытке их объединения возникает оплошность:

[org.jgroups.protocols.UDP] (OOB-14,shared=udp) failed sending message to node2/web (117 bytes): java.lang.Exception: dest=/0.0.0.0:55500 (120 bytes), cause: java.net.BindException: Cannot assign requested address: Datagram send failed

Насколько я осознал, jgroups требует определенного IP-адреса, и отказывается трудиться с абстрактным 0.0.0.0, а параметр запуска -u 230.0.0.4 в этом случае легко игнорируется.

Судя по сообщениям на форумах, нет каких-либо других вероятностей принудить JBoss прослушивать несколько адресов, помимо как указать параметр запуска -b 0.0.0.0. Дозволено в файле конфигурации standalone-ha.xml/standalone-full-ha.xml указать тэг <any-address/> для <interface name="public"> взамен<inet-address value="${jboss.bind.address:127.0.0.1}"/>, но, как оказалось его действие подобно параметру -b 0.0.0.0, т.е. кластер отказывается объединяться.

Длинный поиск по форумам дал в конце концов примитивное работающее решение: следует добавить параметр -Djgroups.bind_addr=IP-адрес, Дабы указать jgroups по какому именно адресу ему объединяться. Если не уверены, осуществите запуск кластера без параметра -b 0.0.0.0, и в логе увидите какой адрес предпочтет jgroups, и известит об этом в логе. У меня под Windows я увидел следующее:

GMS: address=node1/web, cluster=web, physical address=127.0.0.1:55200

Соответственно, позже этого возвращаем на место -b 0.0.0.0 и указываем в дополнение к нему -Djgroups.bind_addr=127.0.0.1.

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB