Download PDF
Download page Отказоустойчивая установка Termidesk.
Отказоустойчивая установка Termidesk
Отказоустойчивая установка Termidesk
Основные принципы отказоустойчивой установки
В Termidesk предусмотрена отказоустойчивая установка комплекса для сохранения работоспособности при возникновении нештатных ситуаций.
Перечень условий для отказоустойчивой установки:
- брокер сообщений RabbitMQ-server устанавливается на одном узле с СУБД (в общем случае этот компонент может устанавливаться на отдельный узел, но в рамках настоящей процедуры данный вариант не рассматривается);
Если будет использоваться внешняя СУБД, нужно установить RabbitMQ-server на один из узлов c компонентами Termidesk или на отдельный узел.
- на всех узлах настроены статические IP-адреса;
- на всех узлах настроена синхронизация времени от единого источника.
Упрощенная схема отказоустойчивой установки представлена на рисунке.
Перечень обозначенных компонентов приведен в таблице.
Все примеры IP-адресов и FQDN должны быть заменены на актуальные, соответствующие схеме адресации, принятой в инфраструктуре предприятия. Следует учесть, что в примерах конфигурационных файлов и запросах также используются IP-адреса и FQDN из таблицы, в рабочей конфигурации их следует изменить на актуальные.
Обозначение на схеме | Установленные на узел компоненты | FQDN узла | IP-адрес |
---|---|---|---|
Сервер Termidesk 1 | Основной узел (master). Установлен с компонентами:
При установке «Универсального диспетчера» необходимо выбрать роль «Портал администратора» диалоговом окне псевдографического интерфейса инсталлятора. В общем случае может использоваться и/или роль «Портал пользователя» | disp1.termidesk.local | 192.0.2.2 192.0.2.1 (виртуальный IP-адрес) |
Сервер Termidesk 2 | Резервный узел (slave). Установлен с компонентами:
При установке «Универсального диспетчера» необходимо выбрать роль «Портал администратора» диалоговом окне псевдографического интерфейса инсталлятора. В общем случае может использоваться и/или роль «Портал пользователя» | disp2.termidesk.local | 192.0.2.3 192.0.2.1 (виртуальный IP-адрес) |
СУБД PostgreSQL | Установлены СУБД PostgreSQL и RabbitMQ-server (обе службы на одном узле) | db.termidesk.local | 192.0.2.4 |
К виртуальному IP-адресу подключается программный клиент. Этот IP-адрес назначается в настройках VRRP и одинаков для обоих узлов Termidesk.
Отказоустойчивая установка проводится в следующей последовательности:
1) устанавливается узел с компонентами СУБД и RabbitMQ-server (обе службы на одном узле). Выполняется настройка СУБД;
2) устанавливается основной узел Termidesk с компонентом «Универсальный диспетчер» (при установке выбирается роль «Портал администратора»), на этот же узел устанавливается «Шлюз» из пакета termidesk-gateway
;
3) с основного узла Termidesk на резервные копируется каталог /etc/opt/termidesk-vdi
вместе с его содержимым;
4) устанавливаются резервные узлы Termidesk;
5) проверяется работоспособность узлов Termidesk;
6) выполняется настройка узлов в режиме высокой доступности.
Установка и настройка СУБД Postgres-11
Процесс установки СУБД Postgres-11 и брокера сообщений RabbitMQ-server не отличается от процесса, описанного в разделе Подготовка среды функционирования).
Для завершения настройки 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
- сохранить файл и перезапустить службу
rabbitmq-server
:
:~$ sudo systemctl restart rabbitmq-server
Сервис СУБД должен быть настроен таким образом, чтобы он мог принимать подключения с узлов Termidesk, для этого нужно:
- отредактировать файл
/etc/postgresql/11/main/postgresql.conf
: в разделеCONNECTIONS AND AUTHENTICATION
изменить строкуlisten_addresses
, заменивlocalhost
на «*». Пример:
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------
# - Connection Settings -
listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
port = 5432 # (change requires restart)
- затем отредактировать файл
/etc/postgresql/11/main/pg_hba.conf
: в разделе#IPv4 local connections
в столбцеADDRESS
текущее значение нужно изменить наall
. Пример:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all all md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
- сохранить файлы и перезапустить службу
postgresql
:
:~$ sudo systemctl restart postgresql
Установка основного узла Termidesk
Процесс установки основного узла Termidesk аналогичен комплексной установке Termidesk, за исключением выбора только роли «Портал администратора». Компонент «Шлюз» устанавливается на этот же узел из пакета termidesk-gateway
.
После установки необходимо:
- скорректировать файл конфигурации веб-сервера
/etc/apache2/apache2.conf
. Для этого нужно найти и раскомментировать строку с параметромAstraMode
, далее присвоить данному параметру значениеoff
, точно соблюдая отступы и пробелы в файле:
# Astra security mode
#
AstraMode off
- запустить службу
termidesk-taskman
, не добавляя ее в раздел автоматической загрузки:
:~$ sudo systemctl start termidesk-taskman
Перенос каталога с конфигурационными файлами и ключами
Настройки основного узла Termidesk используются как эталонные для остальных узлов Ternidesk.
После установки основного узла Termidesk нужно передать каталоги /etc/opt/termidesk-vdi
и /etc/termidesk/
на остальные узлы Termidesk:
:~$ sudo scp -r /etc/opt/termidesk-vdi localuser@ipaddr_or_fqdn_host:/home/user/
:~$ sudo scp -r /etc/termidesk localuser@ipaddr_or_fqdn_host:/home/user/
где:
-r
- ключ для рекурсивной (со вложенными каталогами) передачи;
localuser
- имя пользователя целевого узла;
ipaddr_or_fqdn_host
- IP-адрес или FQDN целевого узла;
/home/user
- путь, куда будет скопирован каталог.
Перед началом установки остальных узлов необходимо переместить скопированные ранее каталоги:
:~$ sudo mv /home/user/termidesk-vdi /etc/opt/
:~$ sudo mv /home/user/termidesk /etc/
Установка резервных узлов Termidesk
Процесс установки резервных узлов Termidesk аналогичен установке основного узла, но в диалоге подключения к СУБД и заполнения информации о подключении к RabbitMQ-server не нужно. Действия после установки также аналогичны действиям, выполняемым на основном узле.
Проверка работоспособности узлов Termidesk
После установки нужно убедиться, что на основном и резервных узлах Termidesk правильно запущены службы, для этого выполнить команду на каждом узле:
:~$ sudo systemctl -a | grep termidesk
На основном узле вывод команды должен отображать, что активны и загружены все службы Termidesk, пример вывода:
admin@disp1.termidesk.local:~$ sudo systemctl -a | grep termidesk
termidesk-taskman.service loaded active running Termidesk-VDI Taskman daemon
termidesk-vdi.service loaded active running Termidesk-VDI daemon
termidesk-gateway.service loaded active running Termidesk-Gateway daemon
На резервных узлах вывод команды должен отображать, что активны и загружены только службы termidesk-vdi
и termidesk-gateway
, пример вывода:
admin@disp1.termidesk.local:~$ sudo systemctl -a | grep termidesk
termidesk-taskman.service inactive dead Termidesk-VDI Taskman daemon
termidesk-vdi.service loaded active running Termidesk-VDI daemon
termidesk-gateway.service loaded active running Termidesk-Gateway daemon
Затем необходимо проверить доступность резервных узлов по протоколу HTTPS, выполнив в веб-браузере переход по адресу https://disp2.termidesk.local
или https://192.0.2.3
. Убедиться, что отобразилась страница входа в Termidesk.
Настройка узлов в режиме высокой доступности
Действия по настройке узлов будут идентичными приведенным в подразделе Настройка «Менеджера рабочего места» в режиме высокой доступности документа СЛЕТ.10001-01 90 02 «Руководство администратора. Настройка программного комплекса» за исключением файла /etc/keepalived/keepalive
d.conf
.
Файл /etc/keepalived/keepalive
d.conf
должен быть приведен к виду (по очереди на каждом из узлов):
Значения параметров в файле keepalived.conf
приведены в качестве примера. Значения должны быть заменены на актуальные, соответствующие схеме адресации, принятой в инфраструктуре предприятия.
Параметры, явно подлежащие изменению, отмечены комментарием «# НУЖНО УКАЗАТЬ».
global_defs {
router_id disp1.termidesk.local # НУЖНО УКАЗАТЬ: hostname хоста
script_user user # НУЖНО УКАЗАТЬ: вместо user -> пользователь, от имени которого запускается keepalived
enable_script_security
}
vrrp_script check_httpd {
script "/usr/bin/pgrep apache" # path of the script to execute
interval 1 # seconds between script invocations, default 1 second
timeout 3 # seconds after which script is considered to have failed
#weight <INTEGER:-254..254> # adjust priority by this weight, default 0
rise 1 # required number of successes for OK transition
fall 2 # required number of successes for KO transition
#user USERNAME [GROUPNAME] # user/group names to run script under
init_fail # assume script initially is in failed state
}
# Для каждого виртуального IPv4-адреса создается свой экземпляр vrrp_instance
vrrp_instance termidesk-taskman {
notify /etc/keepalived/notify.sh
# Initial state, MASTER|BACKUP
# As soon as the other machine(s) come up,
# an election will be held and the machine
# with the highest priority will become MASTER.
# So the entry here doesn't matter a whole lot.
state BACKUP
# interface for inside_network, bound by vrrp
# НУЖНО УКАЗАТЬ: eth0 -> интерфейс, смотрящий в Интернет
interface eth0
# arbitrary unique number from 0 to 255
# used to differentiate multiple instances of vrrpd
# running on the same NIC (and hence same socket).
# НУЖНО УКАЗАТЬ: вместо 2 -> номер экземпляра vrrp_instance
virtual_router_id 2
# for electing MASTER, highest priority wins.
# to be MASTER, make this 50 more than on other machines.
# НУЖНО УКАЗАТЬ: вместо 128 -> приоритет экземпляра vrrp_instance
priority 128
preempt_delay 5 # Seconds
# VRRP Advert interval in seconds (e.g. 0.92) (use default)
advert_int 1
# НУЖНО УКАЗАТЬ: вместо 192.0.2.1 -> IPv4-адрес интерфейса, смотрящего в Интернет
unicast_src_ip 192.0.2.1
authentication {
auth_type PASS
# НУЖНО УКАЗАТЬ: ksedimret -> заменить на безопасный пароль
auth_pass ksedimret
}
virtual_ipaddress {
# В этой секции происходит назначение IP-алиаса
# НУЖНО УКАЗАТЬ: вместо 192.0.2.1/24 -> виртуальный IPv4-адрес и сетевой префикс с интерфейса, смотрящего в Интернет
# НУЖНО УКАЗАТЬ: вместо eth0 -> интерфейс, смотрящий в Интернет
# НУЖНО УКАЗАТЬ: вместо eth0:106 -> интерфейс, смотрящий в Интернет:4-й октет виртуального IPv4-адреса
192.0.2.1/24 dev eth0 label eth0:106
}
track_script {
check_httpd
}
}
vrrp_instance termidesk-vdi {
notify /etc/keepalived/notify.sh
# Initial state, MASTER|BACKUP
# As soon as the other machine(s) come up,
# an election will be held and the machine
# with the highest priority will become MASTER.
# So the entry here doesn't matter a whole lot.
state BACKUP
# interface for inside_network, bound by vrrp
# НУЖНО УКАЗАТЬ: eth0 -> интерфейс, смотрящий в Интернет
interface eth0
# arbitrary unique number from 0 to 255
# used to differentiate multiple instances of vrrpd
# running on the same NIC (and hence same socket).
# НУЖНО УКАЗАТЬ: вместо 107 -> номер экземпляра vrrp_instance
virtual_router_id 107
# for electing MASTER, highest priority wins.
# to be MASTER, make this 50 more than on other machines.
# НУЖНО УКАЗАТЬ: вместо 128 -> приоритет экземпляра vrrp_instance
priority 128
preempt_delay 5 # Seconds
# VRRP Advert interval in seconds (e.g. 0.92) (use default)
advert_int 1
# НУЖНО УКАЗАТЬ: вместо 192.0.2.3 -> IPv4-адрес интерфейса, смотрящего в Интернет
unicast_src_ip 192.0.2.3
authentication {
auth_type PASS
# НУЖНО УКАЗАТЬ: ksedimret -> заменить на безопасный пароль
auth_pass ksedimret
}
virtual_ipaddress {
# В этой секции происходит назначение IP-алиаса
# НУЖНО УКАЗАТЬ: вместо 192.0.2.1/24 -> виртуальный IPv4-адрес и сетевой префикс с интерфейса, смотрящего в Интернет
# НУЖНО УКАЗАТЬ: вместо eth0 -> интерфейс, смотрящий в Интернет
# НУЖНО УКАЗАТЬ: вместо eth0:107 -> интерфейс, смотрящий в Интернет:4-й октет виртуального IPv4-адреса
192.0.2.1/24 dev eth0 label eth0:107
}
track_script {
check_httpd
}
}
vrrp_instance termidesk-gateway {
notify /etc/keepalived/notify.sh
# Initial state, MASTER|BACKUP
# As soon as the other machine(s) come up,
# an election will be held and the machine
# with the highest priority will become MASTER.
# So the entry here doesn't matter a whole lot.
state BACKUP
# interface for inside_network, bound by vrrp
# НУЖНО УКАЗАТЬ: eth0 -> интерфейс, смотрящий в Интернет
interface eth0
# arbitrary unique number from 0 to 255
# used to differentiate multiple instances of vrrpd
# running on the same NIC (and hence same socket).
# НУЖНО УКАЗАТЬ: вместо 108 -> номер экземпляра vrrp_instance
virtual_router_id 108
# for electing MASTER, highest priority wins.
# to be MASTER, make this 50 more than on other machines.
# НУЖНО УКАЗАТЬ: вместо 64 -> приоритет экземпляра vrrp_instance
priority 64
preempt_delay 5 # Seconds
# VRRP Advert interval in seconds (e.g. 0.92) (use default)
advert_int 1
# НУЖНО УКАЗАТЬ: вместо 192.0.2.2 -> IPv4-адрес интерфейса, смотрящего в Интернет
unicast_src_ip 192.0.2.2
authentication {
auth_type PASS
# НУЖНО УКАЗАТЬ: ksedimret -> заменить на безопасный пароль
auth_pass ksedimret
}
virtual_ipaddress {
# В этой секции происходит назначение IP-алиаса
# НУЖНО УКАЗАТЬ: вместо 192.0.2.1/24 -> виртуальный IPv4-адрес и сетевой префикс с интерфейса, смотрящего в Интернет
# НУЖНО УКАЗАТЬ: вместо eth0 -> интерфейс, смотрящий в Интернет
# НУЖНО УКАЗАТЬ: вместо eth0:108 -> интерфейс, смотрящий в Интернет:4-й октет виртуального IPv4-адреса
192.0.2.1/24 dev eth0 label eth0:108
}
track_script {
check_httpd
}
}