Database/Redis

[Redis] 레디스 failover-abort-no-good-slave 오류 해결방법

꽁담 2020. 11. 22. 10:03

상황


아래와 같은 구조에서

레디스 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