Redis는 Redis Sentinel 분산 시스템을 통해 고가용성을 제공합니다. Sentinel는 Redis 인스턴스를 모니터링하고 장애를 감지하며 역할 전환을 자동으로 수행하여 어떤 종류의 장애에도 저항할 수 있는 Redis 배포를 가능하게 합니다.
이는 Redis 인스턴스(마스터 및 레플리카)의 모니터링을 지원하며, 스크립트를 통해 다른 서비스/프로세스 또는 시스템 관리자에게 알림을 제공하고, 마스터가 다운될 때 레플리카를 마스터로 승격하는 자동 장애 조치 및 클라이언트가 특정 서비스를 제공하는 현재 마스터를 찾는 구성을 제공합니다.
이 문서는 CentOS 8에서 Redis Sentinel을 사용하여 고가용성을 갖춘 Redis를 설정하는 방법을 설명하며, Sentinel 구성, 설정 상태 확인 및 Sentinel 장애 조치 테스트를 포함합니다.
전제 조건:
테스트 환경 설정
Master Server and Sentinel1: 10.42.0.247 Redis Replica1 and Sentinel2: 10.42.0.21 Redis Replica2 and Sentinel3: 10.42.0.34

Redis Sentinel 문서에 따르면, 견고한 배포를 위해 적어도 세 개의 Sentinel 인스턴스가 필요합니다. 위의 설정을 고려할 때, 만약 마스터가 실패한다면, Sentinels2와 Sentinel3은 실패에 대해 합의하고 장애 교대를 승인할 수 있으므로 클라이언트 작업을 계속할 수 있습니다.
단계 1: Redis Sentinel 서비스 시작 및 활성화
1. CentOS 8에서는 Redis Sentinel 서비스가 Redis 서버와 함께 설치됩니다(우리가 이미 Redis 복제 설정에서 수행한 작업입니다).
Redis sentinel 서비스를 시작하고 시스템 부팅 시 자동으로 시작하도록 설정하려면 다음 systemctl 명령을 사용하세요. 또한 모든 노드에서 상태를 확인하여 실행 중인지 확인합니다:
# systemctl start redis-sentinel # systemctl enable redis-sentinel # systemctl status redis-sentinel

단계 2: 모든 Redis 노드에서 Redis Sentinel 구성
2. 이 섹션에서는 모든 노드에서 Sentinel을 구성하는 방법에 대해 설명합니다. Sentinel 서비스는 Redis 서버와 유사한 구성 형식을 갖습니다. 구성하려면 /etc/redis-sentinel.conf 자체 문서화된 구성 파일을 사용하십시오.
먼저 원본 파일의 백업을 만들고 편집할 수 있도록 엽니다.
# cp /etc/redis-sentinel.conf /etc/redis-sentinel.conf.orig # vi /etc/redis-sentinel.conf
기본적으로 Sentinel은 포트 26379에서 수신 대기합니다. 모든 인스턴스에서 이를 확인하십시오.
port 26379

다음으로 Sentinel에게 마스터를 모니터링하고 적어도 2 개의 쿼럼 Sentinel이 동의하는 경우에만 “객관적으로 다운” 상태로 고려하도록 지시하십시오. ” mymaster “를 사용자 정의 이름으로 대체할 수 있습니다.
#On Master Server and Sentinel1 sentinel monitor mymaster 127.0.0.1 6379 2 #On Replica1 and Sentinel2 sentinel monitor mymaster 10.42.0.247 6379 2 #On Replica1 and Sentinel3 sentinel monitor mymaster 10.42.0.247 6379 2

중요: Sentinel 모니터 명령문은 Sentinel auth-pass 명령문 앞에 놓여야 합니다. 이렇게 하지 않으면 Sentinel 서비스를 다시 시작할 때 오류 ” 지정된 이름의 마스터가 없음. “이 발생합니다.
Redis 마스터를 모니터링하는 경우 암호가 설정되어 있으면 (우리 경우 마스터에 설정되어 있음), 보호된 인스턴스와 통신할 수 있도록 암호를 제공하십시오.
sentinel auth-pass mymaster Securep@55Here

그런 다음 마스터(또는 연결된 복제본 또는 Sentinel)가 ” 주관적으로 다운 ” 상태로 고려되기 위해 마스터가 연락을 받을 수 없는 시간을 밀리초 단위로 설정하십시오.
다음 구성은 우리가 핑으로부터 응답을받지 않을 때 마스터가 즉시 실패로 간주됨을 의미합니다 (1 초는 1000 밀리초와 동일함).
sentinel down-after-milliseconds mymaster 5000

다음으로 밀리초 단위로 장애 조치 시간을 설정하십시오. 이는 여러 가지를 정의하는 많은 것을 결정합니다 (구성 파일의 매개 변수에 대한 설명서를 읽으십시오).
sentinel failover-timeout mymaster 180000

8. 그런 다음 장애 조치 후 새 마스터를 사용할 수 있는 복제본 수를 설정합니다. 두 개의 복제본이 있으므로 하나의 복제본을 설정하고 다른 하나는 새 마스터로 승격됩니다.
sentinel parallel-syncs mymaster 1

Redis Replica1 및 Sentinel2, 그리고 Reddis Replica1 및 Sentinel2의 구성 파일이 동일해야 함에 유의하십시오.
9. 그런 다음 모든 노드에서 최근 변경 사항을 적용하기 위해 Sentinel 서비스를 다시 시작합니다.
# systemctl restart redis-sentinel
10. 그런 다음 모든 노드의 방화벽에서 포트 26379를 열어 Sentinel 인스턴스가 통신을 시작하고 다른 Sentinel 인스턴스에서 연결을 수락할 수 있도록 합니다. 이를 위해 방화벽-cmd를 사용합니다.
# firewall-cmd --zone=public --permanent --add-port=26379/tcp # firewall-cmd --reload
11. 모든 복제본이 자동으로 발견됩니다. 중요한 점은 Sentinel이 복제본에 대한 추가 정보로 구성을 자동으로 업데이트합니다. 각 인스턴스의 Sentinel 구성 파일을 열어 확인할 수 있습니다.
예를 들어, 마스터의 구성 파일 끝을 보면 다음 스크린샷에 표시된대로 known-sentinels 및 known-replica 문이 표시됩니다.

replica1 및 replica2에서도 동일한 경우임을 유의하십시오.


또한 장애 조치 중에 복제본이 마스터 상태로 승격되거나 설정에서 새 Sentinel이 발견될 때마다 Sentinel 구성도 재작성/업데이트됩니다.
단계 3: Redis Sentinel 설정 상태 확인
12. 이제 마스터에서 Sentinel 상태/정보를 확인하려면 다음과 같이 info sentinel 명령을 사용합니다.
# redis-cli -p 26379 info sentinel
다음 스크린샷에서 확인할 수 있는 명령의 출력으로, 우리에게는 두 개의 복제본/슬레이브와 세 개의 센티널이 있습니다.

13. 마스터인 mymaster에 대한 자세한 정보를 표시하려면 sentinel master 명령을 사용합니다.
# redis-cli -p 26379 sentinel master mymaster

14. 복제본/슬레이브와 센티널에 대한 자세한 정보를 표시하려면 각각 sentinel slaves 명령과 sentinel sentinels 명령을 사용합니다.
# redis-cli -p 26379 sentinel slaves mymaster # redis-cli -p 26379 sentinel sentinels mymaster
15. 다음으로, sentinel get-master-addr-by-name 명령을 사용하여 슬레이브 인스턴스에서 마스터의 이름으로 주소를 요청합니다.
출력은 현재 마스터 인스턴스의 IP 주소와 포트여야 합니다:
# redis-cli -p 26379 sentinel get-master-addr-by-name mymaster

단계 4: Sentinel 장애 조치 테스트
16. 마지막으로, 우리의 Sentinel 설정에서 자동 장애 조치를 테스트해 봅시다. Redis/Sentinel 마스터에서, Redis 마스터(포트 6379에서 실행)를 60초 동안 잠들게 만듭니다. 그런 다음 다음과 같이 복제본/슬레이브에서 현재 마스터의 주소를 쿼리합니다.
# redis-cli -p 6379 127.0.0.1:6379> AUTH Securep@55Here 127.0.0.1:6379> debug sleep 60 # redis-cli -p 26379 sentinel get-master-addr-by-name mymaster # redis-cli -p 26379 sentinel get-master-addr-by-name mymaster
쿼리의 출력을 보면, 새로운 마스터는 현재 복제본/슬레이브2이며 다음 스크린샷에서 확인할 수 있는 대로 IP 주소는 10.42.0.34입니다.

당신은 Redis Sentinel 문서에서 더 많은 정보를 얻을 수 있습니다. 그러나 의견을 공유하거나 질문이 있으면 아래 피드백 양식이 저희와의 연결 고리가 됩니다.
이 시리즈의 다음과 마지막 부분에서는 CentOS 8에서 Redis 클러스터를 설정하는 방법을 살펴볼 것입니다. 이것은 처음 두 개의 독립적인 기사가 될 것입니다.
Source:
https://www.tecmint.com/setup-redis-high-availability-with-sentinel-in-centos-8/