‘복원’ 실패: 불일치 무시 가능

이 주제는 이후 4번째 게시물부터 '복구 실패(Restore Failing)'로 발전했으며, 이것이 현재 주요 문제입니다. 처음 4개 게시물은 무시하셔도 됩니다.

저는 몇 년 전/처음부터 업로드를 AWS S3로 설정해 두었습니다.
(제가 아는 한) S3 업로드를 백업에 포함하는 옵션을 활성화한 적이 없었음에도 불구하고, 어제 '업로드(Uploads)'를 백업에 포함하도록 선택했을 때 로그에 다음과 같은 내용이 나타났습니다:

몇 가지 궁금한 불일치가 있어 당황스럽습니다:

  1. 어젯밤 관리자 설정에서 백업에 '업로드’를 포함하도록 옵션을 켰습니다. 그런 후 WinScp를 통해 로컬 ‘공유 업로드(Shared Uploads)’ 폴더를 확인해 보니, 1개 폴더에만 100개 미만의 파일이 있었습니다 (다른 2x, 3x 폴더는 존재하지 않으며, 필요하면 스크린샷을 공유할 수 있습니다). 그런데 왜 백업 로그에는 약 3,000개의 파일이 다운로드된 것으로 표시되는 것일까요? ('다운로드 실패’는 이 로그의 또 다른 문제이지만, 그것은 ‘별개의’ 문제입니다). 만약 로컬 저장소에서 이 파일들을 다운로드하고 있다면, 그 많은 파일은 어디에 존재하는 것일까요? 그리고 S3에서 다운로드하고 있다면, a) 왜 거기서 다운로드하는 것일까요? 저는 rails 콘솔에서 백업에 s3 데이터를 포함하도록 해당 옵션을 변경한 적도 없고, yml 파일의 Env 섹션에서 비슷한 옵션을 생성한 적도 없는데 말입니다.
  2. 그 후 오늘 Rails Console에서 해당 옵션을 'True’로 변경했습니다. 그리고 백업 작업을 실행했을 때, 약 3,200개의 파일이 다운로드되고 약 100개가 '다운로드 실패’로 표시되었습니다. 하지만 AWS S3 버킷을 확인해 보니, 약 10배인 32,000개(약 3GB)의 파일이 있었습니다. 그렇다면 왜 모든 파일을 다운로드하지 않는 것일까요?
  3. 이 모든 데이터를 대조/동기화하고, 어떤 불일치가 어디서 발생하고 있는지 파악할 수 있는 방법이 없을까요?
  4. 지금은 매우 당황스럽습니다. 무엇을 해야 할지 모르겠습니다. 궁극적인 목표는 (너무 비싼) aws 스토리지를 더 저렴한 버전으로 이전하는 것입니다 (VPS가 실행 중인 Hetzner 자체는 매우 저렴하므로, 제 1차 서버의 스토리지 용량도 늘릴 수 있습니다).

감사합니다. 방향을 잡아주실 수 있을까요?

AWS S3 버킷의 ‘Uploads’ 폴더가 3GB(파일 3,200개)를 초과하고 있는데, Rails 콘솔을 통해 ‘include_s3_uploads_in_backup’ 옵션을 활성화한 후에도 왜 백업은 1GB 미만(백업에 다운로드된 파일은 2,900개뿐)인가요?

해당 설정은 파일을 임시 디렉터리로 다운로드하여 백업에 포함시킵니다. 업로드 디렉터리에 직접 저장하지는 않습니다. 업로드 디렉터리에 파일을 넣으려면 백업을 복원해야 합니다. 만약 문제가 발생할 경우 원본 서버가 온전하게 유지되도록, 새 서버에서 이 작업을 수행하는 것이 좋습니다.

일부 파일이 누락되었을 수 있습니다. 이미지가 누락된 게시물이 있나요? 또 다른 가능성은 업로드 테이블에 더 이상 게시물에서 참조되지 않는 업로드 항목이 포함되어 있어, 해당 누락된 이미지는 문제가 아닐 수 있다는 점입니다.

100개 정도라면 큰 문제가 아닐 가능성이 높습니다.

또는 과거에 버그로 인해 유지되어야 할 파일들이 정리(삭제)되었을 수도 있습니다.

다운로드된 파일을 확인하려면 백업 파일을 다운로드하여 그 내용을 살펴봐야 합니다. 새 서버로 백업을 복원하여 작동 방식을 확인해 보세요.

하지만 핵심은 S3의 ‘Uploads’ 폴더가 3.2GB 용량에 32K개의 파일을 포함하고 있음에도 불구하고, 백업이 왜 겨우 1GB(단 3100개 파일)에 불과한지입니다. (백업 로그는 약 10%, 즉 3천 개 파일만 다운로드되었음을 명확히 보여줍니다.)

[이 문제를 테스트하기 위해 다른 도메인으로 새로운 Discourse 설정을 만드는 것은 제게 매우 번거롭습니다. 반면 스냅샷을 만드는 것은 매우 쉽고, 필요할 경우 아주 트래픽이 적은 제 사이트를 5분 만에 아무 문제 없이 되돌릴 수 있습니다.]

글쎄요, 저는 Rails C에서 옵션을 변경한 후에도 yml 파일에 DISCOURSE_INCLUDE_S3_UPLOADS_IN_BACKUPS: true 이라는 줄을 추가하면 AWS S3에서 모든 업로드를 불러오게 될 거라고 생각했습니다.

하지만 yml에서 이 옵션을 변경하고 컨테이너를 재빌드한 뒤 백업을 실행해 보니, 백업 로그에 동일한 내용(약 100건의 실패를 포함한 3,000건의 미디어 다운로드)이 표시되었습니다.

그리고 복원을 시도했을 때(아직 관리자 설정에서 업로드/S3 설정을 변경하지 않은 상태였음) 오류가 발생했습니다.

Full Log:
![image|690x389](upload://fN6fSsRv2l37aN7O2Mxie7kwx8V.png)

따라서 이미지를 S3 버킷에 업로드하려고 시도합니다.

tar 파일을 열면, 오류 메시지가 발생한 100개를 제외한 모든 이미지가 포함된 것을 볼 수 있습니다.

image
S3 업로드를 비활성화한 후 1GB 백업(백업은 여전히 AWS S3에 있음)을 복원하려고 했으나, 다시 실패했습니다. 여기서는 무엇이 잘못되었을 수 있을까요?

또한, 복원 실패 후 로그아웃된 상태가 되었고, 다시 로그인했을 때 모든 비스태프 이메일이 비활성화되었다는 배너가 표시되었습니다. 그리고 이메일로 받은 링크를 통해 로그에 접근하려고 했으나, 해당 파일을 찾을 수 없거나 접근할 수 없었습니다(설정된 오류 페이지가 표시됨).

복원을 시도하던 중, 로그아웃되기 직전 다음과 같은 로그 메시지를 확인했습니다:

[2024-08-19 04:12:58] 'Bathinda_Helper' has started the restore!
[2024-08-19 04:12:58] Marking restore as running...
[2024-08-19 04:12:58] Making sure /var/www/discourse/tmp/restores/default/2024-08-19-041258 exists...
[2024-08-19 04:12:59] Downloading archive to tmp directory...

이후의 ‘FAILED-restore’ 시도에 로그 링크를 클릭할 수 있었는데, 로그아웃되기 직전이었습니다. 여기 있습니다:
log- failed restore.txt (98.9 KB)

새로운 업로드가 실제로는 로컬 우분투 서버에 생성되고 있음을 실험을 통해 확인했습니다. 하지만 S3에서 로컬로 복원하는 작업은 실패하고 있습니다. 문제는 제가 확인해 본 몇몇 게시물의 이미지는 여전히 S3에서 표시되고 있다는 점입니다(그 이미지들은 누락되지 않았습니다).

도와 주십시오.

제발 도와주세요. 복구가 또 다시 실패하고 있습니다.

또한, ‘Failed Restore’ 상태에서도 동일한 관리자 계정으로 로그인해도 ‘Log.txt’ 첨부파일에 접근할 수 없습니다. 대신 페이지를 찾을 수 없음/설정 오류 페이지가 표시됩니다.

명령줄에서 din을 복원하고, tmux 또는 screen을 사용해 로그를 뒤로 스크롤할 수 있도록 해보는 것이 좋습니다.

이 게시물에서 안내해 주신 대로 Tmux를 통해 아래 명령어를 시도해 보았지만, 다음과 같은 방식으로 실패했습니다:

또한, ‘data’ 컨테이너와 ‘Web_only’ 컨테이너가 있는 상황에서, 복구를 어느 컨테이너에 수행해야 하는지 궁금합니다.

지금처럼 web_only 컨테이너에서 복원하세요.

첫 번째 명령어로 복원을 성공적으로 활성화했습니다(왜 다른 방식으로 다시 시도하는지 모르겠네요). 이제 다음을 실행하세요.

 discourse restore

사실 저는 바로 위에 언급된 게시물에 있는 Jay Pfaffman 님의 스크린샷과 정확히 동일한 방식으로 시도해 보았습니다. 어쨌든, 이제 저는 'Discourse 복원’만 수행할 예정입니다.

제 이해와 희망대로라면, 로컬 서버의 백업 폴더에 있는 백업(.tz) 파일의 경로를 지정할 필요가 없고, 시스템이 자동으로 해당 파일을 찾아 복원할 것이라고 생각합니다.