Кейсы
Карьера
Контакты

Связаться с нами

ФИО*
Компания*
Должность*
Телефон*
Корпоративная почта*
Ваш комментарий
Нажимая кнопку «Отправить заявку», вы подтверждаете, что ознакомились с условиями Политики конфиденциальности, и даете согласие на их обработку
27.09.2024

Отказоустойчивость в Termit

Termit

Схема развертывания

Команда Orion soft разработала архитектуру с взаимодействием со смежными системами:


Рис. 1 - Схема развертывания.

В таблице 1 приведен перечень сетевых компонентов и соответствующих им атрибутов, используемых в статье для развертывания и тестирования отказоустойчивости системы Termit.

Таблица 1. Компоненты, их FQDN и адреса.


;

Обзор тестирования отказоустойчивости

Мы провели комплексное тестирование отказоустойчивости различных компонентов системы Termit: 

  • Брокеры: Мы установили несколько брокеров (1.2.1 Установка первого брокера, 1.2.3 Установка второго брокера), сконфигурировали балансировщик нагрузки HAProxy, настроили страницу статистики для балансировщика (1.2 Брокеры. Балансировщик.), и убедились в стабильной работе брокеров даже при отключении одного из них (Отказоустойчивость - Брокеры). Результаты тестирования подтвердили, что балансировщик успешно маршрутизирует трафик на доступные брокеры, обеспечивая непрерывную работу системы.
  • База данных: Мы настроили кластер PostgreSQL (1.1 База данных. Установка кластера PostgreSQL) и проверили его поведение при отключении одной из нод (Отказоустойчивость - База данных). Система успешно продолжала обрабатывать запросы, демонстрируя высокую отказоустойчивость и способность поддерживать работоспособность при частичных сбоях.
  • Терминальные серверы: Мы настроили терминальные серверы и создали группу серверов (1.3 Установка на терминальные серверы, 2.3 Создание группы серверов). Мы проверили отказоустойчивость терминальных сессий двумя способами: аварийно отключив все брокеры (3.3 Терминальные серверы при отказе всех брокеров) и один из терминальных серверов (Отказоустойчивость - Терминальные серверы), мы убедились, что сессии продолжают создаваться и обслуживаться на оставшихся серверах. Это подтвердило надежность и отказоустойчивость механизма управления терминальными сессиями.
  • Шлюзы: Мы настроили шлюзы удаленного доступа (1.4 Установка шлюзов удаленного доступа) и HAProxy для балансировки нагрузки на шлюзы (1.5 Установка балансировщика нагрузки для шлюзов удаленного доступа). Мы проверили отказоустойчивость шлюзов, выключив один из них, и убедились, что балансировщик автоматически перенаправляет трафик на работающий шлюз, обеспечивая непрерывную работу системы (Отказоустойчивость - Шлюзы).
  • LDAP: Установив несколько контроллеров домена и настроив их для синхронизации (2.1 Подключение каталога + назначение ролей), мы проверили работоспособность Termit при отключении одного из них (Отказоустойчивость - LDAP). Результаты тестирования показали, что система успешно переключается на работающий контроллер, обеспечивая непрерывный доступ к данным и функционалу.

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


;

1. Подготовка стенда

1.1 База данных. Установка кластера PostgreSQL

1.1 База данных. Установка кластера PostgreSQL
Для настройки воспользуемся проектом PostgreSQL High-Availability Cluster, который позволяет автоматизированно с помощью Ansible развернуть кластер PostgreSQL на основе patroni, etcd и vip-manager.
Нам понадобится:
  • машина администратора, с которой будет запускаться плейбук Ansible;
  • три сервера с Debian 12, которые будут нодами нашего кластера;
  • для подключения к БД – имя orion-db.termit.corp, которое будет соответствовать виртуальному ip 10.250.107.125, размещенному на текущем мастер-узле кластера БД.
Подключаемся на машину администратора (FQDN машины – orion-admin.termit.corp). Для установки кластера выполним следующие шаги:
1. Устанавливаем ansible.

2. Устанавливаем git.

3. Скачиваем репозиторий.

4. Заполняем inventory-файл.


5. Редактируем строки в vars/main.yml. Изменения выделены:
cluster_vip: "10.250.107.125"
patroni_cluster_name: "patroni-cluster"
patroni_superuser_username: "postgres"
patroni_superuser_password: "termit"
patroni_replication_username: "replicator"
patroni_replication_password: "termit"
synchronous_mode: true
postgresql_pg_hba:
  - { type: "local", database: "all", user: "{{ patroni_superuser_username }}", address: "", method: "trust" }
  - { type: "local", database: "all", user: "{{ pgbouncer_auth_username }}", address: "", method: "trust" }
  - { type: "local", database: "replication", user: "{{ patroni_superuser_username }}", address: "", method: "trust" }
  - { type: "local", database: "all", user: "all", address: "", method: "{{ postgresql_password_encryption_algorithm }}" }
  - { type: "host", database: "all", user: "all", address: "127.0.0.1/32", method: "{{ postgresql_password_encryption_algorithm }}" }
  - { type: "host", database: "all", user: "all", address: "::1/128", method: "{{ postgresql_password_encryption_algorithm }}" }
  - { type: "host", database: "all", user: "all", address: "10.250.107.0/24", method: "{{ postgresql_password_encryption_algorithm }}" }

6. Генерируем ssh ключи для возможности подключения к нодам базы данных без требования ввода пароля.

7. Переносим ключи на ноды базы данных.

8. Запускаем плейбук Ansible для установки кластера БД.


9. Чтобы убедиться, что виртуальный IP (VIP) 10.250.107.125, соответствующий имени orion-db.termit.corp, корректно перенаправляет запросы к текущему мастер-узлу кластера, подключаемся к БД.

;

1.1.1 Ноды кластера

Подключаемся на первую машину с ролью базы данных (FQDN машины – orion-db01.termit.corp). 

1. Получаем полноценный доступ к учетной записи root командой:

su -


2. Проверяем информацию о текущей конфигурации кластера PostgreSQL, управляемого Patroni, с помощью команды:

patronictl list


В этой конфигурации мастер-нода (orion-db01) выполняет роль лидера и принимает записи, а ноды 2 (orion-db02) и 3 (orion-db03) являются репликами данных, поддерживая актуальное состояние базы данных в соответствии с мастером.

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

Переходим к подготовке нод кластера для использования Termit.

3. Запускаем сессию служебного пользователя postgres и командную оболочку postgres, последовательно выполнив команды:

sudo su - postgres 

psql


4. При установке брокера будет выбрана опция "создать новую базу данных", поэтому создаем нового пользователя с паролем и правами на создание новых баз данных с помощью команды

CREATE USER orion WITH PASSWORD 'Termit21' CREATEDB;


;

1.2 Брокеры. Балансировщик.

Для работы нескольких брокеров установим балансировщик нагрузки HAProxy.
Подключаемся на машину с ролью балансировщика нагрузки для брокеров (FQDN машины – orion-bln01.termit.corp) и выполняем следующие шаги:
1. Устанавливаем ПО HAProxy с помощью команды:
sudo dnf install haproxy


2. Включаем службу haproxy и добавляем автозагрузку с помощью команды:

sudo systemctl enable haproxy --now


3. Открываем файл конфигурации /etc/haproxy/haproxy.cfg для редактирования командой: 

sudo nano /etc/haproxy/haproxy.cfg


4. Добавляем в конец файла конфигурации /etc/haproxy/haproxy.cfg настройку серверов для балансировки:

frontend termit

   mode tcp
   bind :80
   default_backend termit_servers
backend termit_servers
   option httpchk
   http-check connect port 8080
   http-check send meth GET uri /
   mode tcp
   balance source
   hash-type consistent
   server orion-br01.termit.corp 10.250.107.111:80 check
   server orion-br02.termit.corp 10.250.107.112:80 check
frontend termit_https
   mode tcp
   bind :443
   default_backend termit_servers_https
backend termit_servers_https
   option httpchk
   http-check connect port 8080
   http-check send meth GET uri /
   mode tcp
   balance source
   hash-type consistent
   server orion-br01.termit.corp 10.250.107.111:443 check
   server orion-br02.termit.corp 10.250.107.112:443 check
frontend termit_8443_https
   mode tcp
   bind :8443
   default_backend termit_servers_8443_https
backend termit_servers_8443_https
   option httpchk
   http-check connect port 8080
   http-check send meth GET uri /
   mode tcp
   balance source
   hash-type consistent
   server orion-br01.termit.corp 10.250.107.111:8443 check
   server orion-br02.termit.corp 10.250.107.112:8443 check


где orion-br01.termit.corp – FQDN первого шлюза, 10.250.107.111 – адрес машины с FQDN orion-br01.termit.corp, orion-br02.termit.corp – FQDN второго шлюза, 10.250.107.112 – адрес машины с FQDN orion-br02.termit.corp.

5. Для настройки страницы статистики HAProxy редактируем файл конфигурации /etc/haproxy/haproxy.cfg, добавляя новые строки в раздел # main frontend which proxys to the backends. Изменения выделены

#---------------------------------------------------------------------

# main frontend which proxys to the backends

#---------------------------------------------------------------------

frontend main

    bind *:5000

    acl url_static path_beg -i /static /images /javascript /stylesheets

    acl url_static path_end -i .jpg .gif .png .css .js

    acl url_haproxy path_beg -i /haproxy_stats


    use_backend static if url_static

    use_backend haproxy_stats if url_haproxy

    default_backend app


6. Добавляем в конец файла конфигурации /etc/haproxy/haproxy.cfg настройку для отображения страницы статистики:

# Добавление настроек для страницы статистики

listen stats
    bind :8080
    mode http
    stats enable
    stats uri /haproxy_stats
    stats realm HAProxy\ Statistics
    stats auth admin:yourpassword
# Добавление нового backend для обработки запросов к странице статистики
backend haproxy_stats
    mode http
    stats enable
    stats uri /haproxy_stats
    stats realm HAProxy\ Statistics
    stats auth admin:yourpassword
    server stats 127.0.0.1:8080


Примечание**
В этой конфигурации страница статистики балансировщика доступна по HTTP, что не является безопасным методом доступа к важной информации о состоянии системы. Это сделано исключительно для демонстрации настроек отказоустойчивости и функциональности HAProxy. Рекомендуется использовать HTTPS для защиты данных и обеспечения безопасного доступа к странице статистики.

7. Проверяем созданный файл конфигурации с помощью команды ниже. Вывод команды не должен содержать ошибок. Предупреждения (warnings) не являются ошибками.

sudo haproxy -f /etc/haproxy/haproxy.cfg -c


8. Перезапускаем службу с помощью команды:

sudo systemctl restart haproxy


;

1.2.1 Установка первого брокера

Подключаемся на машину с ролью брокера (FQDN машины – orion-br01.termit.corp). Для установки брокера выполняем следующие шаги:

1. Копируем дистрибутив на сервер и проверяем права на выполнение установочного скрипта с помощью команды ls -la. Должно быть назначено право на исполнение. 

2. При необходимости выдаем права на запуск скрипта с помощью команды:

sudo chmod +x ./install.sh

3. Запускаем установочный скрипт с помощью команды:

sudo ./install.sh install






4. Указываем имя узла брокера (имя может быть любым).


5. Для первого брокера указываем «1».


6. В качестве адреса брокера вводим FQDN балансировщика. Портал будет доступен по этому адресу.


7. Для выбора опции «Создать новую базу данных» указываем «2».


8. Последовательно указываем имя хоста базы данных, порт «5432», имя новой БД, имя пользователя БД, пароль пользователя БД.



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


После завершения инсталляции для подтверждения успешной операции в браузере в адресной строке вводим адрес балансировщика: https://orion-bln01.termit.corp. В появившемся окне аутентификации указываем логин «admin» и пароль «admin» от учетной записи по умолчанию.


Вид портала после аутентификации под admin/admin:

;

1.2.2 Мониторинг состояния серверов с помощью страницы статистики HAProxy

Чтобы получить доступ к интерфейсу статистики HAProxy, зайдем на веб-адрес http://10.250.107.110:8080/haproxy_stats в браузере и введем указанные ранее в /etc/haproxy/haproxy.cfg учетные данные администратора (логин: admin, пароль: yourpassword).

После входа будет отображена страница статистики, на которой мы можем наблюдать текущее состояние серверов. Например, в разделе termit_servers можем увидеть, что сервер с именем orion-br01.termit.corp имеет статус «UP», что указывает на доступность сервера и готовность принимать запросы.

;

1.2.3 Установка второго брокера

Подключаемся на вторую машину с ролью брокера (FQDN машины – orion-br02.termit.corp). Для установки брокера выполняем следующие шаги:
1. Копируем дистрибутив на сервер и проверяем права на выполнение установочного скрипта с помощью команды ls -la. Должно быть назначено право на исполнение.

2. При необходимости выдаем права на запуск скрипта с помощью команды:
 sudo chmod +x ./install.sh
3. Запускаем установочный скрипт с помощью команды:
sudo ./install.sh install









4. Указываем имя узла брокера (имя может быть любым).


5. Для второго и последующих брокеров указываем «2».


6. Последовательно указываем имя хоста базы данных, порт «5432», имя БД, имя пользователя БД, пароль пользователя БД.


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



;

1.2.4 Мониторинг состояния серверов с помощью страницы статистики HAProxy

После завершения инсталляции для подтверждения успешной операции обращаемся к странице статистики HAProxy (расположенной по адресу https://10.250.107.110:8080/haproxy_stats).
В разделе termit_servers можем видеть, что сервер с именем orion-br02.termit.corp получил статус «UP», что указывает на доступность сервера и готовность принимать запросы.

При включении нового сервера его статус меняется с «DOWN» на «UP» в разделах termit_servers, termit_servers_https и termit_servers_8443_https. Этот переход подтверждает успешное добавление сервера в систему балансировки нагрузки, обеспечивая увеличение ее отказоустойчивости и распределение нагрузки между доступными серверами для обработки запросов.

Переходим на портал администрирования Termit. 


Второй брокер успешно отображается в разделе «Брокеры» со статусом «Работает». Этот статус свидетельствует о том, что второй брокер успешно прошел процесс инициализации и готов принимать и обрабатывать запросы от клиентов. 
;

1.3 Установка на терминальные серверы

Подключаемся на первую машину с ролью терминального сервера (FQDN машины – orion-nd01.termit.corp). Для установки на терминальный сервер выполним следующие шаги:

1. Устанавливаем Java 11 с помощью команды: 

sudo dnf install java-11-openjdk


2. Изменяем версию Java, используемую по умолчанию, с помощью команды

sudo alternatives --config java. 
Так как нам требуется версия 11, указываем номер 2:


3. Устанавливаем компоненты X2GO server на терминальный сервер с помощью команды:

sudo dnf install x2goserver-xsession x2goserver-fmbindings x2goserver-common x2goserver x2goagent -y






4. Вводим терминальный сервер в домен командой:

sudo join-to-domain.sh -d termit.corp -n orion-nd01 -u admin -p Ori0n --ou "OU=TermitComputers,DC=termit,DC=corp" -y

Аналогично приведенным шагам проводим настройку второй машины с ролью терминального сервера (FQDN машины – orion-nd2 .termit.corp). 

;

1.4 Установка шлюзов удаленного доступа

Подключаемся на машину с ролью шлюза (FQDN машины – orion-gw01.termit.corp). Для установки шлюза удаленного доступа выполняем следующие шаги:
1. Устанавливаем компонент openssh-server с помощью команды:
sudo dnf install openssh-server


2. Вводим терминальный сервер в домен, для этого выполняем последовательно команды:

sudo dnf install join-to-domain

sudo join-to-domain.sh -d termit.corp -n orion-gw01 -u admin -p Ori0n --ou "OU=TermitComputers" -y


<...>



Аналогично этим шагам настраиваем второй машины с ролью шлюза удаленного доступа (FQDN машины – orion-gw02.termit.corp). 

;

1.5 Установка балансировщика нагрузки для шлюзов удаленного доступа

Подключаемся на машину с ролью балансировщика нагрузки для шлюзов (FQDN машины – orion-bln02.termit.corp). Для установки балансировщика выполняем следующие шаги:
1. Устанавливаем ПО HAProxy с помощью команды:
sudo dnf install haproxy

2. Включаем службу haproxy и добавляем автозагрузку с помощью команды:
sudo systemctl enable haproxy --now


3. Чтобы использовать HAProxy для TCP (SSH) балансировки, меняем порт SSH по умолчанию, для возможности подключения к серверу HAProxy. Для этого редактируем значение параметра Port в файле конфигурации, /etc/ssh/sshd_config:
sudo nano /etc/ssh/sshd_config


4. Перезапускаем службу SSH для применения изменений с помощью команды:
sudo systemctl restart sshd
5. Устанавливаем пакет policycoreutils-python-utils для возможности использования команды semanage, которая нужна для управления типами портов SELinux:
sudo dnf install policycoreutils-python-utils


6. Добавляем порт 1022 к типу порта ssh_port_t в SELinux для обработки подключений SSH через новый порт:
sudo semanage port -a -t ssh_port_t -p tcp 1022

Примечание**
После изменения порта SSH в конфигурационном файле /etc/ssh/sshd_config и перезапуска службы SSH, все новые SSH-соединения должны использовать новый порт. Теперь, чтобы подключиться к серверу с использованием SSH, указываем новый порт в команде SSH.
7. Чтобы разрешить HAProxy подключаться к любым портам, устанавливаем булево значение SELinux в значение 'on' для параметра haproxy_connect_any командой:
sudo setsebool -P haproxy_connect_any on

8. Открываем файл конфигурации /etc/haproxy/haproxy.cfg для редактирования.

9. Добавляем в конец файла конфигурации /etc/haproxy/haproxy.cfg настройку серверов для балансировки.
frontend termit
   mode tcp
   bind :22 
   default_backend termit_servers
backend termit_servers
   mode tcp
   balance source
   hash-type consistent
   server orion-gw01.termit.corp 10.250.107.118:22 check
   server orion-gw02.termit.corp 10.250.107.119:22 check

где orion-gw01.termit.corp – FQDN первого шлюза, 10.250.107.118 – адрес машины с FQDN orion-gw01.termit.corp
orion-gw02.termit.corp – FQDN второго шлюза, 10.250.107.119 – адрес машины с FQDN orion-gw02.termit.corp

10. Для настройки страницы статистики HAProxy редактируем файл конфигурации /etc/haproxy/haproxy.cfg, добавляя новые строки в раздел # main frontend which proxys to the backends. Изменения выделены:
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend main
    bind *:5000
    acl url_static path_beg -i /static /images /javascript /stylesheets
    acl url_static path_end -i .jpg .gif .png .css .js
    acl url_haproxy path_beg -i /haproxy_stats
    use_backend static if url_static
    use_backend haproxy_stats if url_haproxy
    default_backend app

11. Добавляем в конец файла конфигурации /etc/haproxy/haproxy.cfg настройку для отображения страницы статистики:
# Добавление настроек для страницы статистики
listen stats
    bind :8080
    mode http
    stats enable
    stats uri /haproxy_stats
    stats realm HAProxy\ Statistics
    stats auth admin:yourpassword
# Добавление нового backend для обработки запросов к странице статистики
backend haproxy_stats
    mode http
    stats enable
    stats uri /haproxy_stats
    stats realm HAProxy\ Statistics
    stats auth admin:yourpassword
    server stats 127.0.0.1:8080


12. Проверяем созданный файл конфигурации с помощью команды ниже. Вывод команды не должен содержать ошибок. Предупреждения (warnings) не являются ошибками.
sudo haproxy -f /etc/haproxy/haproxy.cfg -c

13. Перезапускаем сервис HAProxy с помощью команды:
sudo systemctl restart haproxy


14. Обращаемся к странице статистики HAProxy, расположенной по адресу https://10.250.107.117:8080/haproxy_stats.

В разделе termit_servers можем увидеть, что оба шлюза (orion-gw01.termit.corp, orion-gw02.termit.corp) имеют статус «UP», что указывает на их доступность и готовность принимать запросы.


15. На Портале администрирования в левом меню выбираем раздел «Настройки» — «Настройки шлюзов удаленного доступа».


16. Нажимаем «Редактировать».
17. Выбираем «Включено».

18. Нажимаем + и задаем параметры: в параметре «Адрес» указываем адрес балансировщика нагрузки для шлюзов (FQDN – 10.250.107.117), в параметре «Порт» указываем 22 порт. 
Нажимаем «Сохранить» > «Сохранить».
;

2. Настройка Termit

2.1 Подключение каталога + назначение ролей

В этом разделе описано, как настроить интеграцию с LDAP, роли, создать сервер, группу серверов и опубликовать приложение.
Termit использует информацию о пользователях, группах и их связи из LDAP-каталогов. Эта информация копируется из LDAP при синхронизации.
Предварительно в AD были созданы группы для ролей и приложений, а также сервисная учетная запись. В нашем домене создано подразделение termitusers, которое синхронизируется с Termit. Это подразделение содержит пользователей, имеющих доступ к системе Termit. Синхронизация подразделения с Termit обеспечивает динамическую и управляемую систему доступа, где изменения в членстве группы могут отражаться в доступе к ресурсам. Также это позволяет управлять правами доступа централизованно, что является эффективным способом обеспечения безопасности системы.
Для настройки LDAP выполним следующие действия:

1. В браузере, в адресной строке вводим адрес балансировщика https://orion-bln01.termit.corp.
2. Для аутентификации в Termit вводим данные для входа в окне аутентификации:
● Учетная запись — admin
● Пароль — admin

1. В левом меню выбираем раздел «Настройки» — «Настройки LDAP» и нажимаем «Редактировать».
2. Выбираем «LDAP используется».
3. Задаем параметры для подключения:
● Базовое уникальное имя. Для домена termit.lab: «OU=termitusers,DC=termit,DC=corp»;
● Имя пользователя. Для домена termit.corp: «CN=termitsvc,OU=termitusers,DC=termit,DC=corp»;
● Пароль — пароль от сервисной учетной записи;
● Период синхронизации (15 минут).

Нажимаем «Далее».
4. Чтобы добавить сервер LDAP, нажимаем +. Указываем адрес, порт и протокол.


Нажимаем «Сохранить».
5. Добавляем второй LDAP-сервер


Нажимаем «Сохранить», «Далее».
6. На вкладке «Подтверждение информации» проверяем информацию о сервере LDAP и соединение.
При успешном соединении появится сообщение «Проверка соединения прошла успешно».

Нажимаем «Сохранить».
7. Чтобы синхронизировать данные LDAP, наводим указатель мыши на «Настройки LDAP» и выбираем «Синхронизировать данные LDAP».
Состояние синхронизации LDAP и Termit можно посмотреть в разделе «Журнал событий».

;

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

Можно настроить следующие роли:
● Администраторы могут полностью контролировать систему, например, управлять серверами, пользователями и приложениями;
● Служба поддержки может просматривать настройки, информацию о серверах и сессиях в разделе «Обзор», журнал событий и список сессий, а также завершать сессии и блокировать пользователей. Выполняет функцию L1 технической поддержки;
● Пользователи обладают учетными записями, с помощью которых они имеют доступ к Termit. Только пользователи могут запускать приложения.

Для настройки ролей выполняем следующие действия:
1. В левом меню выбираем раздел «Настройки».
2. Переходим на вкладку «Роли».

3. Наводим курсор на «Администраторы», нажимаем «Редактировать», затем «+».
4. Добавляем группы из каталога пользователей для роли администраторов. Можно добавить несколько групп. Поддерживаются вложенные группы.

5. Нажимаем «Сохранить» > «Сохранить».
Для ролей «Служба поддержки» и «Пользователи» повторяем действия из шагов 3-5, выбирая группы TechSupport и TermitUsers, соответственно.


Далее создаем терминальный сервер.
;

2.2 Создание серверов

Для создания сервера выполняем следующие действия:

1. На портале администрирования в левом меню выбираем раздел «Серверы».

2. В правом верхнем углу нажимаем «Новый сервер».

3. На вкладке «Новый терминальный сервер»:

● Адрес — указываем DNS-адрес терминального сервера

● Тип — выбираем операционную систему Linux


4. Нажимаем «Далее».

5. На вкладке «Группа терминальных серверов» группу выбирать не нужно, так как она еще не создана. Нажимаем «Далее».

6. На вкладке «Подтверждение информации» проверяем информацию о сервере и нажимаем «Создать».

7. Чтобы установить агент на терминальный сервер, подключаемся на машину с адресом 10.250.107.115 и выполняем указанный скрипт в консоли терминального сервера. Агент будет установлен и зарегистрирован на терминальном сервере.


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


Созданный сервер появился в списке, статус агента изменился на «Онлайн».


Далее создадим группу серверов.

;

2.3 Создание группы серверов

Для создания группы серверов:
1. В левом меню выбираем раздел «Группы серверов».
2. В правом верхнем углу нажимаем «Новая группа».

3. На вкладке «Основные настройки»:
● Имя — указываем название группы.
● Тип — выбираем операционную систему Linux.
● (Опционально) Описание — описание группы серверов.

Нажимаем «Далее».
4. На вкладке «Терминальные серверы» выбираем из списка сервер, который создали ранее.


Нажимаем «Далее».
5. На вкладке «Балансировка терминальных серверов» оставляем значение весов по умолчанию.


Нажимаем «Далее».
6. На вкладке «Таймауты сессий» оставляем значения по умолчанию.


Нажимаем «Далее».
7. На вкладке «Подтверждение информации» проверяем информацию о группе серверов и нажимаем «Создать».


Созданная группа появилась в списке:

Повторяем действия по созданию сервера для второго терминального сервера, в процессе создания добавляем его в группу серверов HA Group.

;

2.4 Публикация приложения

Для публикации приложения выполняем следующие действия:
1. В левом меню выбираем раздел «Приложения».
2. Нажимаем «Добавить приложение».
3. На вкладке «Основные настройки» задаем параметры:
● Имя — название приложения.
● (Опционально) Наименование у пользователя — название приложения, которое будет отображаться у пользователя.
● Тип — выбираем «Приложение».
● Команда для запуска — команда для запуска приложения.
● (Опционально) Версия — версия приложения.
● (Опционально) Описание — описание приложения.


Нажимаем «Далее».
4. На вкладке «Группа терминальных серверов» выбираем группу серверов HA Group для приложения:


Нажимаем «Далее».
5. На вкладке «Группы доступа приложения» добавляем группу. Нажимаем + и выбираем из списка группу, которая будет иметь доступ к этому приложению.


Нажимаем «Сохранить», «Далее».
6. На вкладке «Подтверждение информации» проверяем информацию о приложении и нажимаем «Создать».
;

2.5 Установка клиента

Для установки клиента выполним следующие действия:
1. В браузере в адресной строке вводим адрес, по которому доступен Termit — https://orion-bln0.termit.corp
2. Вводим имя пользователя и пароль доменной учетной записи:

Нажимаем «Войти».
3. Выбираем операционную систему Linux, скачиваем клиент Termit для Linux rpm и выполняем шаги по установке.
 
;

3. Проверка отказоустойчивости

3.1 Брокеры

1. Начальное состояние: оба брокера включены, и балансировщик работает нормально. Аутентифицируемся на портале, тем самым убеждаемся, что пользователи могут успешно подключаться к ресурсу через балансировщик.


2. Отключение одного брокера:

● На машине с ролью брокера (FQDN - orion-br01.termit.corp) выполняем команду sudo shutdown now. При этом балансировщик должен продолжать перенаправлять запросы к другому брокеру, который остается включенным.


● Для подтверждения успешной операции обращаемся к странице статистики HAProxy (расположенной по адресу https://10.250.107.110:8080/haproxy_stats). В разделе termit_servers можем увидеть, что сервер с именем orion-br01.termit.corp получил статус «DOWN», что указывает на его недоступность, в то время как сервер с именем orion-br02.termit.corp остается в статусе «UP».


3. Проверка доступности ресурса: страница с порталом администрирования активна, пользователи все еще имеют возможность успешно подключаться к ресурсу через балансировщик, поскольку он перенаправляет запросы на доступный брокер.


В разделе "Брокеры" также можем отследить статусы брокер-нод:


4. Восстановление отказавшего брокера: после восстановления отказавшего брокера он снова становится доступным для балансировщика. При этом балансировщик должен начать равномерно распределять запросы между обоими брокерами.


5. Проверка восстановления: пользователи должны снова успешно подключаться к ресурсу через балансировщик, который теперь перенаправляет запросы на оба брокера, восстановив нормальное равновесие нагрузки.


Произведенные действия позволяют убедиться в том, что СТД Termit обеспечивает отказоустойчивость брокеров и может эффективно обрабатывать ситуации с отказавшими узлами.

;

3.2 База данных

1. Начальное состояние: включены три ноды базы данных, одна из них (FQDN машины – orion-db01.termit.lab) выступает в роли мастер-ноды кластера. Администратор может свободно создавать группы серверов и назначать на них приложения, полагаясь на стабильность кластера. 



2. Проверка отказоустойчивости: отключаем мастер-ноду базы данных (FQDN машины – orion-db01.termit.lab), пробуем создать группу терминальных серверов на портале администрирования СТД Termit, что свидетельствует о надежности нашего кластера и его способности к бесперебойной работе в случае сбоя одной из нод.

Проверяем состояние кластера, выполняя на второй ноде базы данных (FQDN машины – orion-db02.termit.lab, соответствует IP-адресу 10.250.107.127) команду

patronictl list


После выключения мастер-ноды (orion-db01) роль мастера была успешно переназначена на ноду orion-db02, которая стала новым мастером, а нода orion-db03 перешла в режим синхронного резерва. Таким образом, кластер остается работоспособным и продолжает обеспечивать отказоустойчивость, несмотря на выход из строя одной из нод.

3. Проверяем работу портала администрирования после выключения мастер-ноды (orion-db01) кластера, для этого пробуем создать группу терминальных серверов на портале администрирования СТД Termit.



4. Восстанавливаем работу ноды базы данных, ранее выступающей в качестве мастер-ноды (FQDN машины – orion-db01.termit.lab). Проверяем состояние кластера, выполняя на второй ноде базы данных (FQDN машины – orion-db02.termit.lab, соответствует IP-адресу 10.250.107.127) команду

patronictl list


Когда мастер-нода orion-db01 была восстановлена, она снова стала доступной, однако теперь в роли реплики, так как роль мастера уже была присвоена ноде orion-db02. Таким образом, кластер вернулся к нормальному состоянию с одной мастер-нодой и двумя репликами, и процесс репликации продолжается.

;

3.3 Терминальные серверы при отказе всех брокеров

1. Начальное состояние: оба брокера включены, балансировщик работает нормально. Аутентифицируемся в Termit-клиенте, запускаем сессию с google chrome и с рабочим столом.




2. Последовательно отключаем оба брокера, выполняя sudo shutdown now на машинах с FQDN orion-br01.termit.corp и orion-br02.termit.corp. Оба брокера теперь недоступны, и балансировщик не может направлять новые запросы к брокерам.

На странице статистики HAProxy оба брокера отображаются в статусе «DOWN».



3. Проверка состояния активных терминальных сессий: терминальные серверы orion-nd01.termit.corp и orion-nd02.termit.corp остаются онлайн и обрабатывают текущие сессии. Переключаемся на клиентскую машину и проверяем состояние открытой ранее сессии.


Сессия с google chrome, бывшая активной до отказа всех брокеров, продолжает функционировать нормально, несмотря на отказ обоих брокеров.

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

;

3.4 Терминальные серверы

1. Начальное состояние: оба сервера в статусе онлайн. На клиентской машине запущены две сессии, по одной на каждый из терминальных серверов.



2. Проверка отказоустойчивости: подключаемся на терминальный сервер c FQDN orion-nd01.termit.corp (10.250.107.115), принудительно завершаем работу терминального сервера командой:

sudo shutdown now

Проверяем, что на клиентской машине только одна из сессий завершается из-за отключения сервера (сессия с google chrome, открытая на терминальном сервере с адресом 10.250.107.115), в то время как другая (сессия с рабочим столом, открытая на терминальном сервере с адресом 10.250.107.116) остается активной.


Действительно, на портале администрирования агент на сервере с адресом 10.250.107.115 (FQDN - orion-nd01.termit.corp) получил статус «Недоступен», что означает недоступность сервера для обработки запросов.


В разделе «Сессии» портала администрирования сессия на вышедшем из строя терминальном сервере отображается в том же статусе, в каком находилась на момент аварийного отключения терминального сервера (особенность релиза Termit 2.1, см. Особенности и ограничения). 

`

3. Восстановление работы: после отключения терминального сервера, система остается в работоспособном состоянии. Пытаемся запустить новую сессию с приложением Chrome 2 на клиентской машине


Новая сессия автоматически направляется на доступный терминальный сервер (FQDN машины - orion-nd02.termit.corp, адрес 10.250.107.116), который продолжает обслуживать активные сессии.

Раздел «Сессии» портала администрирования подтверждает вышеописанное:


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

;

3.5 Шлюзы

1. Начальное состояние: оба шлюза находятся в статусе онлайн, балансировщик нагрузки настроен на маршрутизацию трафика между ними. Запускаем сессию с Google Chrome через Termit клиент. 


Можем убедиться, что сессия идет через балансировщик, выполнив на клиентской машине команду: 

netstat -t -ano | grep ":22" | grep "ESTABLISHED" 

Видим соединение до балансировщика для шлюзов.


2. Проверка отказоустойчивости: отключим используемый шлюз, выполнив на машине с FQDN orion-gw01.termit.corp команду:

sudo shutdown now


Видим, что на клиентской машине сессия с браузером аварийно завершилась.


На портале администрирования сессия перешла в статус «Отключенная».


На странице статистики HAProxy видим, что статус «UP» присвоен только одному из двух шлюзов, шлюзу с FQDN orion-gw0.termit.lab, а значит, все сессии попадают через балансировщик нагрузки на него. 


3. Восстановление работы: пробуем запустить новую сессию с рабочим столом через балансировщик. Балансировщик маршрутизирует соединение через работающий шлюз. Сессия успешно запущена, на портале администрирования имеет статус «Активная».



;

3.6 LDAP

1. Начальное состояние: Оба контроллера домена: orion-dc01.termit.corp (адрес машины 10.250.107.20) и orion-dc02.termit.corp (адрес машины 10.250.107.30) функционируют нормально, обеспечивая доступ к порталу администрирования и обработку запросов клиентов. На портале администрирования указаны оба LDAP-сервера для синхронизации.


На портале администрирования нажимаем «Проверка соединения», получаем всплывающее окно с сообщением «Проверка соединения прошла успешна».



Аутентификация в десктоп-клиенте с помощью доменной учетной записи работает корректно:



2. Проверка отказоустойчивости: Выключаем машину с FQDN orion-dc02.termit.corp. Проверяем возможность синхронизации с LDAP на портале администрирования


Проверяем возможность аутентификации доменной учетной записью в Termit-клиенте:


Авторизация успешна. Поскольку второй контроллер домена (FQDN машины - orion-dc02.termit.corp) продолжает работать, вся функциональность остается доступна. Пользователи могут успешно обращаться к порталу администрирования и использовать десктопные клиенты, также происходит синхронизация LDAP с активным контроллером.

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

;

4. Вывод

Проведенное тестирование отказоустойчивости компонентов (брокеров,базы данных, терминальных серверов, шлюзов и LDAP) системы терминального доступа Termit подтверждает:
● способность обеспечивать стабильную работу даже при сбоях и отключении отдельных узлов, так как наша система успешно переключается на доступные ресурсы;
● готовность Termit к работе в различных сценариях: отключение серверов, сбои в работе отдельных компонентов, и прочие аномальные ситуации, возникающие в процессе эксплуатации;
● готовность к работе в динамичной и требовательной среде бизнеса. Внедрение Termit позволяет вам минимизировать риски простоев и обеспечить бесперебойную работу корпоративных приложений.

;
Termit