우리는 AWS에서 실행되는 상당히 큰 Mongo DB를 보유하고 있습니다. 현재 우리는 3개의 인스턴스로 구성된 복제본 세트를 실행하고 있습니다. 각 인스턴스에는 5TB의 EBS 스토리지가 연결되어 있습니다. 이는 인스턴스당 월 $1000 이상입니다. 게다가 우리는 프로덕션 환경과 스테이징 환경을 모두 갖추고 있습니다(세 번째 "개발" 환경은 곧 출시될 예정입니다). 또한, 이러한 비용은 미래에 샤딩된 환경으로 이동할 때 폭발적으로 증가할 것입니다.
문제는 AWS 환경에서 3개의 복제본이 얼마나 필요한가입니다.
알았어 알았어, 대답은 "상황에 따라 다르다"는 것을 이미 알고 있습니다. 내가 찾고 있는 것은 장단점을 가장 잘 평가하는 방법에 대한 조언입니다. 예를 들어...
각 EBS 볼륨에는 이미 3중 중복이 내장되어 있고 백업에서 복원하는 것이 매우 간단하다는 점을 고려할 때 2개 대 3개 복제본의 추가된 내결함성을 어떻게 측정합니까?
장단점을 고려할 때 중복성 외에 추가 고려 사항이 있습니까?
2개의 복제본과 Arbiter만 실행한 경험(좋은지 나쁜지)이 있는 사람이 있습니까?
답변1
- 각 EBS 볼륨에는 이미 3중 중복이 내장되어 있고 백업에서 복원하는 것이 매우 간단하다는 점을 고려할 때 2개 대 3개 복제본의 추가된 내결함성을 어떻게 측정합니까?
MongoDB에 관한 한, 3개 노드 복제본 세트에 2개의 데이터 보유 멤버만 있는 주요 고려 사항은 해당 데이터 보유 멤버 중 하나가 어떤 이유로든(계획된 유지 관리 또는 계획되지 않은 오류) 사용할 수 없는 경우입니다.
- 더 이상 활성 복제가 없습니다(데이터 보유 멤버가 하나만 남아 있음).
- 배포에서는 더 이상 다음보다 높은 쓰기 문제를 확인할 수 없습니다
w:1
(예:w:majority
또는w:2
).
이 구성은 단일 멤버 실패 시 기본 멤버 유지/선택 측면에서 고가용성을 제공하지만, 데이터 보유 멤버 중 하나를 사용할 수 없는 경우 중재자는 데이터 중복성을 손상시킵니다. EBS 백업에서 복원할 수 있는 합리적인 시간이 있고 EBS 중복성에 대한 신뢰가 있다고 가정하면 이는 사용 사례에 허용되는 절충안일 수 있습니다.
- 장단점을 고려할 때 중복성 외에 추가 고려 사항이 있습니까?
코드가 MongoDB를 사용하는 경우우려 사항 쓰기기본값( w:1
)보다 높은 값을 추가하고 싶을 것입니다.wtimeout
값. 옵션을 지정하지 않고 wtimeout
쓰기 문제 수준을 달성할 수 없는 경우 쓰기 작업이 무기한 차단됩니다.
중복 인프라에 대한 AWS 보장은 일반적으로 여러 가용 영역에 걸친 장애까지만 확장되므로 가용성을 최대화하려면 복제본 세트 멤버를 다른 가용 영역에 배포해야 합니다.
- 2개의 복제본과 Arbiter만 실행한 경험(좋은지 나쁜지)이 있는 사람이 있습니까?
나는 사용자가 위 사항을 고려하지 못한(특히 쓰기 문제 및 시간 초과를 고려한 경우) 나쁜 결과를 본 적이 있습니다. 이러한 주의 사항을 염두에 두고 계획하고 테스트한다면 좋은 경험을 얻을 수 있을 것입니다.
게다가 우리는 프로덕션 환경과 스테이징 환경을 모두 갖추고 있습니다(세 번째 "개발" 환경은 곧 출시될 예정입니다).
프로덕션과 유사한 스테이징 및 개발 환경을 보유해야 한다는 주장이 분명 있지만, 일반적인 비용 절감은 프로덕션보다 장애 조치가 적은 개발용 저사양 환경을 배포하는 것입니다. 스테이징의 경우 더 낮은 사양의 환경을 배포하고 싶지만 유사한 구성을 사용하여 현실적인 장애 조치 시나리오를 테스트할 수 있습니다. 스테이징 환경에서 성능 또는 로드 테스트를 수행하는 경우 프로덕션과 동일한 사양으로 프로비저닝해야 합니다.