Кластеризация DirectumRX, пример Агропромбанка

8 0

Необходимо было построить отказоустойчивую систему для банка. О проекте внедрения можно прочитать в заявке на конкурс Directum Awards Самостоятельное внедрение DirectumRX в ЗАО "Агропромбанк". В статье приведен опыт от настройки до запуска и тестирования.

Общая схема фермы серверов

Сервера фермы делятся на 4 группы:

  1. Кластер балансировки нагрузки. Представляет собой 2 сервера: rx_arr1 и rx_arr2 с установленной Windows Server2019 Core;
  2. Ферма серверных компонентов Directum RX. Представляют собой 2 сервера: rx_app1 и rx_app2 с установленной Windows Server2019 Desktop Experience;
  3. Сервер (или кластер серверов) базы данных. Выбор и состав кластера БД находится за рамками описания этого решения;
  4. Кластер служб поддержки. В рамках этого кластера работают службы очереди сообщений RabbitMQ и NoSQL Database Redis. Эти два компонента можно запустить на разных кластерах, но для простоты описания запустим их в одном. Представляет из себя 2 сервера: rx_rmq1 и rx_rmq2 с установленной Linux. В качестве дистрибутива можно выбрать любой современный дистрибутив.

 Начнем разворачивать эту инфраструктуру.

Установка сервера базы данных

Различных вариантов обеспечения непрерывности работы для серверов баз достаточно много как для MSSQL, так и для PostgreSQL. Примеры можно найти в официальной документации к Diretum RX, например «Настройка отказоустойчивой архитектуры для PostgreSQL». Выбор и установка базы остается за вами, я же в дальнейшем буду считать, что база данных установлена и готова для установки Directum RX.

Настройка серверов кластера

Процесс настройки серверов rx_arr1 и rx_arr2 хорошо описан в официальной документации: «DirectumRX 3.2: Настройка фермы серверов и NLB-кластера».

Чтобы настроить балансировщик нагрузки нужно последовательно выполнить инструкции из глав:

- Установка Internet Information Services (IIS)

- Настройка фермы серверов

- Настройка NLB-кластера

Т.к. мы используем сервера Core, то все настройки удобнее выполнять при помощи инструментов RSAT - Remote Server Administration Tools.

Настройка серверов кластера поддержки

Подготовим сервера таким образом:

- Кластер RabbitMQ в режиме active-active

- Кластер Redis в режиме active-active

- Настроим keeplived для поддержки виртуальных IP адресов rx_rmq-vip1 для сервера rx_rmq1 и rx_rmq-vip2 для сервера rx_rmq2. Если один из серверов становится недоступен, то его виртуальный IP поднимается на другом сервере

Кластер RabbitMQ в режиме active-active

Установка

RabbitMQ написан на языке Erlang, поэтому для запуска самого RabbitMQ требуется среда выполнения Erlang. Для простоты установки и поддержки лучше всего использовать подготовленные пакеты для вашего дистрибутива с сайта самого RabbitMQ: https://www.rabbitmq.com/download.html

Устанавливаем Erlang и RabbitMQ на оба узла: rx_rmq1 и rx_rmq2. Команды установки зависят от дистрибутива, потому нет смысла их приводить.

После установки обеспечьте запуск RabbitMQ при старте системы и запустите его, например в дистрибутивах использующих systemd:

systemctl enable rabbitmq-server

systemctl start rabbitmq-server

Подготовка кластера

Оба сервера должны иметь одинаковые .erlang.cookie. Чтобы их синхронизировать, остановите RabbitMQ на втором сервере и скопируйте файл /var/lib/rabbitmq/.erlang.cookie с первого сервера на второй. После этого можно снова запустить RabbitMQ на втором сервере.

Включим управление, на обоих узлах выполним:

rabbitmq-plugins enable rabbitmq_management

На обоих узлах создадим пользователя с правами администратора:

rabbitmqctl add_user admin Пароль_для_админа

rabbitmqctl set_user_tags admin administrator

Пароль_для_админа замените на любой выбранный вами.

Создание кластера RabbitMQ

На втором узле останавливаем RabbitMQ и последовательно выполняем следующие команды:

rabbitmq-server -detached

rabbitmqctl stop_app

rabbitmqctl reset

rabbitmqctl join_cluster "rabbit@rx_rmq1"

rabbitmqctl start_app

После проверяем на обоих узлах статус кластера:

rabbitmqctl cluster_status

Если все в порядке, то заканчиваем на втором узле:

rabbitmqctl stop

systemctl start rabbitmq-server

Создание учетной записи для DirectumRX в RabbitMQ

Последним шагом будет создание учетной записи для DirectumRx. Для чего откройте в браузере ссылку: http://rx_rmq1:15672/ ; введите пользователя admin и пароль который вы выбрали на этапе подготовки.

Дальше создайте виртуальный хост и пользователя как это указано в «DirectumRX 3.2: Инструкция по установке», Раздел «Установка RabbitMQ», пункты с 6 по 13.

На этом подготовка кластера RabbitMQ закончена.

Кластер Redis в режиме active-active

Redis – очень гибкий инструмент, который позволяет создавать отказоустойчивые конфигурации и существуют отличные примеры как настраивать его для работы с DirectumRX, например:

https://habr.com/ru/company/directum/blog/469543/

Однако для двухузлового кластера это одновременно и слишком сложно и выходит за рамки рекомендуемого, т.к. вышеприведенный пример рассчитан минимум на 3 узла.

Поэтому мы воспользуемся альтернативными возможностями, а именно установим Redis-совместимую БД KeyDB в режиме «Active Replication».

Режим «Active Replication» предназначен разработчиками KeyDB как раз для нашего сценария использования: двухузловой кластер с обеими активными узлами.

Установка

Разработчиками KeyDB предоставляются пакеты установки только для Debian-based дистрибутивов, и если у вас такой, то проще всего следовать инструкции с сайта:

https://docs.keydb.dev/docs/ppa-deb/

Для всех остальных придется собрать KeyDB самостоятельно, что очень просто, к примеру для RHEL8 (Centos 8, Oracle Linux 8) порядок будет такой (делаем на обоих узлах):

- качаем последний стабильный релиз

wget https://download.keydb.dev/keydb-stable.tar.gz

- распаковываем архив

tar -xvf  ./keydb-stable.tar.gz

- устанавливаем необходимые программы и библиотеки:

dnf -y install gcc libxcrypt-devel isl libmpc binutils glibc-devel kernel-headers glibc-headers cpp gcc-c++ libstdc++-devel tcl libuuid-devel libcurl-devel

- компилируем

cd KeyDB/

make

make test

- устанавливаем

./install_server.sh

Настройка KeyDB

В результате установки в каталоге /etc/redis создается файл 6379.conf. Все настройки делаются редактированием этого файла. Делаем это сразу на обоих узлах

- Отключаем защищенный режим. Это связано с тем, что DirectumRX настраивается без аутентификации в Redis. Будем защищать наш KeyDB другими средствами, например фаерволом (что выходит за рамки статьи).

protected-mode no

- Включаем Active-Active репликацию:

active-replica yes

 

replicaof соседний_узел 6379

соседний_узел – заменить на IP или имя соседнего узла в кластере, для rx_rmq1 это rx_rmq2 и наоборот.

- Запускаем кластер сначала на одном, затем на другом узле:

systemctl start redis_6379

systemctl ут redis_6379

Следим что кластер запущен успешно по логам в файле /var/log/redis_6379.log

На этом установка Redis закончена.

Установка и настройка keepalived

На текущий момент готовые пакеты установки keepalived есть практически во всех дистрибутивах, поэтому устанавливаем его штатными средствами.

Настройка

Настройка keepalived производится редактированием файла /etc/keepalived/keepalived.conf

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

Прикреплен файл: keepalived.conf

 

Запуск и тестирование

Запускаем keepalived на обоих узлах, например:

systemctl enable keepalived

systemctl start keepalived

Проверяем работу keepalived, проверив что на узлах появились VIP адреса. Попробуем остановить keepalived на любом из узлов и проверяя что на нем VIP пропал, а на другом появился.

На этом конфигурирование keepalived и кластера поддержки в целом закончено.

Настройка серверов фермы

Подготовка

Для службы хранения файлов требуются 3 папки хранения: временная, исходных документов и папка хранения файлов. На обоих серверах, на отдельном томе, например на диске D:,

создаем три папки для этих целей. Для папки хранения файлов настраиваем репликацию файлов при помощи DFS.

Установка

Процесс настройки серверов rx_app1 и rx_app2 делаем так как описано в официальной документации: «DirectumRX 3.2: Настройка фермы серверов и NLB-кластера», выполнив инструкции из главы «Установка DirectumRX в отказоустойчивой архитектуре».

Выполнять инструкцию нужно только с одним уточнением: при указании подключения к RabbitMQ и к Redis нужно указывать адрес rx_rmq-vip1 при установке на rx_app1, и соответственно, нужно указывать адрес rx_rmq-vip2 при установке на rx_app2

Пока комментариев нет.

Авторизуйтесь, чтобы написать комментарий