CentOS 8에서 센티넬을 사용하여 고가용성을 위한 Redis 설정 – 파트 2

RedisRedis Sentinel 분산 시스템을 통해 고가용성을 제공합니다. SentinelRedis 인스턴스를 모니터링하고 장애를 감지하며 역할 전환을 자동으로 수행하여 어떤 종류의 장애에도 저항할 수 있는 Redis 배포를 가능하게 합니다.

이는 Redis 인스턴스(마스터 및 레플리카)의 모니터링을 지원하며, 스크립트를 통해 다른 서비스/프로세스 또는 시스템 관리자에게 알림을 제공하고, 마스터가 다운될 때 레플리카를 마스터로 승격하는 자동 장애 조치 및 클라이언트가 특정 서비스를 제공하는 현재 마스터를 찾는 구성을 제공합니다.

이 문서는 CentOS 8에서 Redis Sentinel을 사용하여 고가용성을 갖춘 Redis를 설정하는 방법을 설명하며, Sentinel 구성, 설정 상태 확인 및 Sentinel 장애 조치 테스트를 포함합니다.

전제 조건:

  1. CentOS 8에서 Redis 복제 설정(클러스터 모드 비활성화)하는 방법 – 파트 1

테스트 환경 설정

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 Setup Logical Diagram

Redis Sentinel 문서에 따르면, 견고한 배포를 위해 적어도 세 개의 Sentinel 인스턴스가 필요합니다. 위의 설정을 고려할 때, 만약 마스터가 실패한다면, Sentinels2Sentinel3은 실패에 대해 합의하고 장애 교대를 승인할 수 있으므로 클라이언트 작업을 계속할 수 있습니다.

단계 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
Start Redis Sentinel Service

단계 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
Set Sentinel Listen Interface and Port

다음으로 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
Set Redis Master to Monitor

중요: Sentinel 모니터 명령문은 Sentinel auth-pass 명령문 앞에 놓여야 합니다. 이렇게 하지 않으면 Sentinel 서비스를 다시 시작할 때 오류 ” 지정된 이름의 마스터가 없음. “이 발생합니다.

Redis 마스터를 모니터링하는 경우 암호가 설정되어 있으면 (우리 경우 마스터에 설정되어 있음), 보호된 인스턴스와 통신할 수 있도록 암호를 제공하십시오.

 
sentinel auth-pass mymaster Securep@55Here
Set Master Auth Password

그런 다음 마스터(또는 연결된 복제본 또는 Sentinel)가 ” 주관적으로 다운 ” 상태로 고려되기 위해 마스터가 연락을 받을 수 없는 시간을 밀리초 단위로 설정하십시오.

다음 구성은 우리가 핑으로부터 응답을받지 않을 때 마스터가 즉시 실패로 간주됨을 의미합니다 (1 초는 1000 밀리초와 동일함).

sentinel down-after-milliseconds mymaster 5000
Set Down Time for Master

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

sentinel failover-timeout mymaster 180000
Set Fail Over Timeout

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

sentinel parallel-syncs mymaster 1
Set Number of Parallel Sync Replicas

Redis Replica1Sentinel2, 그리고 Reddis Replica1Sentinel2의 구성 파일이 동일해야 함에 유의하십시오.

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-sentinelsknown-replica 문이 표시됩니다.

Auto Generated Config in Master

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

Auto Generated Config in Replica1
Auto Generated Config in Replica2

또한 장애 조치 중에 복제본이 마스터 상태로 승격되거나 설정에서 새 Sentinel이 발견될 때마다 Sentinel 구성도 재작성/업데이트됩니다.

단계 3: Redis Sentinel 설정 상태 확인

12. 이제 마스터에서 Sentinel 상태/정보를 확인하려면 다음과 같이 info sentinel 명령을 사용합니다.

# redis-cli -p 26379 info sentinel

다음 스크린샷에서 확인할 수 있는 명령의 출력으로, 우리에게는 두 개의 복제본/슬레이브와 세 개의 센티널이 있습니다.

Check Sentinel Info on Master

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

# redis-cli -p 26379 sentinel master mymaster
Show Detailed Info About Sentinel Master

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
Get the Address of Master by Name on Slaves

단계 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입니다.

Test Redis Sentinel Failover

당신은 Redis Sentinel 문서에서 더 많은 정보를 얻을 수 있습니다. 그러나 의견을 공유하거나 질문이 있으면 아래 피드백 양식이 저희와의 연결 고리가 됩니다.

이 시리즈의 다음과 마지막 부분에서는 CentOS 8에서 Redis 클러스터를 설정하는 방법을 살펴볼 것입니다. 이것은 처음 두 개의 독립적인 기사가 될 것입니다.

Source:
https://www.tecmint.com/setup-redis-high-availability-with-sentinel-in-centos-8/