Поддерживать несколько состояний TCP_CHECK
У меня есть несколько веб-серверов под двумя серверами keepalived, и для проверки работоспособности реального веб-сервера я использую этот фрагмент конфигурации keepalived
TCP_CHECK # healthchecker: HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { connect_timeout 3 # Время ожидания соединения, сек nb_get_retry 3 # число повторных попыток delay_before_retry 3 connect_port 80 }
Но помимо apache мне также нужно проверить, работает ли mongos на этом сервере, и если одно из приложений не подходит, мне нужно вытащить сервер из списка реальных серверов? Итак, как я могу добавить логические выражения в конфигурации keepalived.
1 ответ
Решение
Используйте MISC_CHECK:
MISC_CHECK {
misc_path "/etc/keepalived/servicecheck.sh"
}
Где /etc/keepalived/servicecheck.sh - это сценарий оболочки, который выполняет всю полезную проверку за вас:
#!/bin/sh
# Check if mongo is running
mongo --eval "db.stats()"
RESULT=$? # returns 0 if mongo eval succeeds
if [ $RESULT -ne 0 ]; then
echo "mongodb not running"
exit 1
else
echo "mongodb running!"
fi
# Check if apache is running
ps auxw | grep apache2 | grep -v grep > /dev/null
if [ $? != 0 ]
then
exit 1
fi
Это всего лишь пример. Вы можете создать любое количество логики в вашем скрипте. Любое возвращаемое состояние 1 приведет к тому, что keepalived выведет сервер из строя.