Download PDF
Download page Настройка менеджера ВРМ в режиме высокой доступности.
Настройка менеджера ВРМ в режиме высокой доступности
Настройка менеджера ВРМ в режиме высокой доступности
Настройка выполняется после установки программного комплекса в распределенной конфигурации.
Последовательность настройки узлов с менеджером ВРМ следующая:
- на узле, выбранном в качестве
master
, помимо уже запущенных служб, запустить только службуtermidesk-taskman
, не добавляя ее в раздел автоматической загрузки:
:~$ sudo systemctl start termidesk-taskman
- на узлах
master
иslave
установить пакеты программ для организации высокой доступности:
:~$ sudo apt install -y keepalived ipset
где:
-y
- ключ для пропуска подтверждения установки;
- на узлах
master
иslave
создать каталог/etc/keepalived/
(если каталог ранее не был создан):
:~$ sudo mkdir -p /etc/keepalived
где:
-p
- ключ для создания подкаталогов в указанном пути, если их не существует;
- на узлах
master
иslave
в каталоге/etc/keepalived/
создать пустые файлыkeepalived.conf
(файл настроек режима высокой доступности) иnotify.sh
(управление переключениями режимов высокой доступности):
:~$ sudo touch /etc/keepalived/keepalived.conf
:~$ sudo touch /etc/keepalived/notify.sh
- отредактировать созданный файл
/etc/keepalived/keepalive
d.conf
, приведя его к следующему виду (по очереди на каждом из узлов):
Значения параметров в файле keepalived.conf
приведены в качестве примера. Значения должны быть заменены на актуальные, соответствующие схеме адресации, принятой в инфраструктуре предприятия.
global_defs {
router_id NAME_OF_ROUTER_ID # НУЖНО УКАЗАТЬ: 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).
# НУЖНО УКАЗАТЬ: вместо 106 -> номер экземпляра vrrp_instance
virtual_router_id 106
# 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
# НУЖНО УКАЗАТЬ: вместо IP_ADDRESS_OF_THIS_HOST -> IPv4-адрес интерфейса, смотрящего в Интернет
unicast_src_ip IP_ADDRESS_OF_THIS_HOST
authentication {
auth_type PASS
# НУЖНО УКАЗАТЬ: ksedimret -> заменить на безопасный пароль
auth_pass ksedimret
}
virtual_ipaddress {
# НУЖНО УКАЗАТЬ: вместо VIRTUAL_IP_ADDREESS/MASK -> виртуальный IPv4-адрес и сетевой префикс с интерфейса, смотрящего в Интернет
# НУЖНО УКАЗАТЬ: вместо eth0 -> интерфейс, смотрящий в Интернет
# НУЖНО УКАЗАТЬ: вместо eth0:<значение> -> интерфейс, смотрящий в Интернет:4-й октет виртуального IPv4-адреса
VIRTUAL_IP_ADDREESS/MASK dev eth0 label eth0:<значение>
}
track_script {
check_httpd
}
}
где:
script_user
- значение этого параметра соответствует наименованию пользователя, от имени которого запускается служба keepalived
(обычно - root
);
NAME_OF_ROUTER_ID
- имя зоны маршрутизации VRRP (общее для узлов master
и slave
);
IP_ADDREESS_OF_THIS_HOST
- текущий статический IP-адрес узла, на котором запускается служба keepalived
;
VIRTUAL_IP_ADDRESS/MASK
- виртуальный статический IP-адрес и маска (общие для узлов master
и slave
);
eth0:<значение>
- значение четвертого октета виртуального IPv4-адреса. Например, если используется виртуальный статический IP-адрес 192.0.2.30, то данный параметр примет значение eth0:30
;
В рамках одной распределенной установки значение NAME_OF_ROUTER_ID
параметра router_id
должно быть идентичным. Если в сети или в одном VLAN присутствуют несколько распределенных установок Termidesk, то значение NAME_OF_ROUTER_ID
параметра router_id
должно быть уникальным для каждого экземпляра установки.
- по очереди на каждом из узлов
master
иslave
отредактировать созданный файл/etc/keepalived/notify.sh
, приведя его к следующему виду:
#!/bin/sh -e
SELF_BIN=$(realpath ${0})
SELF_DIR=$(dirname ${SELF_BIN})
TYPE=${1}
NAME=${2}
STATE=${3}
PRIORITY=${4}
TASKMAN_SYSTEMCTL_NAME="termidesk-taskman"
TASKMAN_SYSTEMCTL_DESCRIPTION="Termidesk-VDI Taskman daemon"
TASKMAN_SYSTEMCTL_PIDFILE="/run/termidesk-taskman/pid"
msg2log () {
logger -i "Termidesk: ${1}"
}
taskman_stop () {
msg2log "Stopping ${TASKMAN_SYSTEMCTL_NAME} service"
systemctl is-active -q ${TASKMAN_SYSTEMCTL_NAME} && systemctl stop -q ${TASKMAN_SYSTEMCTL_NAME}
}
taskman_start () {
msg2log "Starting ${TASKMAN_SYSTEMCTL_NAME} service"
systemctl is-active -q ${TASKMAN_SYSTEMCTL_NAME} || systemctl start -q ${TASKMAN_SYSTEMCTL_NAME}
}
# VRRP event type: INSTANCE, name: lsb_40, state: BACKUP, priority: 64
msg2log "VRRP event type: ${TYPE}, name: ${NAME}, state: ${STATE}, priority: ${PRIORITY}"
case ${STATE} in
BACKUP)
[ "${NAME}" = "${TASKMAN_SYSTEMCTL_NAME}" ] && taskman_stop
;;
FAULT)
[ "${NAME}" = "${TASKMAN_SYSTEMCTL_NAME}" ] && taskman_stop
;;
MASTER)
[ "${NAME}" = "${TASKMAN_SYSTEMCTL_NAME}" ] && taskman_start
;;
*)
msg2log "Error: unknown state ${STATE}"
exit 1
;;
esac
exit 0
- на узлах
master
иslave
сделать файлnotify.sh
исполняемым:
:~$ sudo chmod +x /etc/keepalived/notify.sh
- на узлах
master
иslave
добавить в автоматическую загрузку и запустить сервисkeeaplived
:
:~$ sudo systemctl enable keepalived
:~$ sudo systemctl start keepalived