Redis Sentinel — алерт когда master сменился
Sentinel сделал failover в 3 ночи, никто не заметил. Хотим узнавать в момент смены master, а не на следующей неделе.
Рецепт
#!/usr/bin/env bash
# Tracks the current Sentinel-elected master and screams when it changes.
SENTINEL="${SENTINEL:-127.0.0.1:26379}"
NAME="${SENTINEL_MASTER_NAME:-mymaster}"
STATE_FILE="${STATE_FILE:-/var/lib/enterno/redis-master.txt}"
mkdir -p "$(dirname "$STATE_FILE")"
CUR=$(redis-cli -h "${SENTINEL%:*}" -p "${SENTINEL#*:}" \
sentinel get-master-addr-by-name "$NAME" | tr '\n' ':' | sed 's/:$//')
[ -z "$CUR" ] && { echo "no-sentinel"; exit 1; }
PREV=$(cat "$STATE_FILE" 2>/dev/null || echo "")
echo "$CUR" > "$STATE_FILE"
if [ -n "$PREV" ] && [ "$PREV" != "$CUR" ]; then
echo "failover $PREV -> $CUR"
exit 1
fi
echo "ok $CUR"
То же самое в Enterno.io
Cron каждую минуту + Enterno-монитор с keyword "ok" даст моментальный пейджер при failover. Дополнительно heartbeat на сам Sentinel — чтобы знать что и Sentinel жив, не просто Redis.
Похожие рецепты
Slave-Redis отстаёт от master — read-after-write возвращает старые данные. Стандартного алерта нет, нужен внешний.
Нужно ловить момент, когда реплика начала отставать от мастера больше чем на 10 секунд.
Secondary в replica set отстаёт от primary, через минуту приложение начнёт читать stale-данные. Нужен HTTP-эндпойнт со словом "ok" / "lag".