Назад | Перейти на главную страницу

HAproxy: запускать скрипт при изменении проверки работоспособности

Я настроил конфигурацию 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/ .