Sidekiq, elasticache 사용 시 discourse 업그레이드 후 대기 중인 작업 처리 안 됨

최근 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가 작업을 처리하도록 강제할 방법이 있을까요?

어느 시점부터 discourse가 redis 5를 요구하기 시작했는데, elasticache에서 어떤 버전의 redis를 지원하는지 알고 싶습니다. 로그에 명확한 메시지가 표시되는 줄 알았는데, 제가 잘못 알고 있는 것일 수도 있습니다.

elasticache를 사용 중인 제 사이트에서 문제가 없는지 확인해 보겠습니다. 이 사이트가 elasticache를 사용한다고 꽤 확신하고 있습니다.

유용한 정보 감사합니다. 저는 Redis 3 버전을 사용 중이라 오늘 밤 업데이트를 진행해야 할 것 같습니다.

로그에 명확한 메시지가 있다고 생각했는데요.

아마도 제가 올바른 로그를 확인하지 못하고 있는 것일 수도 있습니다. /logs도 ./launcher logs app도 해당 사항에 대한 어떠한 표시도 제공하지 않으니, 다른 곳에서 확인해야 할까요?

/var/discourse/shared/logs/rails/production.log

만약 내 기억과 손가락이 제대로 작동했다면.

정말 가까웠어요. 다음 경로에서 찾았어요:

/var/discourse/shared/web-only/log/rails/production.log

찾아낸 후에는 메시지가 아주 명확했어요 :+1:t2::

You are connecting to Redis v3.2.10, Sidekiq requires Redis v4.0.0 or greater

Redis 5로 업그레이드했고, 쌓여 있던 큐를 처리했습니다. 이제 모든 것이 정상입니다! 감사합니다!