Аннотация

Инструкция описывает назначение скриптов автоматической установки оркестратора и других серверных компонент Платформы Робин в редакции standalone, а также действия системного администратора по их настройке и запуску.

Назначение

Скрипты:

  • выполняют установку и конфигурирование следующего серверного ПО:
    • PostgreSQL 10+ - система управления базами данных,
    • ELK-сервис (Elasticsearch, Logstash и Kibana) – сервис, предназначенный для сбора и хранения логов от прикладных сервисов Платформы Робин, а также для выполнения клиентских запросов с целью построения отчетов.
    • FreeIPA - интегрированное решение по идентификации и аутентификации пользователей, задания политик доступа и аудита для сетей на базе Linux и Unix,
    • Sonatype Nexus – интегрированная платформа, с помощью которой разработчики могут проксировать, хранить и управлять зависимостями Java (Maven), образами Docker, Python, Ruby, NPM, Bower, RPM-пакетами, gitlfs, Apt, Go, Nuget, а также распространять свое программное обеспечение,
    • Rabbit MQ – программный брокер сообщений на основе стандарта AMQP, обеспечивает асинхронную передачу сообщений между прикладными службами Робин Платформы.
    • WildFly (JBoss Application Server) – сервер приложений Java EE,
  • выгружают серверные компоненты ( j2ee-приложения) RMS на сервер WildFly :
    • rms2.war
    • rpm.war
  • загружают схему базы данных RMS,
  • загружают схему базы FreeIPA.

Состав и описание функциональных возможностей ROBIN Platform 2.0

Платформа Робин 2.0 представляет собой комплекс программных средств, предназначенных для решения задач в области роботизации бизнес-процессов, а именно:

  • осуществлять разработку новых программных роботов и действий,
  • выполнять сценарии программных роботов.

В состав Платформы Робин входят следующие программные компоненты:

  • на стороне клиента:
    • ROBIN Management Console (RMC) – клиентское приложение, предоставляющее пользователю графический интерфейс для централизованного управления запусками роботов на удаленных хостах,
    • ROBIN Studio – клиентское приложение, предоставляющее пользователю графический интерфейс для разработки программных роботов,
    • ROBIN Player – клиентское приложение, предоставляющее пользователю графический интерфейс для управления запусками программных роботов на исполнение сценария,
    • ROBIN Executor – прикладной сервис, расположенный на стороне клиента (ROBIN Studio или ROBIN Player), система исполнения сценариев программных роботов,
    • ROBIN Agent – прикладной сервис, расположенный на стороне клиента (ROBIN Studio или ROBIN Player), выполняет функцию проксирования клиентских запросов другим прикладным сервисам RMS или RMC через очереди программного брокера сообщений,
  • на стороне серверной части приложений:
    • ROBIN Management Server (RMS) – централизованная служба, выступающая в роли оркестратора, выполняет функцию делегирования клиентских и сервисных запросов прикладным сервисам Робин Платформы,
    • База данных RMS - система хранения мета-информации о роботах и пользователях с использованием СУБД PostgreSQL 10+,
    • Хранилище роботов — файловое хранилище (на базе Sonatype Nexus), предназначенное для хранения артефактов роботов и действий:
      • пакеты с исходниками роботов,
      • пакеты с исполняемым кодом и документацией роботов,
      • зависимости (библиотеки), необходимые для выполнения исполняемого кода программных роботов
    • Сервер идентификации пользователей - корпоративное хранилище сведений о пользователях/компаниях, роботах, действиях и правах доступа пользователей/компаний к роботам и действиям на базе FreeIPA-сервера.
    • Robin RDP-Manager – сервис, предназначенный для открытия/закрытия RDP-сессии на удаленном хосте для запуска локальных прикладных служб клиентских приложений,
    • Robin Package Manager – сервис, выполняет функцию проксирования клиентских и сервисных запросов к хранилищу роботов,

Функциональная архитектура Робин Платформы.

Работу серверных и клиентских компонент ROBIN Platform обеспечивают следующие инфраструктурные сервисы (сервера приложений):

  • WildFly (JBoss Application Server) – сервер приложений Java EE,
  • PostgreSQL 10+ - система управления базами данных,
  • FreeIPA - интегрированное решение по идентификации и аутентификации пользователей, задания политик доступа и аудита для сетей на базе Linux и Unix,
  • Sonatype Nexus – интегрированная платформа, с помощью которой разработчики могут проксировать, хранить и управлять зависимостями Java (Maven), образами Docker, Python, Ruby, NPM, Bower, RPM-пакетами, gitlfs, Apt, Go, Nuget, а также распространять свое программное обеспечение,
  • Rabbit MQ – программный брокер сообщений на основе стандарта AMQP, обеспечивает асинхронную передачу сообщений между прикладными службами Робин Платформы.
  • HAProxy - серверное программное обеспечение для обеспечения высокой доступности и балансировки нагрузки для TCP и HTTP-приложений, посредством распределения входящих запросов на несколько обслуживающих серверов,
  • ELK-сервис (Elasticsearch, Logstash и Kibana) – сервис, предназначенный для сбора и хранения логов от прикладных сервисов Платформы Робин, а также для выполнения клиентских запросов с целью построения отчетов.

Хребет функциональной архитектуры Платформы Робин реализован через 2 архитектурных шаблона проектирования - шаблон хореографии и шаблон оркестрации.

В рамках шаблона хореографии взаимодействуют следующие компоненты Платформы Робин:

  • Robin-агенты,
  • RMC - консоль управления роботами,
  • RMS - сервер управления.

Поддержку транспорта сообщений и механизма очередей сообщений между компонентами выполняет RabbitMQ по протоколу AMPQ.

Шаблон оркестрации реализован между клиентскими приложениями и серверными компонентами через Robin Management Server (RMS) – централизованную службу, которая выполняет функцию делегирования клиентских и сервисных запросов прикладным сервисам Робин Платформы по протоколу HTTPS. RMS обрабатывает запросы от:

  • RMC
  • Robin Studio
  • Robin Player

Сам RMS состоит из следующих J2EE-приложений:

  • rms2.war - выполняет аутентификацию клиентов, открывает и закрывает RDP-сессии на агентских машинах,
  • rpm.war - сохраняет пакеты роботов и их исходники в хранилище роботов, добавляет записи о них в каталог FreeIPA.

Состав и назначение скриптов

Архитектура

Для автоматической установки RMS используется Ansible. Ansible — система управления конфигурациями, написанная на языке программирования Python, с использованием декларативного языка разметки для описания конфигураций. Используется для автоматизации настройки и развертывания программного обеспечения.

Скрипты представляют собой набор конфигурационных файлов и плейбуков для системы Ansible. В конфигурационных файлах (*.cfg, *.ini, group_vars/*, templates/*) задаются параметры настроек скриптов. Сами скрипты представляют собой набор плейбуков (сценариев) для функциональных модулей Ansible. Каждый плейбук содержит одно или несколько заданий для решения одной или нескольких взаимосвязанных задач по установке и настройке ресурса. Задание имеет имя задания, имя Ansible-модуля, который должен исполнять задание, параметры задания. Параметры задания задают в том числе и целевое состояние настраиваемого ресурса.

Конфигурационные файлы (параметры настройки сервисов)

Таблица 1. Конфигурационные файлы плейбуков.

Имя файла Назначение Размещение
ansible.cfg Задает локальные настройки Ansible ./ - корневой каталог скриптов
hosts.ini Задает целевые хосты, на которых будут устанавливаться приложения. Хосты могут быть объединены в группы. ./ - корневой каталог скриптов
all.yaml Задает параметры (пароли и ip) доступа к БД пользователей и служб Робин. ./group_vars/
app.yaml Задает параметры WildFly (версии, пароль, ip, пути к исполняемым файлам) ./group_vars/
db.yaml Задает версию FlyWay ./group_vars/
ldap.yaml Задает локальный домен FreeIPA ./group_vars/
pkg.yaml Задает версию Nexus ./group_vars/
rabbit.yaml Задает пароли доступа к системе сообщений Rabbit ./group_vars/
elastic search-single.yml.j2 Jinja-шаблон для elastic.yaml (установка Elasticsearch без кластера) ./templates/
elasticsearch.yml.j2 Jinja-шаблон для elastic.yaml (установка Elasticsearch в кластере) ./templates/
kibana.yml.j2 Jinja-шаблон для kibana.yml ./templates/
logstash.conf.j2 Jinja-шаблон для logstash.yaml ./templates/
nexus.service Jinja-шаблон для nexus.yaml (команды запуска Nexus-сервиса) ./templates/
orc hestrator-client.cer Сертификат безопасности оркестратора с открытым ключом для шифрования данных при обращении клиента к серверу ./templates/
orc hestrator-client.jks Java-хранилище с закрытым ключом оркестратора используется для расшифровки данных, отправленных клиентом. ./templates/
rms2-infinispan.xml Jinja-шаблон с настроечными параметрами распределенного кэша infinispan сервиса rms2 ./templates/
rms2.properties Jinja-шаблон с настроечными параметрами сервиса rms2 ./templates/
rpm-infinispan.xml Jinja-шаблон с настроечными параметрами распределенного кэша infinispan сервиса rpm для wf-standalone.yaml и wildfly.yaml ./templates/
rpm.properties Jinja-шаблон с настроечными параметрами сервиса rpm для wf-standalone.yaml и wildfly.yaml ./templates/

Конфигурационные скрипты (плейбуки)

db.yaml

Скрипт db.yaml:

  • выполняет установку пользовательского репозитория пакетов rpm для ОС RedHat 7,
  • выполняет установку пакетов для СУБД PostgreSQL 11:
    • python-psycopg2
    • postgresql11
    • postgresql11-server
    • postgresql11-contrib
  • инициализирует базу данных,
  • устанавливает сервис postgresql-11 в автозапуск
  • устанавливает пароль для пользователя postgres,
  • задает сетевые настройки для клиентов СУБД PostgreSQL,
  • создает пользователя user_robin, его пароль и права,
  • создает БД robin_2,
  • создает пользователей user_orch, user_quartz, user_rpm, их пароли и роли,
  • выполняет команды запуска сервиса или перезапуска,
  • выполняет проверку работоспособности сервиса с помощью пользовательских SQL-запросов,
  • создает схему базы данных robin_2:
    • выполняет распаковку архива flyway-commandline-{{ flyway_ver }}-linux-x64.tar.gz
    • устанавливает flyway,
    • распаковывает архив с sql-скриптами для flyway,
    • запускает задание на исполнение скриптов для создания схемы базы данных robin_2.

elastic.yaml

Скрипт elastic.yaml:

  • выполняет установку пользовательского репозитория пакетов ELK для ОС RedHat 7,
  • устанавливает пакеты:
    • java-1.8.0-openjdk
    • elasticsearch
    • jq
  • устанавливает настройки JVM (jvm.options)
  • устанавливает лимит виртуальной памяти (vm.max_map_count)
  • подгружает один из Jinja-шаблонов - elasticsearch-single.yml.j2 или elasticsearch.yml.j2 в зависимости от параметра elastic_cluster
  • устанавливает сервис elastic в автозапуск

freeipa.yaml

Скрипт freeipa.yaml:

  • задает имя хоста ldap1 для FreeIPA
  • отключает ipv6
  • устанавливает пакеты:
    • ipa-server
    • ipa-server-trust-ad
    • ipa-server-dns
    • bind
    • bind-dyndb-ldap
  • создает директорию /opt/ldif
  • извлекает в нее схемы для сервера идентификации из архива ldif.zip
  • импортирует схемы в БД FreeIPA
  • устанавливает парольную политику для пользователей FreeIPA.

kibana.yaml

Скрипт kibana.yaml:

  • выполняет установку пользовательского репозитория пакетов ELK для ОС RedHat 7,
  • устанавливает пакеты:
    • kibana
    • jq
  • создает системного пользователя kibana без домашней директории
  • создает директорию /opt/kibana
  • создает директорию /var/run/kibana для логов
  • копирует настройки из Jinja-шаблона kibana.yml.j2 в /etc/kibana/kibana.yml
  • устанавливает сервис kibana в автозапуск

logstash.yaml

Скрипт logstash.yaml:

  • выполняет установку пользовательского репозитория пакетов ELK для ОС RedHat 7,
  • устанавливает пакет logstash,
  • копирует настройки из Jinja-шаблона logstash.yml.j2 в /etc/logstash/conf.d/base.conf
  • устанавливает сервис logstash в автозапуск

nexus.yaml

Скрипт nexus.yaml:

  • создает системного пользователя nexus,
  • выполняет распаковку архива nexus-{{ nexus_ver }}-unix.tar.gz
  • меняет имя директории, а которую был распакован архив
  • проверяет существование директории /opt/sonatype-work
  • рекурсивно меняет собственника директории /opt/nexus и всех ее поддиректорий
  • рекурсивно меняет собственника директории /opt/sonatype-workи всех ее поддиректорий
  • модифицирует файл nexus.rc для запуска сервиса от имени пользователя nexus
  • копирует Jinja-шаблон nexus.service в директорию /etc/systemd/system и меняет собственника на root
  • устанавливает сервис nexus в автозапуск

rabbit.yaml

Скрипт rabbit.yaml:

  • выполняет установку пользовательских репозиториев rabbitmq_erlang и rabbitmq_server для ОС RedHat 7,
  • устанавливает пакеты:
    • python-requests
    • erlang
    • rabbitmq-server
  • создает директорию /etc/systemd/system/rabbitmq-server.service.d
  • создает конфигурационный файл /etc/systemd/system/rabbitmq-server.service.d/limits.conf, в котором задает параметр LimitNOFILE
  • устанавливает сервис rabbitmq-server.service в автозапуск
  • подключает плагины rabbitmq_management,rabbitmq_event_exchange
  • создает пользователя admin, задает для него пароль и дает полные права на конфигурирование, чтение и запись на хосте /,
  • создает пользователей agent, rmc, rms, rdp, задает для них пароли и дает полные права на конфигурирование, чтение и запись на хосте /,
  • создает файл .erlang.cookie в /var/lib/rabbitmq,
  • перезапускает сервис rabbitmq-server.service,
  • задает параметры политики для rabbitmq,
  • задает обменники и их типы для управления очередями:
    • agents.exchange - тип direct,
    • rdp.exchange - тип fanout,
    • rmc.exchange - тип topic
  • создает очереди:
    • mirror.agents.queue
    • mirror.rdp.queue
    • mirror.events.queue
  • задает правила маршрутизации сообщений для обменников.

wf-standalone.yaml

Скрипт wf-standalone.yaml:

  • устанавливает пакеты:

    • java-1.8.0-openjdk
    • unzip
  • создает системного пользователя wildfly без домашней директории и без входа в систему

  • устанавливает переменную окружения wildfly_home для домашней директории /opt/wildfly

  • устанавливает значения параметров системы:

    • net.core.rmem_max - максимальный размер буфера получения данных через сокетные соединения в байтах
    • net.core.wmem_max - максимальный размер буфера отправки данных сокетные соединения в байтах
  • распаковывает архив wildfly-{{ wf_version }}.Final.tar.gz в директорию /opt,

  • создает директорию /opt/wildfly-{{ wf_version }}.Final, если не создана, и устанавливает ее собственника owner:wildfly и group:wildfly,

  • создает символьную ссылку /opt/wildfly на директорию /opt/wildfly-{{ wf_version }}.Final,

  • создает директории:

    • /opt/wildfly/modules
    • /opt/wildfly/certificate/server
    • /opt/wildfly/certificate/client

    и устанавливает права доступа к ним,

  • устанавливает postgresql драйвер для java-приложений оркестратора в директорию /opt/wildfly/modules/rms2/main,

  • копирует содержимое ресурсных файлов rms2.properties и rpm.properties в файл /opt/wildfly/modules/rms2/main/properties

  • копирует настройки infinispan из rms2-infinispan.xml и rpm-infinispan.xml в файл /opt/wildfly/modules/rms2/main/properties

  • копирует j2ee-приложения rms2.war и rpm.war в /opt

  • копирует сертификат безопасности оркестратора orchestrator-client.cer в директорию /opt/wildfly/certificate/client/

  • копирует хранилище с закрытым ключом оркестратора orchestrator-client.jks в директорию /opt/wildfly/certificate/server/

  • модифицирует mgmt-groups.properties и mgmt-users.properties

  • устанавливает значения параметров в файле /opt/wildfly/standalone/configuration/standalone.xml:

    • jboss.bind.address.management
    • jboss.bind.address
    • jboss.socket.binding.port-offset
  • устанавливает настройки для логирования сервера в файле /opt/wildfly/standalone/configuration/standalone.xml,

  • рекурсивно меняет собственника директории /opt/wildfly и всех ее поддиректорий на owner:wildfly и group:wildfly

  • создает директорию /etc/wildfly и устанавливает собственника owner:wildfly и group:wildfly

  • создает wildfly.conf в /etc/wildfly и добавляет в него настройки

  • копирует скрипт запуска сервера launch.sh в директорию /opt/wildfly/bin

  • копирует wildfly.service в /usr/lib/systemd/system

  • задает параметры запуска сервера JAVA_OPTS для JVM

  • создает файл /var/run/wildfly и устанавливает собственника owner:wildfly и group:wildfly

  • устанавливает сервис wildfly.service в автозапуск

  • перезапускает сервис wildfly.service

  • выполняет команды:

    • по настройке базы данных (драйвера и источники данных
    • указывает URL доступа к сертификатам
    • выполняет настройку слушателей подключений по протоколам HTTP/HTTPS
    • задает имя JNDI-источника данных PackageManagerDS2 для таймера
    • разворачивает на сервере j2ee-приложения:
      • rms2.war
      • rpm.war

Порядок работы со скриптами

Инициализация параметров

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

Инициализация параметров конфигурационных файлов

hosts.ini

В этом файле необходимо задать ip-адреса серверов, на которые устанавливаются инфраструктурные сервисы (сервера приложений):

[ldap]
ldap1 ansible_host=192.168.1.147

[rabbit]
rbt1 ansible_host=192.168.1.147

[app]
wf1 ansible_host=192.168.1.147

[elastic]
elastic1 ansible_host=192.168.1.147

[kibana]
kibana1 ansible_host=192.168.1.147

[logstash]
logstash1 ansible_host=192.168.1.147

[db]
db1 ansible_host=192.168.1.147

[pkg]
pkg1 ansible_host=192.168.1.147

Поскольку данная инструкция описывает процесс установки оркестратора в режиме standalone, то все сервисы устанавливаются на одном хосте.

all.yaml

В этом файле необходимо задать только:

  • ip-адрес сервера базы данных RMS,
  • пароли доступа к БД пользователей и служб Робин
  • флаг, указывающий на то, создавать или не создавать кластер для Elastic:
---
#DB
db_postgres_pass: Qwerty123
db_robin_pass: Qwerty123
db_users_pass: Qwerty123
db_ip: 192.168.1.147
flyway_ver: 7.8.1

# Elasticsearch
elastic_cluster: false

app.yaml

В этом файле необходимо задать только:

  • версию схемы
  • и пароль админа WildFly
---
wf_version: 23.0.2
schema_version: 16.0
wf_admin_pass: Qwerty123

ldap.yaml

В этом файле необходимо задать значения локального домена сервера FreeIPA, корневого DN, пароли администратора и менеджера каталогов:

---
domain: robin.demo
root_dn: dc=robin,dc=demo
admin_pass: Qwerty123
dm_pass: Qwerty123

rabbit.yaml

В этом файле необходимо задать пароли администратора, Robin Agent, RMC, RMS, RDP, а также значение erlang_cookie (секрет для аутентификации между нодами RabbitMQ):

---
rabbit_admin_pass: Qwerty123
erlang_cookie: 7KzILFz03fmS

rabbit_agent_pass: Qwerty123
rabbit_rmc_pass: Qwerty123
rabbit_rms_pass: Qwerty123
rabbit_rdp_pass: Qwerty123

Инициализация параметров Jinja-шаблонов

elasticsearch-single.yml.j2

В этом файле необходимо задать:

  • cluster.name - имя кластера,
  • node.name - имя узла elasticsearch сервера,
  • discovery.type - мода обнаружения узлов elasticsearch сервера,
  • network.host - сетевой адрес elasticsearch сервера,
  • path.data - директория, где лежат библиотеки elasticsearch сервера,
  • path.logs - директория, где лежат логи elasticsearch сервера

kibana.yml.j2

В этом файле необходимо задать:

  • server.host - сетевой адрес kibanaсервера,
  • path.data - директория, где лежат данные kibana сервера

logstash.conf.j2

В этом файле необходимо задать:

  • input - описание источников сообщений,
  • filter - правила обработки сообщений,
  • output - правила формирования индексов сообщений.

Как составлять правила описано в оригинальной документации на logstash - https://www.elastic.co/guide/en/logstash/current/configuration.html

Запуск и результат выполнение скриптов

Для выполнения установки серверных компонент оркестратора RMS нужно выполнить скрипт orcherstrator.sh , который последовательно запустит все плейбуки:

ansible-playbook db.yaml
ansible-playbook elastic.yaml
ansible-playbook freeipa.yaml
ansible-playbook kibana.yaml
ansible-playbook logstash.yaml
ansible-playbook nexus.yaml
ansible-playbook rabbit.yaml
ansible-playbook wf-standalone.yaml

После выполнения скрипта на целевом сервере будут установлены и запущены следующие сервисы:

  • postgresql-11
  • elastic
  • freeipa
  • kibana
  • logstash
  • nexus.service
  • rabbitmq-server.service
  • wildfly.service

Пользователю через клиентские приложения Робин Платформы (Robin Player, Robin Studio, Robin Management Console) будут доступны приложения оркестратора:

  • rms2.war
  • rpm.war

Ссылки

  1. http://robingit.itbs.it.ru/devops/ansible-deploy - скрипты
  2. https://docs.ansible.com/ansible/latest/index.html - Документация по Ansible