Redis 의 Auto Failover HA 솔루션으로는 Sentinel 이 있습니다.
Master가 down 됐는지 Sentinel 간 sdown,odown 같은 투표과정을 통해 과반수 이상의 Sentinel이 Master가 Down됐다고 판단하면 다른 Slave 를 Master로 승격시키게 됩니다.
Failover 가 발생했음을 알기 위해서 alertmanager 같은 오픈 소스를 사용하거나 별도로 스크립트를 설정해놔도 되겠지만
기본적인 sentinel의 기능으로 Failover 가 발생했음을 noti 할 수 있는 ‘sentinel notification-script’ 라는 기능이 있습니다.
사실 Failover만을 알람 받기 위한 기능은 아니고 Sentinel 의 여러 Warning 이벤트들을 noti 해주는 기능인데 주로 Failover를 위해 사용합니다.

sentinel.conf 파일에서 아래 같은 항목을 볼 수 있는데요

  • sentinel.conf
$ cat sentinel.conf

.
.
.
sentinel notification-script testredis /home1/redisuser/redis_6379/notify.sh

=> 의미는 testredis 라는 이름의 sentinel cluster 에서 warning 이벤트가 발생하면 /home1/redisuser/redis_6379/notify.sh 스크립트를 수행해라! 라는 의미입니다.

  • notify.sh
#!/bin/sh
#/home1/redisuser/redis_6379/notify.sh

MAIL_FROM="kimdubi@gmail.com"
MAIL_TO=("kimdubi@gmail.com")

timestamp=$(date +%D-%T.%3N)

if [ "$#" = "2" ]; then
    if [ "${1}" = "+try-failover"  -o  "${1}" = "+failover-end" ];
    then

    mail_body=`cat << EOB
============================================
레디스 서버 장애조치(failover)가 발생했습니다.
레디스 서버 또는 센티널을 확인해보세요.
============================================
이벤트 타입: ${1}
이벤트 설명: ${2}
이메일보낸 시각: $timestamp

이것은 센티널 알림 기능에서 보낸 메일입니다.

EOB`
    mail_subject=`echo ${2} | cut -d' ' -f2`

    for MAIL_TO in ${MAIL_TO[@]}; do
        echo "${mail_body}" | mailx -S smtp="사내 smtp서버" -r "${MAIL_FROM}" -s "Redis ${mail_subject} Notification" "${MAIL_TO}"
    done

    fi
fi

=> 위와 같은 notify.sh 스크립트가 수행 되면 두가지 이벤트에 대해 메일을 받을 수 있습니다.

  • +try-failover : Failover 시도
  • +failover-end : Failover 정상 완료
    물론 cloud 서비스 등에서 제공하는 sms 기능을 사용하여 메일뿐만 아니라 sms 를 받을 수 있도록 스크립트에 추가할 수 있습니다.
    만약 +try-failover 메일만 계속 오고 +failover-end 가 안온다면 뭔가 문제가 있는 상황이므로 살펴봐야합니다.