Apache Artemis

В качестве брокера сообщений в системе SMP используется Apache Artemis. Поддерживается как вариант одиночного брокера сообщений, так и создание отказоустойчивого кластера. Создание кластера требует общего хранилища сообщений для обеих нод брокера. Хранилищем может быть либо общий каталог на диске, либо база данных.

Все операции в консоли, не требующие привилегий root необходимо выполнять от имени пользователя ОС, от имени которого работает приложение (nausd4). В этом случае не возникнет проблем, вызванных отсутствием доступа к файлам или каталогам.

Установка Artemis

На сервере должны быть установлены пакеты и выполнены настройки по подготовке серверов (Подготовка серверов) , а также должна быть установлена Java (Установка JDK).

В случае кластерной установки операции выполняются на обеих нодах брокера.

  1. Создайте каталоги для сохранения дистрибутива Artemis:

    mkdir -p /opt/naumen/deploy/$(date +'%F')/{update,backup}

  2. Скачайте Artemis нужной версии. Требуемая версия Artemis указана в разделе Условия эксплуатации.

    В качестве примера приводится процедура установки версии 2.41.0.

    wget -P /opt/naumen/deploy/$(date +'%F')/update/ https://archive.apache.org/dist/activemq/activemq-artemis/2.41.0/apache-artemis-2.41.0-bin.tar.gz

  3. Распакуйте архив в /opt/naumen:

    tar -xaf /opt/naumen/deploy/$(date +'%F')/update/apache-artemis-2.41.0-bin.tar.gz -C /opt/naumen/

  4. Создайте ссылку на каталог с Artemis:

    ln -snf /opt/naumen/apache-artemis-2.41.0/ /opt/naumen/artemis

  5. Создайте брокер очередей в случае использования конфигурации с одним Artemis (или два брокера - при использовании кластерной конфигурации Artemis):

    • Одиночный.

      Copy
      JAVA_HOME=/opt/naumen/java /opt/naumen/artemis/bin/artemis create /opt/naumen/broker \
          --user artemismq \
          --password 'ARTEMIS_USER_PASSWORD' \
          --role amq \
          --require-login \
          --no-amqp-acceptor \
          --no-hornetq-acceptor \
          --no-mqtt-acceptor \
          --no-stomp-acceptor \
          --force

      где ARTEMIS_USER_PASSWORD — пароль пользователя брокера очередей, который нужно будет указать в настройках приложения SMP.

    • Кластер с общим каталогом.

      В данном случае необходимо по пути /opt/naumen/broker/data смонтировать общий для обеих нод Artemis каталог, доступный для чтения и записи пользователю, от имени которого работает брокер очередей (nausd4).

      На ведущем:

      Copy
      JAVA_HOME=/opt/naumen/java/ /opt/naumen/artemis/bin/artemis create /opt/naumen/broker \
          --user artemismq \
          --password 'ARTEMIS_USER_PASSWORD' \
          --role amq \
          --require-login \
          --no-hornetq-acceptor \
          --no-mqtt-acceptor \
          --no-stomp-acceptor \
          --no-amqp-acceptor \
          --shared-store \
          --host ARTEMIS_PRIMARY_IP \
          --staticCluster "tcp://ARTEMIS_PRIMARY_IP:61616,tcp://ARTEMIS_BACKUP_IP:61616" \
          --cluster-user amqcluster \
          --cluster-password CLUSTER_PASSWORD \
          --failover-on-shutdown=true \
          --force

      На резервном:

      Copy
      JAVA_HOME=/opt/naumen/java/ /opt/naumen/artemis/bin/artemis create /opt/naumen/broker \
          --user artemismq \
          --password 'ARTEMIS_USER_PASSWORD' \
          --role amq \
          --require-login \
          --no-hornetq-acceptor \
          --no-mqtt-acceptor \
          --no-stomp-acceptor \
          --no-amqp-acceptor \
          --shared-store \
          --host ARTEMIS_BACKUP_IP \
          --staticCluster "tcp://ARTEMIS_PRIMARY_IP:61616,tcp://ARTEMIS_BACKUP_IP:61616" \
          --cluster-user amqcluster \
          --cluster-password CLUSTER_PASSWORD \
          --backup \
          --force

      где:

      • ARTEMIS_USER_PASSWORD — пароль пользователя брокера очередей, который нужно будет указать в настройках приложения SMP;
      • CLUSTER_PASSWORD — пароль кластера, должен быть одинаковым на ведущей и резервной нодах;
      • ARTEMIS_PRIMARY_IP и ARTEMIS_BACKUP_IP — соответственно IP-адреса ведущей и резервной нод.
    • Кластер с хранением очередей в базе данных PostgreSQL.

      В данной конфигурации необходимо создать на сервере PostgreSQL базу данных artemisdb c владельцем artemisdb

      На ведущем:

      Copy
      JAVA_HOME=/opt/naumen/java/ /opt/naumen/artemis/bin/artemis create /opt/naumen/broker \
          --user artemismq \
          --password 'ARTEMIS_USER_PASSWORD' \
          --role amq \
          --require-login \
          --no-hornetq-acceptor \
          --no-mqtt-acceptor \
          --no-stomp-acceptor \
          --no-amqp-acceptor \
          --shared-store \
          --host ARTEMIS_PRIMARY_IP \
          --staticCluster "tcp://ARTEMIS_PRIMARY_IP:61616,tcp://ARTEMIS_BACKUP_IP:61616" \
          --cluster-user amqcluster \
          --cluster-password CLUSTER_PASSWORD \
          --failover-on-shutdown=true \
          --force \
          --jdbc \
          --jdbc-connection-url="jdbc:postgresql://ARTEMISDB_IP:5432/artemisdb?user=artemisdb&password=ARTEMISDB_PASSWORD" \
          --jdbc-driver-class-name=org.postgresql.Driver

      На резервном:

      Copy
      JAVA_HOME=/opt/naumen/java/ /opt/naumen/artemis/bin/artemis create /opt/naumen/broker \
          --user artemismq \
          --password 'ARTEMIS_USER_PASSWORD' \
          --role amq \
          --require-login \
          --no-hornetq-acceptor \
          --no-mqtt-acceptor \
          --no-stomp-acceptor \
          --no-amqp-acceptor \
          --shared-store \
          --host ARTEMIS_BACKUP_IP \
          --staticCluster "tcp://ARTEMIS_PRIMARY_IP:61616,tcp://ARTEMIS_BACKUP_IP:61616" \
          --cluster-user amqcluster \
          --cluster-password CLUSTER_PASSWORD \
          --force \
          --jdbc \
          --jdbc-connection-url="jdbc:postgresql://ARTEMISDB_IP:5432/artemisdb?user=artemisdb&password=ARTEMISDB_PASSWORD" \
          --jdbc-driver-class-name=org.postgresql.Driver \
          --backup

      где:

      • ARTEMIS_USER_PASSWORD — пароль пользователя брокера очередей, который нужно будет указать в настройках приложения SMP;
      • CLUSTER_PASSWORD — пароль кластера, должен быть одинаковым на ведущей и резервной нодах;
      • ARTEMIS_PRIMARY_IP и ARTEMIS_BACKUP_IP — соответственно IP-адреса ведущей и резервной нод;
      • ARTEMISDB_IP — адрес сервера PostgreSQL, на котором находится база данных artemisdb;
      • ARTEMISDB_PASSWORD — пароль пользователя базы данных.

      Скачайте JDBC драйвер PostgreSQL и поместите его в каталог /opt/naumen/broker/lib/:

      wget -P /opt/naumen/broker/lib/ https://jdbc.postgresql.org/download/postgresql-42.7.4.jar

  6. Скачайте с сайта NAUMEN (ссылка для скачивания) и поместите в каталог update подготовленные шаблоны файлов конфигурации:

    • artemis.profile — параметры виртуальной машины java и окружения работы Artemis,
    • artemis.service — файл определения параметров сервиса Artemis.
  7. Скопируйте файлы конфигурации:

    • artemis.profile:

      cp /opt/naumen/deploy/$(date +'%F')/update/artemis.profile /opt/naumen/broker/etc/

  8. Задайте объем выделенной приложению памяти в artemis.profile:

    • -Xms — стартовый размер области Heap;
    • -Xmx — максимальный размер области Heap.

    В файле конфигурации /opt/naumen/broker/etc/broker.xml можно настроить значение параметра <max-disk-usage>, в котором указывается максимальный процент использования дискового пространства, при достижении которого брокер начинает отклонять прием новых сообщений. По умолчанию значение равно 90%, рекомендуем повысить его до 98% изменив данный блок на <max-disk-usage>98</max-disk-usage>.

  9. Создайте сервис Artemis:

    • Скопируйте файл сервиса:

      sudo cp /opt/naumen/deploy/$(date +'%F')/update/artemis.service /etc/systemd/system/

    • Перечитайте файлы systemd:

      sudo systemctl daemon-reload

    • Команда включает автозапуск сервиса при загрузке сервера. Если вам это не нужно, не выполняйте ее.

      sudo systemctl enable artemis

      Описание сервиса в данном файле корректно для случая установки приложения согласно данному руководству: сервис работает от имени пользователя nausd4, пути установки соответствуют рекомендациям данного руководства.

  10. Настройте возможность пользователю nausd4 управлять сервисом Artemis:

    Copy
    cat  <<EOF | sudo tee /etc/sudoers.d/nausd4
    nausd4 ALL=(root) NOPASSWD: /bin/systemctl * artemis*
    EOF

    По умолчанию брокер очередей принимает соединения на порту 61616. Рекомендуем не изменять его. До запуска сервиса Artemis убедитесь, что указанный порт не занят на сервере.

Проверка текущей версии Artemis

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

export JAVA_HOME=/opt/naumen/java && /opt/naumen/artemis/bin/artemis version

Обновление Artemis

Обновление Artemis необходимо проводить при остановленном приложении SMP (сервис Tomcat) и при остановленном Artemis (сервис Artemis).

В большинстве случаев экземпляр Artemis-a можно обновить до более новой версии, просто обновив версию ПО, расположенного в ARTEMIS_HOME (/opt/naumen/artemis) и изменив значение этого свойства в файле /opt/naumen/broker/etc/artemis.profile на местоположение новой версии. Для получения информации о необходимости дополнительных действий при обновлении рекомендуем обратиться к документу версий Apache Artemis (ссылка на документацию). В случае выполнения дополнительных действий, согласно данным инструкциям, необходимо делать резервные копии всех изменяемых конфигурационных файлов на случай отката к предыдущей версии.

  1. Создайте каталог для проведения обновления:

    mkdir -p /opt/naumen/deploy/$(date +'%F')/{update,backup}

  2. Скачайте Artemis нужной версии. Требуемая версия Artemis указана в разделе Условия эксплуатации. В качестве примера приводится процедура обновления с версии 2.17.0 на версию 2.41.0.

    wget -P /opt/naumen/deploy/$(date +'%F')/update/ https://archive.apache.org/dist/activemq/activemq-artemis/2.41.0/apache-artemis-2.41.0-bin.tar.gz

  3. Распакуйте архив в /opt/naumen:

    tar -xaf /opt/naumen/deploy/$(date +'%F')/update/apache-artemis-2.41.0-bin.tar.gz -C /opt/naumen/

  4. Создайте ссылку на каталог с Artemis новой версии:

    ln -snf /opt/naumen/apache-artemis-2.41.0/ /opt/naumen/artemis

  5. Сделайте резервные копии файлов:

    • artemis.profile:

      cp /opt/naumen/broker/etc/artemis.profile /opt/naumen/deploy/$(date +'%F')/backup/

    • broker.xml:

      cp /opt/naumen/broker/etc/broker.xml /opt/naumen/deploy/$(date +'%F')/backup/

  6. Сделайте резервную копию каталога данных:

    cp -r /opt/naumen/broker/data /opt/naumen/deploy/$(date +'%F')/backup/

  7. Удостоверьтесь, что переменная ARTEMIS_HOME в файле /opt/naumen/broker/etc/artemis.profile указывает на каталог /opt/naumen/artemis:

    grep ARTEMIS_HOME= /opt/naumen/broker/etc/artemis.profile

  8. Переместите каталог старой версии Artemis каталог backup:

    mv /opt/naumen/apache-artemis-2.17.0/ /opt/naumen/deploy/$(date +'%F')/backup/

  9. При наличии рекомендаций по выполнению дополнительных действий согласно раздела версий документации Apache Artemis выполните их (ссылка на документацию).
Откат обновления Artemis

Откат обновления Artemis необходимо проводить при остановленном приложении SMP (сервис Tomcat) и при остановленном Artemis (сервис Artemis).

В качестве примера приводится процедура отката с версии 2.41.0 на версию 2.17.0.

  1. Восстановите из резервной копии каталог версии Artemis:

    cp -r /opt/naumen/deploy/<Дата обновления>/backup/apache-artemis-2.17.0 /opt/naumen/

  2. Создайте ссылку на каталог с Artemis восстанавливаемой версии:

    ln -snf /opt/naumen/apache-artemis-2.17.0/ /opt/naumen/artemis

  3. Если при обновлении версии Artemis производились дополнительные действия согласно рекомендациям из раздела версий документации Apache Artemis, восстановите из резервных копий измененные файлы (ссылка на документацию).
  4. Если откат версии производится сразу же после неудачного обновления, по причине невозможности запуска на новой версии, то восстановите из резервной копии каталог данных.

    • Удалите действующий каталог данных:

      rm -rf /opt/naumen/broker/data

    • Скопируйте каталог данных из резервной копии:

      cp -r /opt/naumen/deploy/<Дата обновления>/backup/data /opt/naumen/broker/

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

  5. Удостоверьтесь, что переменная ARTEMIS_HOME в файле /opt/naumen/broker/etc/artemis.profile указывает на каталог /opt/naumen/artemis:

    grep ARTEMIS_HOME= /opt/naumen/broker/etc/artemis.profile

  6. Удалите каталог версии Artemis, с которой производится откат:

    rm -rf /opt/naumen/apache-artemis-2.41.0/