Игры с 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
}
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