Статьи

Как настроить простой кластер JBoss в доменном режиме

Кластеризация — это очень важная вещь для любого серьезного пользователя сервера приложений. Кластеризация обеспечивает высокую доступность, делая ваше приложение доступным на вторичных серверах, когда основной экземпляр не работает, или позволяет увеличивать или уменьшать масштаб за счет увеличения плотности серверов на хосте или добавления серверов на других хостах. Это может даже помочь повысить производительность за счет эффективного распределения нагрузки между серверами на основе их соответствующего оборудования.

Энди Овертон уже рассказал о  том, как настроить кластер серверов в автономном режиме, запущенном mod_cluster для балансировки нагрузки,   поэтому в этом посте я расскажу о кластеризации в режиме домена. Я не буду перефразировать настройки mod_cluster, так что это будет охватывать настройку контроллера doman на одном хосте и экземпляров контроллера хоста и сервера на другом хосте.

Чтобы следовать этому блогу, вам нужно скачать JBoss EAP 6.x или WildFly. Я буду использовать WildFly 8.2 на Xubuntu 14.04. Я буду использовать $ WF_HOME для ссылки на ваш домашний каталог WildFly.

Настройка контроллера домена 

Контроллеру домена необходимо настроить и domain.xml, и host.xml. В каталоге $ WF_HOME / domain / configuration вы увидите, что эти два файла объединены в host-master.xml и host-slave.xml. Это предварительно сконфигурированные файлы host.xml, которые вы можете использовать, чтобы дать вам преимущество в создании host.xml для контроллера домена (главного) и хост-контроллера (ведомого).

Вы можете либо изменить имя файла на host.xml, чтобы он был выбран и использован по умолчанию, либо вы можете указать конфигурацию хоста, которую вы хотите использовать, в командной строке, добавив аргумент —host-config :

 domain.sh --host-config=host-master.xml   

Независимо от того, хотите ли вы изменить файл host.xml или host-master.xml, вам нужно убедиться, что пустой элемент <local /> был добавлен в раздел <domain-controller>. 

<domain-controller>  
        <local/>  
     </domain-controller>  

Это делается для того, чтобы, когда WildFly проверял, какой сервер является контроллером домена, он знает, что сам должен стать контроллером домена.

Другое изменение не является обязательным, но рекомендуется. Нам нужно указать контроллеру домена привязать его интерфейс управления к правильному IP-адресу, потому что по умолчанию он будет привязан к localhost, поэтому коммуникация управления, которую он должен выполнять с удаленными хостами, не сможет достичь контроллера домена. совсем!

Мы можем установить этот адрес навсегда в файле host.xml, убедившись, что значение inet-address установлено на правильный IP, изменив 127.0.0.1 в приведенном ниже примере на правильный IP:

 <interfaces>   
      <interface name="management">   
        <inet-address value="${jboss.bind.address.management:127.0.0.1}"/>   
      </interface>   
    </interfaces>   

В результате IP привязки по умолчанию для интерфейса управления больше не является localhost, хотя вы все равно можете переопределить это значение, запустив JBoss с переменной слева от двоеточия в качестве аргумента -D:

domain.sh -Djboss.bind.address.management=10.0.0.1  

Далее нам нужно изменить файл domain.xml, где нам нужно определить группы серверов; по сути, просто определение кластера.

Каждой группе серверов присваивается имя, поэтому мы можем ссылаться на нее позже и ссылаться на конкретный профиль, который должен быть одним из профилей, названных и определенных в одном и том же XML-файле.

Как я упоминал  в моем предыдущем блоге,  режим домена имеет несколько профилей в одном файле (domain.xml), а не несколько файлов для каждого, например автономный режим (standalone.xml, standalone-ha.xml и т. Д.).

На снимке экрана определены две группы серверов: «main-server-group», которая ссылается на «полный» профиль, и «other-server-group», которая ссылается на профиль «full-ha». Это только настройки по умолчанию, которые поставляются с WildFly, так что вы можете использовать их и изменять настройки или создавать свои собственные с нуля. Независимо от того, что вы выберете, хорошей идеей будет переименовать вашу группу серверов во что-то значимое, например, описание рабочей нагрузки или имя приложения.

Настройка хост-контроллеров

На каждом хост-сервере, который вы хотите включить в кластер, должен быть настроен файл host.xml. Мы уже настроили файл host.xml на контроллере домена, поэтому теперь сосредоточимся на контроллере хоста. Помните, что этот процесс может повторяться на любом количестве хостов, в зависимости от того, сколько серверов вы хотите в вашей группе серверов и их топологии.

Во-первых, нам нужно убедиться, что контроллер домена и хост-контроллер могут взаимодействовать, и для этого нам нужен действительный пользователь управления. На контроллере домена запустите скрипт add-user.sh или add-user.bat.

Вам необходимо убедиться, что: 

  • Выберите пользователя для управления 
  • Убедитесь, что пользователь отличается от того, который вы использовали бы для входа в веб-консоль 
  • Убедитесь, что новый пользователь подключит один процесс AS к другому процессу AS 
  • Запишите секретное значение (это очень важно!) 

Вы обнаружите, что вы получаете подсказки, подобные следующим:

mike@mike-C2B2:~$ /opt/wildfly/wildfly-8.2.0.Final/bin/add-user.sh   
 What type of user do you wish to add?   
  a) Management User (mgmt-users.properties)   
  b) Application User (application-users.properties)   
 (a): a   
 Enter the details of the new user to add.   
 Using realm 'ManagementRealm' as discovered from the existing property files.   
 Username : mgmt   
 Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file.   
  - The password should not be one of the following restricted values {root, admin, administrator}   
  - The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s)   
  - The password should be different from the username   
 Password :   
 Re-enter Password :   
 What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[ ]:   
 About to add user 'mgmt' for realm 'ManagementRealm'   
 Is this correct yes/no? yes   
 Added user 'mgmt' to file '/opt/wildfly/wildfly-8.2.0.Final/standalone/configuration/mgmt-users.properties'   
 Added user 'mgmt' to file '/opt/wildfly/wildfly-8.2.0.Final/domain/configuration/mgmt-users.properties'   
 Added user 'mgmt' with groups to file '/opt/wildfly/wildfly-8.2.0.Final/standalone/configuration/mgmt-groups.properties'   
 Added user 'mgmt' with groups to file '/opt/wildfly/wildfly-8.2.0.Final/domain/configuration/mgmt-groups.properties'   
 Is this new user going to be used for one AS process to connect to another AS process?   
 e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server EJB calls.   
 yes/no? yes   
 To represent the user add the following to the server-identities definition <secret value="bWdtdDEyMyE=" />   

Получив секретное значение для нашего управляющего пользователя, мы можем добавить его в файл host.xml. Я решил изменить файл host-slave.xml, так как большая часть необходимой мне конфигурации сделана для меня:

<?xml version='1.0' encoding='UTF-8'?>   
  <host xmlns="urn:jboss:domain:2.2">   
    <management>   
      <security-realms>   
        <security-realm name="ManagementRealm">   
          <server-identities>   
             <!-- Replace this with either a base64 password of your own, or use a vault with a vault expression -->   
             <secret value="bWdtdDEyMyE="/>   
          </server-identities>  

Далее нам нужно указать хост-контроллеру, где искать контроллер домена. Мы установили это значение в <local /> для файла host.xml контроллера домена, но в host-slave.xml у нас есть пример тега <remote>, заполненный для нас. Все, что нам нужно сделать, это добавить IP-адрес контроллера домена или имя хоста точно так же, как мы делали для адреса привязки управления ранее. Итак, наш host-slave.xml должен идти из этого:

 <domain-controller>   
      <remote host="${jboss.domain.master.address}" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>   
   </domain-controller>  

к этому:

<domain-controller>  
      <remote host="${jboss.domain.master.address:10.0.0.1}" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>  
   </domain-controller>  

Таким образом, как и в случае интерфейса управления на контроллере домена, адрес по умолчанию будет 10.0.0.1, но при необходимости его также можно переопределить в командной строке.

После того, как мы разобрались с коммуникацией, нам нужно сказать хост-контроллеру, чтобы он действительно запустил несколько экземпляров сервера!

В нижней части файла host-slave.xml есть два предопределенных сервера для использования:

 <servers>  
      <server name="server-one" group="main-server-group"/>  
      <server name="server-two" group="other-server-group">  
        <!-- server-two avoids port conflicts by incrementing the ports in  
           the default socket-group declared in the server-group -->  
        <socket-bindings port-offset="150"/>   
      </server>   
    </servers>  

Они уже настроены, чтобы стать членами двух групп серверов, настроенных в файле domain.xml. Обратите внимание, что второй сервер должен иметь смещение порта. Несмотря на то, что он находится в другой группе серверов, он все равно будет работать на том же хосте и будет пытаться подключиться к тем же портам, что и первый сервер, если мы не скажем этого! Нам также нужно будет сделать то же самое, если мы добавим другие экземпляры сервера.

При желании мы можем немного облегчить себе задачу, управляя множеством серверов на множестве хостов. Мы можем дать каждому экземпляру сервера свое уникальное имя, но мы также можем назвать хост, добавив атрибут name к родительскому тегу, изменив его с:

<host xmlns="urn:jboss:domain:2.2"> 

в

<host xmlns="urn:jboss:domain:2.2" name="host1">

Таким образом, как в журналах, так и в консоли администратора, вы должны увидеть этот хост-контроллер, называемый «host1». Теперь, если вы хотите присвоить экземплярам вашего сервера одинаковые имена для всех хостов, вы сможете определить, какой есть какой!

Если все, что вам нужно, это настроить один контроллер домена и один хост-контроллер, то это все, что нам нужно сделать, чтобы они общались друг с другом. Затем вы можете продолжить и настроить mod_cluster и Apache для пересылки запросов на нужный сервер или просто развернуть свои приложения и подключиться к ним напрямую.