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
BASHотредактировать созданный файл
/etc/keepalived/keepalive
d.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 } }
BASHгде:
script_user
- значение этого параметра соответствует наименованию пользователя, от имени которого запускается служба keepalived
(обычно - root
);
NAME_OF_ROUTER_ID
- имя зоны маршрутизации VRRP (общее для обоих узлов);
IP_ADDREESS_OF_THIS_HOST
- текущий статический IP-адрес узла, на котором запускается служба keepalived
;
VIRTUAL_IP_ADDRESS/MASK
- виртуальный статический IP-адрес и маска (общие для узлов master
и slave
);
eth0:<значение>
- значение четвертого октета виртуального IPv4-адреса. Например, если используется виртуальный статический IP-адрес 192.0.2.30, то данный параметр примет значение eth0:30
;
по очереди на каждом из узлов
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
BASHна узлах
master
иslave
сделать файлnotify.sh
исполняемым::~$ sudo chmod +x /etc/keepalived/notify.sh
BASHна узлах
master
иslave
добавить в автоматическую загрузку и запустить сервисkeeaplived
::~$ sudo systemctl enable keepalived :~$ sudo systemctl start keepalived
BASH