최근 Ubuntu EC2에서 실행 중인 Docker 기반 Discourse 인스턴스를 업그레이드했습니다. 업그레이드를 위해 launcher rebuild를 사용했습니다. 이전 버전은 2.4.0이었고 2.6.0.beta1로 업그레이드했습니다(이후 2.6.0.beta2로 다시 업그레이드했습니다). Redis 대신 ElastiCache를 사용 중이며, 업그레이드 전까지는 문제없이 작동하고 있었습니다. 업그레이드 직후 Sidekiq가 이메일을 보내지 않는 것을 발견했습니다. 앱을 재시작하고 캐시를 지웠더니 작동하는 것처럼 보였지만, 이는 오판이었습니다.
고장 징후
- Sidekiq가 합리적인 속도로 작업을 스케줄링하고 큐에 추가하고 있습니다(Sidekiq 대시보드에서 확인 가능)하지만, 실제 작업은 실행되지 않습니다.
- 관리자 페이지에서 Sidekiq가 실행되지 않는다고 경고합니다.
- 로그에
Sidekiq heartbeat test failed, restarting메시지가 여러 번 나타납니다. - 당연히: 사용자에게 이메일이 전송되지 않습니다.
시도해 본 방법(여기서 및 SO의 게시물을 읽고 나서)
- Discourse-doctor로 테스트 이메일을 성공적으로 보내 해당 플로우의 일부가 작동하는지 확인했습니다.
- Sidekiq 대시보드에서 푸터에 올바른 ElastiCache 인스턴스가 표시되는지 확인했습니다
- Docker 로그에 오류가 표시되지 않는지 확인했습니다 (
ok: run: redis: (pid XX) 0s) - 캐시를 지우고 Discourse를 재시작했습니다 (./launcher restart app)
- 앱을 중지하고, 캐시를 지운 후, 앱을 시작했습니다.
- 앱을 다시 빌드했습니다.
아직 시도하지 않은 단계
- 새로운 ElastiCache 인스턴스 생성
- 현재 설치 환경을 보관(Mothballing)하고 깨끗한 환경을 새로 생성
이 문제를 경험하신 분이나 조언이 있으신 분이 계신가요?
놓친 로그가 있을까요?
Sidekiq가 작업을 처리하도록 강제할 방법이 있을까요?