TIL

갑자기 redis 안되는 현상

하얀잔디 2025. 10. 18. 11:28

톡 장애 후기 

오늘 갑자기 서비스가 안된다고 팀에서 말이 나옴 -> 그럴리가 없는데??

→ 확인해보니 API 서버에서 Redis 연결 오류 발생
→ 클러스터링된 Redis(6379 포트)가 아예 죽어 있었음
→ Redis 다시 살리니까 서비스 정상 복귀

 

 

🔍 장애 원인

  • Redis systemd 설정 중 ProtectSystem=strict 옵션 켜져 있었음
  • 이 옵션은 systemd 보안 하드닝 기능으로,
    Redis 프로세스가 파일시스템에 쓰기 불가능(읽기 전용) 상태로 동작함
  • Redis는 클러스터 구성 정보(nodes-16379.conf) 파일에 접근해야 하는데
    접근이 막혀서 프로세스가 즉시 종료(exit code 1)
  • 결국 Redis 클러스터가 기동되지 않음 → API 서버에서 연결 실패

 

 

⚠️ 증상

  • API 로그에 아래 메시지 반복 출력됨
  •  
    ClusterAllFailedError: Failed to refresh slots cache
  • Redis 로그엔 이런 에러 찍힘
  •  
    Can't open nodes-16379.conf in order to acquire a lock: Read-only file system
  • systemctl restart redis-server 해도 재기동 안 됨
  •  
    redis-server.service: Failed with result 'exit-code'

🧠 원인 요약

  • systemd의 ProtectSystem=strict 때문에 Redis가 파일을 못 씀
  • 클러스터 상태 파일 생성 불가 → Redis 프로세스 종료
  • Redis 죽으면서 API 서버들이 클러스터 노드 못 찾음 → 서비스 응답 지연 및 일부 기능 오류

🛠 조치 내역

  1. nodes-16379.conf 파일 수동 생성
  2. Redis 서비스 설정 수정
  3.  
    [Service] ProtectSystem=no ProtectHome=no
  4. Redis 재시작 → 정상 기동
  5. 다른 Redis 노드(DB 서버 3대)에도 동일하게 설정 반영

✅ 결과

  • Redis 클러스터 정상 복구
  • API 서버 Redis 연결 복원
  • 서비스 전체 정상화 완료

💬 요약 한 줄

systemd 보안 옵션이 Redis 파일 쓰기를 막아서 클러스터가 죽었던 케이스.
ProtectSystem=strict → no로 변경해서 해결함.