Keepalived. Almalinux 8. Installation and Configuration

Материал из Wiki
Версия от 08:40, 28 июня 2023; Cless (обсуждение | вклад) (Новая страница: «= Description = Реализация протокола VRRP на Linux = Links = https://habr.com/ru/post/524688/ = Installation = == All servers == <code>dnf...»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

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.* на всех машинах