Я настроил конфигурацию haproxy с бэкэндом с двумя серверами, которые выглядят так:
...
default
option log-health-checks
...
mailers mta
mailer smtp1 127.0.0.1:25
...
backend s_api
balance roundrobin
option httpchk GET /sites?site=q&limit=1
http-check expect rstatus (2|3)[0-9][0-9]
server s1_a 1.2.3.4:3600 check inter 5s fall 4 rise 1
server s2_b 1.2.3.5:3600 check backup
timeout queue 60s
timeout server 60s
timeout connect 60s
email-alert mailers mta
email-alert level notice
email-alert from haproxy@example.com
email-alert to ops@example.com
Теперь меня замечают по электронной почте, когда сервер снова выходит из строя. Что я хотел бы заархивировать, так это запускать локальный сценарий bash, когда сервер работает, и другой, когда сервер выходит из строя.
Как это могло быть сделано?
Я бы, вероятно, сделал это с помощью скрипта внешней проверки и использовал бы его для управления значениями роста и падения. Затем, когда вы встретите значение роста или падения, вы можете запустить свой собственный сценарий. Установите рост и падение в вашей конфигурации haproxy равным 1 и измените проверку на внешний
external-check command ping.sh
server s1_a 1.2.3.4:3600 check inter 5s fall 1 rise 1
server s2_b 1.2.3.5:3600 check backup
timeout queue 60s
timeout server 60s
timeout connect 60s
Тогда в качестве грубого примера с внешней проверкой ping
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# Set the maximum time in seconds to allow ping to run, 1-10 is a sensible range.
TMEOUT=1
# Interval between pings in seconds, 0.2-1 is a sensible range.
INT=1
# Number of pings to send.
NUM=1
RIP=$(echo ${3}))
VIP=$(echo ${1})
#Optionally provides source IP for Ping
SRC=
if [ "$SRC" != '' ]; then
SRC_IP="-I $SRC"
fi
if ping ${SRC_IP} -n -w${TMEOUT} -i${INT} -c${NUM} ${RIP} >& /dev/null; then
COUNTER="$(cat count)"
if [COUNTER != 0]; then
//run up script here
fi
echo 0 >> count
exit ${?}
else
COUNTER="$(cat count)"
if [COUNTER >= 3]; then
//run down script here
fi
COUNTER=$[COUNTER + 1]
echo COUNTER >> count
exit ${?}
fi
Вы также можете сделать это с помощью lua, но я не рассматривал это. Я сделал несколько других вариантов для предупреждений по электронной почте, таких как опрос сокета статистики или взлом haproxy, которые можно было бы адаптировать, но внешняя проверка, вероятно, здесь будет работать лучше всего. Однако, если вы хотите попробовать их, вы можете найти их здесь https://www.loadbalancer.org/blog/3-ways-to-send-haproxy-health-check-email-alerts/ .