상황
아래와 같은 구조에서
레디스 Failover 테스트 중에 failover-abort-no-good-slave 오류가 발생했습니다.
원인
레디스 접속을 위해서는 암호를 입력하도록 설정된 상태입니다.
그러나 센티넬에서는 레디스 인증관련 암호설정이 없었습니다.
레디스 conf 파일
requirepass "P@ssword" masterauth "P@ssword" |
센티넬 conf 파일
# sentinel auth-pass TEST P@ssword |
시나리오 - 해결방법
센티넬 conf 파일에 auth-pass 설정이 안됨
센티넬에서 레디스 TEST 인스턴스의 암호가 없기 때문에
접속하여 replication 정보를 얻어올 수 없었고, failover-abort-no-good-slave 로그가 기록되었습니다.
+new-epoch 7 +try-failover master TEST 192.168.56.101 6161 +vote-for-leader c2ee585da2dbb99daa5cc0ec27aa7b3fafa57429 7 +elected-leader master TEST 192.168.56.101 6161 +failover-state-select-slave master TEST 192.168.56.101 6161 -failover-abort-no-good-slave master TEST 192.168.56.101 6161 |
sentinel conf 파일의 loglevel 을 debug 로 변경후 세부로그 확인
+pubsub-link master TEST 192.168.56.101 6161 -pubsub-link master TEST 192.168.56.101 6161 #NOAUTH Authentication required. |
sentinel conf 파일에 마스터 암호 입력 후 재기동
sentinel auth-pass TEST P@ssword |
sentinel 에서 정상적으로 Failover 완료
# +new-epoch 1 # +try-failover master TEST 192.168.56.101 6161 # +vote-for-leader c6151fe2da2f8bc476c2f22e89848782004b5143 1 # +elected-leader master TEST 192.168.56.101 6161 # +failover-state-select-slave master TEST 192.168.56.101 6161 # +selected-slave slave 192.168.56.101:6162 192.168.56.101 6162 @ TEST 192.168.56.101 6161 * +failover-state-send-slaveof-noone slave 192.168.56.101:6162 192.168.56.101 6162 @ TEST 192.168.56.101 6161 * +failover-state-wait-promotion slave 192.168.56.101:6162 192.168.56.101 6162 @ TEST 192.168.56.101 6161 # +promoted-slave slave 192.168.56.101:6162 192.168.56.101 6162 @ TEST 192.168.56.101 6161 # +failover-state-reconf-slaves master TEST 192.168.56.101 6161 # +failover-end master TEST 192.168.56.101 6161 # +switch-master TEST 192.168.56.101 6161 192.168.56.101 6162 * +slave slave 192.168.56.101:6161 192.168.56.101 6161 @ TEST 192.168.56.101 6162 |
참고로 conf 파일에 마스터를 입력하는 방식으로는 센티넬을 재기동 해야 합니다.
아래처럼 sentinel set 명령어를 사용하여 온라인 중에 마스터 정보를 변경할 수 있습니다.
명령어를 수행하는 순간 sentinel conf 파일에 자동으로 재작성 됩니다.
127.0.0.1:26937> sentinel set TEST auth-pass P@ssword OK |
$ cat sentinel_26937.conf | grep auth-pass sentinel auth-pass TEST P@ssword |
또한 마스터와 슬레이브 간에 복제가 정상적으로 걸려있는지,
센티넬에서 마스터를 정상적으로 바라보고 있는지도 추가로 확인해 주시기 바랍니다.
레디스 failover-abort-no-good-slave
Redis failover-abort-no-good-slave
센티넬 failover-abort-no-good-slave
Sentinel failover-abort-no-good-slave
'Database > Redis' 카테고리의 다른 글
[Redis] Jedis 에서 Redis Sentinel 을 통한 마스터 정보 얻는 방법 (0) | 2020.12.23 |
---|---|
[Redis] 리눅스환경에서 JAVA 와 Jedis 로 Redis 접속하는 방법 (2) | 2020.12.20 |
[Redis] 레디스 failover-abort-slave-timeout 오류 해결방법 (0) | 2020.11.22 |
[Redis] INFO 명령어로 조회되는 대상 의미 파악 (0) | 2020.07.17 |
[Redis] 클러스터 Failover 및 FailBack 하는 방법 (0) | 2020.04.05 |