EC2 인스턴스 2대로도 MongoDB 복제본(replica set)을 구성할 수는 있지만, 권장되지 않습니다. MongoDB 복제본 세트는 3대 이상의 노드로 구성하는 것이 안정성을 위해 필수적입니다. 그 이유는 복제본 세트의 쿼럼(quorum) 개념 때문입니다. 복제본 세트는 데이터의 가용성과 일관성을 유지하기 위해 투표 시스템을 사용합니다.
2대의 노드만 사용하면 다음과 같은 문제점이 발생합니다:
1. 쿼럼 문제
MongoDB 복제본 세트는 주로 쿼럼 기반 투표로 작동합니다. 최소한 과반수의 노드가 활성 상태여야 PRIMARY 노드가 작동할 수 있습니다. 2대의 노드만 있을 경우, 한 노드가 장애가 발생하면 과반수를 유지할 수 없으므로 PRIMARY 노드가 작동을 멈춥니다.
예를 들어, 2대의 복제본 중 하나가 다운되면 남은 노드가 PRIMARY로 승격되지 않고 PRIMARY 노드를 잃게 되어 서비스 중단이 발생할 수 있습니다.
2. 무승격 문제
PRIMARY 노드가 다운되면 SECONDARY 노드가 PRIMARY로 자동 승격되지 않는 문제가 생깁니다. 이러한 상황을 방지하기 위해서는 아비터(arbiter) 노드를 추가해야 합니다.
3. 아비터(Arbiter) 사용
2대의 EC2 인스턴스만 사용할 경우, MongoDB에서 아비터 노드를 추가할 수 있습니다. 아비터 노드는 실제 데이터를 저장하지 않지만 투표에 참여하여 쿼럼을 유지하는 역할을 합니다. 이 방식은 2대의 노드를 사용하면서도 안정성을 높일 수 있는 대안입니다.
2대의 EC2 인스턴스로 복제본 구성하는 방법 (아비터 추가):
- 2대의 EC2 인스턴스에 MongoDB 설치
앞서 설명한 단계에 따라 두 대의 EC2 인스턴스에 MongoDB를 설치합니다. - 한 대의 인스턴스를 아비터로 구성
두 대의 EC2 인스턴스 중 한 대에 아비터 노드를 추가로 설정합니다.rs.addArb("IP_ADDRESS_OF_ARBITER:27017")
- MongoDB 셸에서 다음 명령어를 사용하여 아비터 노드를 추가합니다.
- 복제본 세트 초기화
MongoDB 셸에서 다음과 같이 초기화합니다:- IP_ADDRESS_1, IP_ADDRESS_2는 실제 MongoDB 데이터를 저장하는 인스턴스이고, IP_ADDRESS_OF_ARBITER는 아비터 노드의 IP입니다.
- rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "IP_ADDRESS_1:27017" }, { _id: 1, host: "IP_ADDRESS_2:27017" }, { _id: 2, host: "IP_ADDRESS_OF_ARBITER:27017", arbiterOnly: true } ] })
4. 주의사항
아비터 노드를 사용할 때는 다음 사항을 주의해야 합니다:
- 아비터는 데이터 저장을 하지 않음: 아비터는 오직 투표를 위한 용도이므로 실제 데이터를 저장하지 않습니다.
- 데이터 가용성 부족: 두 개의 데이터 저장 노드 중 한 대가 다운될 경우, PRIMARY 노드가 더 이상 승격되지 않고, 이로 인해 데이터 가용성에 문제가 발생할 수 있습니다.
따라서 2대의 EC2 인스턴스로 MongoDB 복제본을 구성하려면 아비터를 추가하는 방법을 사용하는 것이 좋습니다. 그러나 가능하다면 3대 이상의 노드를 사용하는 구성을 권장합니다.