Keepalived. Almalinux 8. Installation and Configuration
Description
Реализация протокола VRRP на Linux
Links
https://habr.com/ru/post/524688/
Installation
All servers
dnf install -y keepalived
mv -f /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
nano /etc/keepalived/keepalived-notify.sh
#!/bin/sh umask -S u=rwx,g=rx,o=rx exec echo "[$(date -Iseconds)]" "$0" "$@" >>"/var/run/keepalived.$1.$2.state"
chmod +x /etc/keepalived/keepalived-notify.sh
Configuring
Блок vrrp_script
Скрипт, который демон keepalived будет использовать для определения работоспособности своего сервера. Если этот скрипт вернет ошибку, то демон перейдет в состояние FAIL, общий IP прыгнет на другой сервер. В этом же блоке описывается периодичность выполнения healthchek-ов и указывается пользователь, от имени которого запускается скрипт. В нашем случае используется опрос порта Kubernetes 6443/TCP. Но можно использовать мониторинг любого другого критично важного сервиса, падение которого включает перепрыгивание общего IP на другой сервер.
Блок vrrp_instance
state - задает начальное состояние сервера BACKUP или MASTER. В режиме nopreempt единственное допустимое значение — BACKUP
interface - указывает, на каком сетевом интерфейсе будет поднят VIP
virtual_router_id - уникальный идентификатор роутера VRRP. Возможные значения от 1 до 255. У всех узлов кластера это значение должно быть одинаковым. Рекомендуется в качестве router_id использовать последний байт VIP
priority - задает приоритет данного экземпляра при выборе мастера. Мастером назначается сервер, у которого значение параметра priority выше. Если у нескольких серверов priority одинаковый, то мастер будет выбран случайным образом.
advert_int - определяет, с какой периодичностью мастер должен сообщать остальным о себе. Если по истечению данного периода сервера не получат от мастера широковещательное уведомление, то они инициируют выборы нового мастера.
nopreempt - означает, что если мастер пропал из сети, и был выбран новый мастер с меньшим приоритетом, то по возвращении старшего мастера, он останется в состоянии BACKUP. Т. е. если вы перезагрузили мастер, то он больше мастером не станет, пока новый мастер не отвалится. Если вы предпочитаете, чтобы мастером был какой-то конкретный сервер, то замените настройку nopreempt на preempt_delay
notify - задает хук-скрипт, который будет вызываться при каждом изменении состояния сервера, и имя пользователя, от имени которого данный скрипт будет выполняться.
authentication - задает пароль, длиной до 8 символов, который будет защищать кластер от случайных коллизий с другими серверами в локальной сети (Сейчас не советуют использовать этот параметр)
virtual_ipaddress - задает VIP - общий IP для серверов, который прыгает с одного сервера на другой
track_script - указывает на описание скрипта, осуществляющего healthcheck.
SERVER-1
nano /etc/keepalived/keepalived.conf
global_defs {
enable_script_security
}
vrrp_script myhealth {
script "curl -k https://127.0.0.1:6443"
interval 10
user nobody
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 180
priority 100
advert_int 1
nopreempt
notify /etc/keepalived/keepalived-notify.sh root
# authentication {
# auth_type PASS
# auth_pass KPSjXfRG
# }
virtual_ipaddress {
192.168.199.180
}
track_script {
myhealth
}
}
SERVER-2
nano /etc/keepalived/keepalived.conf
global_defs {
enable_script_security
}
vrrp_script myhealth {
script "curl -k https://127.0.0.1:6443"
interval 10
user nobody
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 180
priority 90
advert_int 1
nopreempt
notify /etc/keepalived/keepalived-notify.sh root
# authentication {
# auth_type PASS
# auth_pass KPSjXfRG
# }
virtual_ipaddress {
192.168.199.180
}
track_script {
myhealth
}
}
SERVER-3
nano /etc/keepalived/keepalived.conf
global_defs {
enable_script_security
}
vrrp_script myhealth {
script "curl -k https://127.0.0.1:6443"
interval 10
user nobody
}
vrrp_instance VI_1 {
state BACKUP
interface ens32
virtual_router_id 180
priority 80
advert_int 1
nopreempt
notify /etc/keepalived/keepalived-notify.sh root
# authentication {
# auth_type PASS
# auth_pass KPSjXfRG
# }
virtual_ipaddress {
192.168.199.180
}
track_script {
myhealth
}
}
Test
1
- выключаем машину с самым высоким приоритетом
- общий IP присвоится машине со следующим по высоте приоритетом
2
- убиваем сервис на машине с высшим приоритетом, который открывает порт 6443
- общий IP присвоится машине со следующим по высоте приоритетом
Логи смотреть в keepalived.INSTANCE.* на всех машинах