Распределенная установка программного комплекса

Основные принципы распределенной установки

В Termidesk предусмотрена распределенная установка компонентов на отдельные серверы или ВМ.

Установка компонентов Termidesk выполняется в среде функционирования ОС Astra Linux Special Edition 1.7.

В распределенном варианте устанавливаются компоненты:

  • «Универсальный диспетчер» (служба termidesk-vdi);
  • «Шлюз» (служба termidesk-gateway);
  • «Менеджер рабочих мест» (службы termidesk-taskman, termidesk-celery-beat, termidesk-celery-worker).

Перечень условий для распределенной установки:

  • RabbitMQ-server устанавливается на одном узле с СУБД (в общем случае этот компонент может устанавливаться на отдельный узел, но в рамках настоящей процедуры данный вариант не рассматривается);

Если будет использоваться внешняя СУБД, нужно установить компонент RabbitMQ-server на узел менеджера рабочих мест Termidesk или на отдельный узел.

  • на всех узлах, предназначенных для установки компонентов, настроены статические IP-адреса;
  • на всех узлах настроена синхронизация времени от единого источника.

Упрощенная общая схема при распределенной установке Termidesk приведена на рисунке.

Схема распределенной установки

Перечень обозначенных на схеме компонентов приведен в таблице.

Перечень компонентов

КомпонентFQDNПодпись на схеме
«Универсальный диспетчер» №1 disp1.termidesk.local Универсальный диспетчер 1
«Универсальный диспетчер» №2 disp2.termidesk.local Универсальный диспетчер 2
«Шлюз» №1 gw1.termidesk.local Шлюз 1
«Шлюз» №2 gw2.termidesk.local Шлюз 2
«Менеджер рабочих мест»  (master) tsk1.termidesk.local Менеджер рабочих мест 1
«Менеджер рабочих мест»  (slave) tsk2.termidesk.local Менеджер рабочих мест 2
Балансировщик нагрузки (nginx) nginx.termidesk.local Балансировщик
База данных db.termidesk.local Сервер PostgreSQL

Распределенная установка проводится в следующей последовательности:

1) устанавливается узел с компонентами СУБД и RabbitMQ-server (обе службы на одном узле);

2) устанавливается первый (эталонный) узел с «Универсальным диспетчером». При установке необходимо выбрать роль «Портал администратора» и «Портал пользователя» в диалоговом окне псевдографического интерфейса инсталлятора;

Настройки первого узла с «Универсальным диспетчером» Termidesk будут использоваться как эталонные для узлов других «Универсальных диспетчеров» и «Менеджеров рабочих мест».

Параметры конфигурации Termidesk находятся в файле /etc/opt/termidesk-vdi/termidesk.conf.

Нужно скопировать каталог /etc/opt/termidesk-vdi вместе с его содержимым на узлы других «Универсальных диспетчеров» и «Менеджеров рабочих мест».

3) устанавливаются остальные «Универсальные диспетчеры» с копированием файлов, указанных в п.2, с эталонного узла;

4) устанавливаются «Шлюзы», каталог /etc/termidesk/ копируется с первого узла «Шлюза» на другие узлы с этим компонентом;

5) устанавливаются «Менеджеры рабочих мест» с копированием файлов, указанных в п.2, с эталонного узла.

Одновременно служба «Менеджера рабочих мест» termidesk-taskman должна быть запущена только на одном из узлов!

Заключительным этапом устанавливаются и настраиваются балансировщики нагрузки на базе ОС Astra Linux Special Edition 1.7 и nginx.

Установка и настройка СУБД Postgres-11

Процесс установки СУБД Postgres-11 и брокера сообщений RabbitMQ-server не отличается от процесса, описанного в разделе Подготовка среды функционирования.

Для завершения настройки нужно:

  • отредактировать файл rabbitmq-env.conf, приведя его к виду:
# Defaults to rabbit. This can be useful if you want to run more than one node
# per machine - RABBITMQ_NODENAME should be unique per erlang-node-and-machine
# combination. See the clustering on a single machine guide for details:
# http://www.rabbitmq.com/clustering.html#single-machine
#NODENAME=rabbit

# By default RabbitMQ will bind to all interfaces, on IPv4 and IPv6 if
# available. Set this if you only want to bind to one network interface or#
# address family.
NODE_IP_ADDRESS=0.0.0.0
# Defaults to 5672.
NODE_PORT=5672
BASH
  • сохранить файл и перезапустить службу rabbitmq-server:
sudo systemctl restart rabbitmq-server
BASH

Установка первого узла с «Универсальным диспетчером»

Процесс установки первого узла с «Универсальным диспетчером» аналогичен комплексной установке Termidesk, за исключением выбора только ролей «Портал администратора» и «Портал пользователя».

После установки передать каталог /etc/opt/termidesk-vdi на остальные узлы «Универсальных диспетчеров», «Шлюзов» и «Менеджеров рабочих мест»:

sudo scp -r /etc/opt/termidesk-vdi localuser@ipaddr_or_fqdn_host:/home/user/
BASH

где:

-r - ключ для рекурсивной (со вложенными каталогами) передачи;

localuser - имя пользователя целевого узла;

ipaddr_or_fqdn_host - IP-адрес или FQDN целевого узла;

/home/user - путь, куда будет скопирован каталог.

Перед началом установки остальных узлов «Универсальных диспетчеров» необходимо переместить скопированный ранее каталог termidesk-vdi в каталог /etc/opt/:

sudo mv /home/user/termidesk-vdi /etc/opt/
BASH

Установить второй узел с «Универсальным диспетчером» по аналогии с первым, не меняя параметры в диалогах подключения к СУБД и заполнения информации о подключении к RabbitMQ-server.

Установка «Шлюзов»

Установка «Шлюзов» выполняется из пакета termidesk-gateway.

Для установки «Шлюза» следует обратиться к подразделу Установка Шлюза документа СЛЕТ.10001-01 90 05 «Руководство администратора. Настройка компонента «Шлюз».

Подробное описание файла /etc/termidesk/gateway.yaml содержится в подразделе Параметры конфигурирования компонента документа СЛЕТ.10001-01 90 05 «Руководство администратора. Настройка компонента «Шлюз».

После завершения установки нужно изменить настройки запуска «Шлюзов» termidesk-gateway:

  • отредактировать файл /etc/termidesk/gateway.yaml, приведя файл к виду:
#
# The default configuration file for Termidesk Gateway, please do not change it.
#

# Объявляем переменную для SSL
_val0: &sslprof0																					
  key: ${sslKey:/etc/termidesk/ssl-cert-snakeoil.key}							# Путь к файлу закрытого ключа
  cert: ${sslCert:/etc/termidesk/ssl-cert-snakeoil.pem}							# Путь к файлу сертификата
  ca: ${sslCa}																	# Путь к файлу цепочки сертификации
  passphrase: ${sslPassPhrase}													# Парольная фраза для соединения SSL
  dhparams: ${sslDhParams}														# Путь к файлу с ключами Диффи-Хеллмана 
																				# для соединения SSL (default "")
  ciphers: ${sslCiphers}														# Используемый алгоритм преобразований 
																				# для соединения SSL (default "")																		

# Gateway серверы (это список, по умолчанию он пустой)
gwservers:
- listen: ${wsServerIP:0.0.0.0}:${wsServerPort:5099}							# IP-адрес и порт для защищенных входящих подключений, 
																				# для IPv6 "[::1]:80" (default ~)
  websocket:																	# Настройка WebSocket
    pingtimeout: ${wsIdleTimeout:30}											# Время пинга «Клиента» в секундах, диапазон [0, 100000], 
																				# если 0, то пинги отключены (default 30)
  checktoken:																	# Настройка проверки токенов
    url: ${urlCheckToken:https://disp1.termidesk.local/api/wsproxy/v1.1/verify}	# URL для проверки 
																				# (default "http://127.0.0.1:8080/api/wsproxy/v1/verify")
  tcp_downstream:																# Настройка соединения с сервисами по протоколу TCP
    reconnect: ${gwTCPReconnect:0}												# Количество переподключений, если не задано или равно 0, 
																				# то TCP сессия не восстанавливается, диапазон [0, 10] 
																				# (default 0)																

- listen: ${wssServerIP:0.0.0.0}:${wssServerPort:10000}							# IP-адрес и порт для защищенных входящих подключений, 
																				# для IPv6 "[::1]:80" (default ~)
  websocket:																	# Настройка WebSocket
    pingtimeout: ${wsIdleTimeout:30}											# Время пинга «Клиента» в секундах, диапазон [0, 100000], 
																				# если 0, то пинги отключены (default 30)															
  checktoken:																	# Настройка проверки токенов
    url: ${urlCheckToken:https://disp1.termidesk.local/api/wsproxy/v1.1/verify}	# URL для проверки 
																				# (default "http://127.0.0.1:8080/api/wsproxy/v1/verify")
  tcp_downstream:																# Настройка соединения с сервисами по протоколу TCP
    reconnect: ${gwTCPReconnect:0}												# Количество переподключений, если не задано или равно 0, 
																				# то TCP сессия не восстанавливается, диапазон [0, 10] 
																				# (default 0)
  ssl: *sslprof0																# Ссылка на настройки заданные в шаблоне SSL (default {})

# ...  Другие шлюзы

# MGT сервер
mgtserver:																							
  listen: ${mgtServerIP:0.0.0.0}:${mgtServerPort:8102}							# IP-адрес и порт запроса сведений о работоспособности Шлюза 
																				# для IPv6 "[::1]:80" (default ~)										
  path: ${healthCheckURL:/api/health}											# Путь запроса информации о работоспособности Шлюза 
																				# (default "/api/health")
  token: ${healthCheckAccessKey}												# Токен валидации (default "")
  ssl: *sslprof0																# Ссылка на настройки заданные в шаблоне SSL (default {})

# RabbitMQ клиент
rabbitmq:
  url: ${coordinatorUrl:amqp://USER:PASS@disp1.termidesk.local:5672/termidesk}	# URL подключения к серверу RabbitMQ в формате
																				# "amqp(s)://USER:PASS@<IP-адрес>:<порт>/termidesk", 
																				# где USER и PASS - это необязательные поля (default ~)
  user: ${coordinatorUser:termidesk}											# user - пользователь, если задан, 
																				# то изменяет url.USER (default "")
  pass: ${coordinatorPass:ksedimret}											# RabbitMQ pass - пароль, если задан, 
																				# то изменяет url.PASS (default "")
  timeout: ${coordinatorTimeout}												# RabbitMQ timeout(sec), диапазон [1, 60] (default 10)
  refreshtime: ${coordinatorRefreshTime:60}										# Период (sec) обновления информация на сервере RabbitMQ, 
																				# диапазон [10, 100000] (default 60)
  single: ${coordinatorSingle:true}												# Если true - то данные передаются до первого подтверждения, 
																				# если false - то данные передаются по циклу (бесконечно) 
																				# (default false)
  exchange: ${coordinatorExchange}												# RabbitMQ exchange (default "")
  routingkey: ${coordinatorRoutingKey}											# RabbitMQ routing key (default "termidesk_appnode")

loglevel:																		# Логирование сообщений
  info: ${logInfo:true}															# Уровень INFO (default true)
  debug: ${logDebug:false}														# Уровень DEBUG (default false)
BASH
  • сохранить файл, а затем перезапустить службу:
sudo systemctl restart termidesk-gateway
BASH

После настройки нужно передать каталог /etc/termidesk/ с первого узла «Шлюза» на другие узлы с этим компонентом.

Установка «Менеджеров рабочих мест»

Установка «Менеджеров рабочих мест» производится на два узла, работающих в режиме network failover.

Установка проводится в следующей последовательности:

1) ранее переданный файл termidesk.conf редактируется, параметру «NODE_ROLES» присваивается значение «TASKMAN»;

2) установить пакет termidesk-vdi:

sudo apt -y install termidesk-vdi
BASH

где:

-y  - ключ для пропуска подтверждения установки.

После установки нужно остановить (systemctl stop) и исключить (systemctl disable) службу termidesk-taskman из автоматического запуска:

sudo systemctl stop termidesk-taskman && sudo systemctl disable termidesk-taskman
BASH

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

Установка балансировщиков

Балансировщики нагрузки необходимы для балансировки клиентских подключений к универсальным диспетчерам и шлюзам, равномерного распределения нагрузки на них. Средой функционирования для балансировщиков нагрузки является ОС Astra Linux Special Edition 1.7.

Балансировщик nginx устанавливается командой:

sudo apt install -y nginx
BASH

где:

-y  - ключ для пропуска подтверждения установки.

Действия после распределенной установки

Настройка компонента «Менеджер рабочих мест» в режиме высокой доступности приведена в подразделе Настройка «Менеджера рабочего места» в режиме высокой доступности документа СЛЕТ.10001-01 90 02 «Руководство администратора. Настройка программного комплекса».

Настройка балансировщика нагрузки приведена в подразделе Настройка балансировщика для работы с самоподписанными сертификатами документа СЛЕТ.10001-01 90 02 «Руководство администратора. Настройка программного комплекса».