Skip to content

Redis Sentinel — алерт когда master сменился

Sentinel сделал failover в 3 ночи, никто не заметил. Хотим узнавать в момент смены master, а не на следующей неделе.

Рецепт

bash
#!/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.

Настроить HTTP monitor → ← Все рецепты

Похожие рецепты

Нужно ловить момент, когда реплика начала отставать от мастера больше чем на 10 секунд.