새 DB와 백업 및 업로드용 새 S3 버킷이 있는 새 서버로 마이그레이션

안녕하세요,

현재 기존 Bitnami 기반 배포 환경(비교적 오래된 버전)에서 AWS에서 공식적으로 지원하는 설치 방식으로 서버를 마이그레이션하는 과정에 있습니다. 최신 Discourse 릴리스를 사용하고 있으며, 이 새 설치 환경에는 외부 Elasticache와 RDS 인스턴스가 포함되어 있고, 백업 및 업로드에는 S3를 사용할 예정입니다.

두 가지 질문이 있습니다:

  1. 기존 Discourse 서버는 상당히 오래된 버전입니다. 새 Discourse 서버에서 백업/복원 작업을 수행하면 관련 업그레이드 명령어가 모두 실행되는 것일까요?
  2. 새 서버의 새 Discourse Docker 컨테이너에 백업 파일을 복사하고 명령줄에서 복원을 시작하면, 설정에서 지정한 새 버킷 값이 복원 과정 중 덮어쓰기되는지, 아니면 제 새 값이 사용될지 궁금합니다. 제 추측으로는 새 DB가 백업으로 채워진 후, 컨테이너를 종료하고 ./launcher rebuild app를 실행하면 제 새 S3 값이 사용될 것 같습니다.

제 추측이 맞다면, 복원을 수행하기 전에 기존 S3 버킷의 내용을 새 버킷으로 복사해야 할까요?

이러한 유형의 백업 기반 마이그레이션을 수행할 때 주의해야 할 다른 함정이 있을까요?

미리 감사합니다.

무언가를 놓치고 있는 것 같지만, 왜 새 버킷을 만들고 있나요? 적절한 라이프사이클 규칙을 갖춘 새 백업 버킷을 만드는 것은 괜찮아 보이지만, 기존 Discourse 인스턴스가 S3 업로드 버킷을 사용 중이라면 몇 가지 문제가 발생할 수 있습니다.

새 버킷이 필요한 두 가지 이유:

  1. Bitnami에서 마이그레이션이 문제없이 성공할지 100% 확신이 서지 않아, 마이그레이션을 중단해야 하는 경우 기존 데이터에 영향을 주지 않도록 하기 위함입니다.
  2. 버킷 네이밍 방식을 변경했기 때문에, 이를 위해 완전히 새로운 버킷 두 개를 사용하는 것이 더 쉬울 것이라 판단했습니다.

특히 1번이 걱정되므로 더 신중하게 접근하고 있습니다.

새로운 업로드 버킷에 대해 예상되는 문제가 있을까요? 기존 Discourse 서버는 읽기 전용 모드로 전환됩니다. 새 서버가 구동되고 검증되면, 기존 서버를 중지하고 DNS를 새 서버로 변경한 후 CDN(Cloudfront)의 캐시를 정리하고, 마지막으로 대외 공개를 할 계획입니다.

기존 버킷에서 데이터를 복사할 계획이었는지 놓쳤네요. AWS를 살펴봤는데, 비교적 간단해 보입니다. 제 입장에서는 AWS나 다른 곳의 새 서버로 이전하기 전에 버킷을 변경하는 것은 건드리지 않는 것이 좋습니다.

공식적으로 지원된다고요? 그 부분은 확신이 서지 않습니다.

새 서버로 이전하기 전에 Discourse를 업데이트하는 것을 강력히 권장합니다.

기존 인스턴스에서는 이전하기 전에 S3 구성이 app.yml에 이미 없다면 app.yml로 이동하는 것을 권장합니다.

이것은 프로덕션 환경에 영향을 주지 않고 쉽게 테스트할 수 있는 사항입니다.

개인적으로는 이 두 가지를 동시에 수행하는 것을 피하기 위해 최선을 다하겠습니다.

  1. 버킷을 이동하는 것을 아예 피할 수 있는지 확인해 보세요.
  2. 피할 수 없다면, Bitnami에서 마이그레이션을 완료한 후에 진행하세요.

이러한 유형의 설치가 어떻게 부가가치를 제공하는지 매우 궁금합니다.
지원되지 않는 설치에 대한 수많은 게시물들을 보면, 학습이나 실험 목적을 제외하고는 이점이 아니라 더 많은 문제를 초래하는 것 같습니다.

이러한 구성은 Discourse의 관점에서는 지원되지 않는 설치일 수 있지만, 엔터프라이즈 IT 조직의 관점에서는 RDS와 Elasticache가 표준일 수 있고, 오히려 Discourse의 표준 설치 방식이 이례적인 것이 될 수 있습니다.

감사합니다. 그러니까 친숙함과 아마도 기존 인프라를 말하는 거군요.

이 질문에 대한 피드백을 감사합니다.

@RGJ 님이 언급했듯이, 저희 엔터프라이즈 인프라는 캐시, 데이터베이스 등을 위해 Elasticache와 RDS와 같은 외부 서비스를 사용하고 있습니다. 이를 통해 해당 서비스에 대한 완전한 백업과 중복성을 확보할 수 있을 뿐만 아니라 보안 관리에도 도움이 됩니다. Discourse의 관점에서 이것은 공식적으로 지원되는 설치 방식이며, 단지 다른 템플릿 세트를 사용하고 있을 뿐입니다. 저희는 discourse_docker/samples/web_only.yml at main · discourse/discourse_docker · GitHub 파일을 사용하고 있습니다(‘표준’이라는 표현이 다소 오해를 불러일으킬 수 있었네요, 죄송합니다).

따라서 기존 설치 환경의 버킷 이름을 먼저 업데이트한 후 새 서버로 이전을 진행하는 것이 적절해 보입니다. 기존 설치를 최신 버전으로 업데이트하는 것은 불가합니다. 이전에 Bitnami 업그레이드 시 문제가 발생했던 경험이 있어, 공식 설치 방식으로 전환하게 되었습니다.

혹시 기존 버킷을 그대로 사용하여 복원을 수행한 후 app.yml 파일을 수정해 새 버킷을 참조하도록 변경할 경우 어떤 문제가 발생할 가능성이 있는지 여쭤봐도 될까요? DISCOURSE_ 환경 변수들은 모두 데이터베이스 내 설정(해당하는 경우)보다 우선순위가 높지 않나요? 아니면 다른 요인이 문제를 일으킬 수 있는 건가요?

저라면 그렇게 하지 않을 것 같습니다.

마이그레이션 전에 수행했다가 문제가 발생하면, 방금 설치한 표준 인스턴스가 아니라 구형 Bitnami 인스턴스에서 문제가 생기기 때문입니다. 그리고 구버전이라는 점 외에도, Bitnami라는 단어 자체가 언급되는 것만으로도 meta에서 훨씬 적은 지원을 받게 됩니다.

네, 그렇습니다.

아, 리처드, 죄송합니다. S3 이름 변경에 대한 항목을 잘못 읽었네요 :+1:

그래서 더 나은 계획은 기존 버킷을 백업한 후 마이그레이션을 수행하고 버킷 이름을 변경하는 것입니다.

지금까지 도움을 주셔서 감사합니다.

그리고 네, "B"라는 단어는 사람들이 입을 다물게 하니까, 그 단어를 사용하지 않는 방향으로 나아가는 것이 좋은 것 같습니다 :slight_smile:

네, 한꺼번에 너무 많은 일을 하지 않도록 버킷 이름 변경 전에 며칠 정도 기다리는 것이 좋습니다.

좋습니다.

한 가지만 더 여쭤볼게요 - Discourse 컨테이너 내에서 커맨드 라인을 통해 복원을 실행할 때, 데이터베이스 연결, Redis 연결 등의 세부 정보는 기존 /var/www/discourse/config/discourse.conf 설정 파일을 사용하는 건지, 아니면 백업 파일에 있는 내용으로 해당 설정을 덮어쓰는 건가요?

다시 한번 감사합니다!

discourse.confapp.yml에서 생성되며, 백업 파일에 포함되지 않습니다.

일반적으로 discourse.conf에 포함된 항목은 사이트 설정을 우선합니다.

따라서 데이터베이스에 setting_foo가 있는 경우, app.ymlDISCOURSE_SETTING_FOO를 정의하면 discourse.confsetting_foo가 생성되어 해당 설정을 오버라이드할 수 있습니다.

좋아요. @RGJ 님, 도움 주셔서 정말 감사합니다. 마이그레이션이 끝나면 결과를 알려드리겠습니다.

컨테이너 이미지와 도구를 사용하여 Discourse 컨테이너를 외부 PostgreSQL 및 Redis 서버를 가리키도록 설정하는 것은 지원되는 설치 방식입니다.

RDS[1]는 PostgreSQL이고, Elasticache는 Redis이므로 문제없습니다.

저희 호스팅으로 이전하는 고객분들에게도 이렇게 하고 있으므로 문제없을 것입니다.

저는 프로세스를 최대한 단순하게 유지하는 것을 선호합니다. 따라서 기존 서버에서 전체 백업(업로드 포함)을 실행한 후 새 서버에 복구하면, 기존 서버에 영향을 주지 않으면서 새 설정을 완전히 테스트해 볼 수 있습니다.


  1. 네, PostgreSQL RDS ↩︎

@supermathie님, 정말 감사합니다.

@RGJ님이 제안하신 대로, 버킷 이름을 변경하지 않고 백업/복원을 수행하겠습니다. 말씀드렸듯이 기존 서버 데이터에 영향을 주지 않는 것이 제 우려 사항이었지만, 먼저 기존 버킷을 백업하고 마이그레이션 동안 기존 서버를 읽기 전용(Read Only) 모드로 설정하면 버킷에 업로드된 데이터의 무결성이 상당히 잘 보호될 것 같습니다.

정보 감사합니다! 제 무지를 대담하게 드러내는 게 싫습니다.

보충 설명: 주요 버전이 우리가 배포하는 버전과 일치하는 경우

여러분께 인사드립니다.

어제 마이그레이션을 완료했는데, 정말 순조롭게 진행되어 매우 만족스러웠습니다.

도와주신 모든 분들께 감사드립니다.