Балансировка нагрузки PAS for OpenEdge на основе Tomcat Load Balancing
Балансировка нагрузки (load balancing) позволяет управлять входящим трафиком путём контроля и распределения клиентских запросов между несколькими сетевыми устройствами с целью оптимизации использования ресурсов и сокращения времени обслуживания.
В классическом сервере приложений OpenEdge AppServer для реализации балансировки нагрузки применяется продукт Progress Name Server Load Balancer.
Для сервера приложений Progress Application Server for OpenEdge (PAS for OpenEdge) балансировка нагрузки реализуется с помощью стандартных опций HTTP с использованием одной из сторонних технологий, таких как Apache HTTP, Apache Tomcat или Amazon Elastic Load Balancing.
В этой статье я расскажу о том, как реализовать балансировку нагрузки используя сервер Apache Tomcat (Apache Tomcat Load Balancing).
Статья не претендует на полноту описания затронутой темы, а только имеет целью дать отправную точку и продемонстрировать первичную настройку Apache Tomcat Load Balancing для распределения нагрузки между экземплярами PAS for OpenEdge.
За любой дополнительной информацией по работе и настройке Apache Tomcat Load Balancing обращайтесь к ресурсам сети Интернет, в частности к официальным сайтам https://httpd.apache.org/ и http://tomcat.apache.org/.
Балансировка нагрузки Apache Tomcat
Сервер Apache Tomcat встроен в PAS for OpenEdge. Поэтому для реализации балансировки нагрузки с использованием сервера Apache Tomcat необходимо назначить экземпляр PAS for OpenEdge, который будет использоваться только для перенаправления клиентских запросов от внешнего Веб-сервера Apache на рабочие экземпляры PAS (worker instances), которые и будут их обрабатывать.
Кроме того, если необходимо отслеживать состояние рабочих экземпляров, то можно добавить ещё один экземпляр в схему балансировки нагрузки и назначить его в качестве так называемого сборщика метрик (metrics gatherer). Роль сборщика метрик подразумевает только контроль и информирование о статусе рабочих экземпляров. Но даже если сборщик метрик не будет настроен, то балансировщик нагрузки самостоятельно определит, когда рабочий экземпляр перестанет отвечать на запросы и прекратит отправлять их на него.
На следующем рисунке показана конфигурация балансировки нагрузки, которую мы реализуем в рамках этой статьи (щёлкните на картинке для увеличения).
В реальной производственной среде, как правило, веб-сервер Apache HTTP – это публичный сервер доступный из сети Интернет. Поэтому с точки зрения безопасности сервер Apache HTTP необходимо разместить в демилитаризованной зоне (DMZ).
В качестве серверов, содержащих каждый элемент конфигурации, мы будем использовать пять виртуальных машин с предварительно установленной с нуля операционной системой CentOS 7.
На серверах с экземплярами PAS for OpenEdge установлены лицензии:
- Progress OpenEdge Advanced Enterprise RDBMS
- Progress Production Application Server for OpenEdge
На сервере базы данных установлены лицензии:
- Progress OpenEdge Advanced Enterprise RDBMS
- Progress 4GL Development System
Некоторые преимущества Apache Tomcat Load Balancing в сравнении с реализацией балансировки нагрузки на базе Apache proxy host load balancing:
- экземпляр PAS for OpenEdge, который будет выполнять балансировку нагрузки (на рисунке представлен как lb) «знает» о текущем статусе каждого экземпляра в его группе и не будет направлять запросы к недееспособному экземпляру;
- Tomcat Load Balancing позволяет настроить экземпляр PAS for OpenEdge в качестве монитора онлайн статистики для каждого рабочего экземпляра в группе балансировки нагрузки (на рисунке представлен как status).
Процесс настройки балансировки нагрузки на основе Tomcat состоит из следующих задач:
- Создание рабочих экземпляров PAS for OpenEdge на разных серверах.
- Инсталляция или обновление существующего сервера Apache HTTP.
- Настройка сервера Apache HTTP.
- Создание экземпляра PAS for OpenEdge и его назначение в качестве балансировщика нагрузки (lb).
- Необязательное создание экземпляра PAS for OpenEdge и его назначение в качестве собирателя метрик (status).
- Создание и развёртывание файла worker.properties.
Создание и настройка рабочих экземпляров
В качестве рабочих экземпляров, между которыми будет выполняться балансировка нагрузки, создадим два экземпляра PAS for OpenEdge, каждый из которых будет работать на собственной виртуальной машине. Для удобства идентификации назовём эти экземпляры и, соответственно, их виртуальные машины node1 и node2.
В этой статье предполагается, что на виртуальных машинах рабочих экземпляров уже выполнена инсталляция OpenEdge версии 11.6.3 с соответствующим набором лицензий (см. предыдущий раздел). По вопросам инсталляции OpenEdge обратитесь к документации по OpenEdge, книга «OpenEdge Getting Started: Installation and Configuration».
Подготовка виртуальных машин
В нашем примере виртуальные машины для рабочих экземпляров имеют следующие IP-адреса: 172.16.95.148 и 172.16.95.149. По умолчанию у обоих машин имя хоста localhost. Необходимо изменить имя хоста localhost этих виртуальных машин на имена node1 и node2 соответственно.
С появлением CentOS 7 изменился синтаксис многих команд этой операционной системы, в том числе и для изменения имени хоста. Для изменения имени хоста в CentOS 7 воспользуйтесь следующей командой (под пользователем root):
hostnamectl set-hostname New_HostName
Установим новые имена хостов для наших виртуальных машин.
172.16.95.148:
hostnamectl set-hostname node1
172.16.95.149:
hostnamectl set-hostname node2
Чтобы все изменения вступили в силу, необходимо перезапустить сервис systemd-hostnamed:
systemctl restart systemd-hostnamed
Проверим имя хоста:
hostnamectl status
Вы увидите примерно следующее:
Static hostname: node2 Icon name: computer-vm Chassis: vm Machine ID: a5003f6992044150941f05577bde3054 Boot ID: cc43313da082435e82a02c4046096d76 Virtualization: vmware Operating System: CentOS Linux 7 (Core) CPE OS Name: cpe:/o:centos:centos:7 Kernel: Linux 3.10.0-514.6.1.el7.x86_64 Architecture: x86-64
С этого момента виртуальные машины рабочих экземпляров мы будем называть node1 и node2.
Создание и настройка рабочих экземпляров
Рабочий экземпляр PAS for OpenEdge может находится в любом каталоге на сервере. Для нашего удобства мы создадим их в каталоге WRKDIR, которым обычно является каталог /usr/wrk.
Создание экземпляра node1:
- Подключимся к виртуальной машине node1 под пользователем root.
- Выполним команду proenv:
[root@node1 ~]# proenv
- Создадим рабочий экземпляр PAS for OpenEdge с именем node1:
proenv>$DLC/servers/pasoe/bin/tcman.sh create -p 8820 -P 8821 -s 8822 $WRKDIR/node1
Команда должна быть набрана в одной строке.
Здесь:-p 8820 – номер порта http;
-P 8821 – номер порта https;
-s 8822 – номер shutdown-порта;
$WRKDIR/node1 – путь и название каталога экземпляра. - Активируем AJP Apache JServ Protocol (AJP) — это бинарный протокол, обеспечивающий передачу входящих запросов с веб-сервера до сервера приложений. Как правило, используется в системах с балансировкой нагрузки. Также он поддерживает наблюдение за состоянием сервера, в том числе позволяет проводить ping сервера приложений. По умолчанию в PAS for OpenEdge этот протокол отключён, поэтому необходимо его включить.
- Перейдём в каталог bin экземпляра node1:
cd $WRKDIR/node1/bin
- Проверим статус протокола AJP:
tcman.sh feature AJP13 AJP13=off
- Активируем протокол:
tcman.sh feature AJP13=on
- Опять проверим статус:
tcman.sh feature AJP13 AJP13=on
- Перейдём в каталог bin экземпляра node1:
- Далее установим номер порта AJP По умолчанию этот номер равен 8009. В том случае, если на одном сервере предполагается работа нескольких экземпляров PAS for OpenEdge, рекомендуется для каждого экземпляра установить уникальный номер порта AJP.
- Для экземпляра node1 установим номер порта 50001 следующей командой:
tcman.sh config psc.as.ajp13.port=50001
- Проверим, что порт установился правильно:
tcman.sh config psc.as.ajp13.port psc.as.ajp13.port=50001
- Откроем порт 50001 в firewall:
firewall-cmd --permanent --add-port=50001/tcp
- Для экземпляра node1 установим номер порта 50001 следующей командой:
- Для доступа к веб-приложениям, размещённым на PAS for OpenEdge, необходимо открыть один из портов HTTP или HTTPS, в зависимости от требований к безопасности приложения. Для экземпляра node1 в качестве порта HTTP мы указали номер 8820, откроем этот порт:
firewall-cmd --permanent --add-port=8820/tcp
- Перезагрузим firewall для применения изменений:
firewall-cmd --reload
В PAS for OpenEdge клиентский доступ к развёрнутым приложениям осуществляется через специальные протоколы: APSV, REST, WEB и SOAP.
По умолчанию в промышленной версии PAS for OpenEdge для безопасности отключены все коммуникационные протоколы (APSV, REST, WEB, SOAP). В то время как в версии PAS for OpenEdge, предназначенной для разработки, эти протоколы по умолчанию активированы.
В этой статье для демонстрации работы балансировки нагрузки мы будем использовать протокол APSV, предназначенный для взаимодействия с сервером приложений из языка ABL (4GL). Соответственно необходимо активировать этот протокол. Для активации протокола используется свойство adapterEnable со значением 1 в файле конфигурации экземпляра conf/openedge.properties. Активировать протокол можно путём редактирования файла конфигурации вручную или с помощью скрипта oeprop.
Для активации протокола APSV в рабочем экземпляре node1, находясь в каталоге bin, выполним следующую команду:
oeprop.sh node1.ROOT.APSV.adapterEnabled=1
Проверить статус порта можно этой же командой без операции присваивания.
Выполним старт рабочего экземпляра node1:
tcman.sh start
На этом этапе выполненных настроек достаточно.
Создание экземпляра node2
Для создания рабочего экземпляра node2 необходимо выполнить такие же действия, как при создании экземпляра node1. Поскольку node2 у нас размещается на отдельной виртуальной машине, то порты для этого экземпляра оставляем как у node1. Отличаться будет только имя экземпляра.
- Подключимся к виртуальной машине node2 под пользователем root.
- Выполним команду proenv.
- Создадим рабочий экземпляр PAS for OpenEdge с именем node2:
proenv>$DLC/servers/pasoe/bin/tcman.sh create -p 8820 -P 8821 -s 8822 $WRKDIR/node2
- Активируем AJP13 и присвоим порт; откроем порты AJP13 и HTTP:
cd $WRKDIR/node2/bin tcman.sh feature AJP13=on tcman.sh config psc.as.ajp13.port=50001 firewall-cmd --permanent --add-port=50001/tcp firewall-cmd --permanent --add-port=8820/tcp firewall-cmd --reload
- Активируем протокол APSV:
oeprop.sh node2.ROOT.APSV.adapterEnabled=1
- Выполним старт рабочего экземпляра node2:
tcman.sh start
Продолжение на следующей странице…
Есть вопрос? Спросите...
Для отправки комментария вам необходимо авторизоваться.
1 Комментарий
Валерий, спасибо.
Очень интересно и полезно.