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