gladilov.org.ru gladilov.org.ua

Игры с keepalived

В продолжение поста о системном демона Keepalived, позволяющем организовать отказоустойчивость сервиса и балансировку нагрузки. Возник вопрос — как узнать, какая нода в каком состоянии запущена? Для этого я создал две ВМ, к примеру:
d1 IP=172.16.32.31/24
d2 IP=172.16.32.32/24

Конфигурация d1: Показать

global_defs {
   notification_email { root@localhost }
   router_id PD
    vrrp_garp_master_refresh 30
    vrrp_garp_master_refresh_repeat 2
}
vrrp_instance TEST {
    state MASTER
!    state BACKUP
    interface <интерфейс>
    virtual_router_id 101
    priority 103
!    priority 102
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass <пароль>
    }
    virtual_ipaddress { 172.16.32.30/24 dev <интерфейс> label <интерфейс>:vrrp }
    notify /opt/notify.sh
}

Конфигурация d2: Показать

global_defs {
   notification_email { root@localhost }
   router_id PD
    vrrp_garp_master_refresh 30
    vrrp_garp_master_refresh_repeat 2
}
vrrp_instance TEST {
!    state MASTER
    state BACKUP
    interface <интерфейс>
    virtual_router_id 101
!    priority 103
    priority 102
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass <пароль>
    }
    virtual_ipaddress { 172.16.32.30/24 dev <интерфейс> label <интерфейс>:vrrp }
    notify /opt/notify.sh
}

Для контроля текущей конфигурации (состояния) демона keepalived используется скрипт /opt/notify.sh: Показать

#!/bin/bash
echo $1 $2 is in $3 state > /var/run/keepalive.$1.$2.state

Ещё полезный скрипт-однострочник:: Показать

conf=/etc/keepalived/keepalived.conf && vip=$(expr "$(cat $conf)" : '.*\bvirtual_ipaddress\s*{\s*\(.*\)/*}') && vip=`expr "$vip" : '\([^ ]*\)' | sed 's/\./\\\\./g'` && if ip addr | grep -q "$vip"; then echo Primary; else echo Secondary; fi

Популярное
Наверх