Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

복제본 세트 선거

이 페이지의 내용

  • 투표에 영향을 미치는 요인 및 조건
  • 투표권이 있는 회원
  • 투표권이 없는 노드

복제본 세트는 투표를 통해 어떤 세트 멤버가 프라이머리 멤버가 될지 결정합니다. 복제본 세트는 다음과 같은 다양한 이벤트에 대한 응답으로 투표를 트리거할 수 있습니다.

다음 다이어그램에서 프라이머리 노드는 configured timeout 보다 오랫동안 사용할 수 없었으며 자동 페일오버 프로세스를 트리거합니다. 나머지 세컨더리 노드 중 하나는 프라이머리를 선택하고 자동으로 정상 운영을 재개하는 투표를 호출합니다.

새로운 예비 선거의 다이어그램. 두 개의 보조가 있는 3명의 복제본 세트에서는 기본 복제본에 연결할 수 없게 됩니다. 기본 노드가 손실되면 보조 노드 중 하나가 새로운 기본 노드가 되는 선택이 촉발됩니다.
클릭하여 확대

복제본 세트는 투표가 성공적으로 완료될 때까지 쓰기 작업을 처리할 수 없습니다. 이러한 쿼리가 세컨더리에서 실행되도록 구성된 경우 복제본 세트는 읽기 쿼리를 계속 제공할 수 있습니다.

클러스터가 새 프라이머리를 선택하기까지의 시간 중앙값은 기본값 replica configuration settings을 가정할 때 일반적으로 12초를 초과하지 않아야 합니다. 여기에는 프라이머리을 사용 불가로 표시하고 투표를 호출하여 완료하는 데 필요한 시간이 포함됩니다. settings.electionTimeoutMillis 복제 구성 옵션을 수정하여 이 기간을 조정할 수 있습니다. 네트워크 지연 시간 등 여러 요인으로 인해 복제본 세트 선택을 마치는 데 필요한 시간이 길어질 수 있습니다. 이렇게 되면 결국 프라이머리 노드 없이 클러스터가 작동할 수 있는 시간의 양에 영향을 미칠 수 있습니다. 이러한 요인들은 특정 클러스터 아키텍처에 따라 달라집니다.

애플리케이션 연결 로직에는 자동 페일오버 및 후속 투표에 대한 허용 범위가 포함되어야 합니다. MongoDB 드라이버는 프라이머리의 손실을 감지하고 특정 쓰기 작업을 한 번만 자동으로 재시도할 수 있으며, 자동 페일오버 및 투표에 대한 추가 기본 처리 기능을 제공합니다.

호환 가능한 드라이버는 기본적으로 재시도 가능 쓰기를 활성화

복제 protocolVersion: 1은 복제본 세트 페일오버 시간을 줄이고 여러 개의 동시 프라이머리를 더 빠르게 감지합니다.

catchUpTimeoutMillis를 사용하여 빠른 장애 조치와 w:1 쓰기 보존 사이에서 우선 순위를 정할 수 있습니다.

pv1에 대한 자세한 내용은 자체 관리 복제본 세트 프로토콜 버전을 참조하세요.

복제본 세트 노드는 서로에게 2초마다 핑을 보냅니다. 하트비트가 10초 이내에 반환되지 않으면 다른 노드는 해당 노드를 액세스할 수 없는 것으로 표시합니다.

복제본 세트에 안정적인 프라이머리가 설정되면, 선거 알고리즘은 가장 높은 priority를 가진 보조 노드가 선거를 호출하도록 "최선의 노력"을 시도합니다. 노드의 우선 순위는 선거의 시기와 결과에 모두 영향을 미칩니다. 우선 순위가 높은 보조 노드는 우선 순위가 낮은 보조 노드보다 상대적으로 더 빨리 선거를 호출하며, 당선될 가능성도 더 높습니다. 그러나 우선 순위가 낮은 인스턴스도 우선 순위가 높은 보조 노드가 사용 가능할 때라도 짧은 기간 동안 프라이머리로 선출될 수 있습니다. 복제본 집합 노드는 사용 가능한 가장 높은 우선 순위 노드가 프라이머리가 될 때까지 선택을 계속 호출합니다.

우선 순위 값이 0인 멤버는 프라이머리가 될 수 없으며 투표에 출마할 수 없습니다. 자세한 내용은 우선 순위 0 복제본 세트 멤버를 참조하세요.

MongoDB는 가장 최근에 액세스한 데이터를 사용하여 사전 준비 선택 가능한 세컨더리 멤버의 캐시에 미러링 된 읽기를 제공합니다. 미러링 된 읽기를 사용하면 프라이머리는 수신한 작업의 하위 집합을 미러링하여 선택 가능한 세컨더리의 하위 집합으로 전송할 수 있습니다. 세컨더리 캐시를 미리 준비하면 선택 후 성능을 더 빠르게 복원하는 데 도움이 될 수 있습니다.

자세한 내용은 미러링된 읽기를 참조하세요.

분산된 복제본 세트의 경우, 데이터 센터가 손실되면 다른 데이터 센터 또는 데이터 센터의 나머지 노드가 프라이머리를 선출하는 데 영향을 미칠 수 있습니다.

가능하면 복제본 세트 멤버를 데이터 센터에 분산하여 데이터 센터가 손실되더라도 나머지 복제본 세트 멤버 중 하나가 새로운 프라이머리가 될 수 있는 가능성을 극대화하세요.

다음도 참조하세요.

네트워크 파티션 은 프라이머리를 소수의 노드가 있는 파티션으로 격리할 수 있습니다. 프라이머리 노드가 복제본 세트의 소수 노드만 볼 수 있다고 판단하면, 그 노드는 프라이머리 자리에서 물러나 보조 노드가 됩니다. 별도로, majority의 노드(자신 포함)와 연결 가능한 파티션의 노드가 새 프라이머리가 되기 위한 선거를 시작합니다.

복제본 세트 멤버 구성 설정 members[n].votes 및 멤버 state에 따라 멤버의 투표 여부가 결정됩니다.

투표권이 없는 노드는 선거에서 투표하지 않지만, 복제본 세트의 데이터 사본을 유지하며 클라이언트 애플리케이션으로부터의 읽기 요청을 처리할 수 있습니다.

복제본 세트는 최대 50개의 멤버를 보유할 수 있지만 투표권은 7개만 가질 수 있으므로, 투표권이 없는 멤버는 복제본 세트에 7개 이상의 멤버를 보유할 수 있도록 허용합니다.

투표권이 없는 경우(예 votes { 2}는 0) 멤버는 priority 이 0이어야 합니다.

예를 들어, 아홉개의 노드로 구성된 복제본 세트 중 노드 일곱 개는 투표권이 있고, 나머지 두 개는 투표권이 없습니다.

최대 7개의 투표 멤버를 가졌고, 총 멤버가 9개인 복제본 세트의 다이어그램입니다.

투표권이 없는 멤버는 votespriority 모두 0입니다.

{
"_id" : <num>,
"host" : <hostname:port>,
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 0
}

중요

어떤 멤버가 프라이머리가 될 것인지를 결정하기 위해 투표 수를 변경 하지 마세요. 대신 members[n].priority 옵션을 수정합니다. 예외적인 경우에만 투표 수를 변경할 수 있습니다. 예를 들어, 7명 이상의 멤버를 허용하기 위한 경우입니다.

투표권이 없는 노드를 구성하려면 투표권이 없는 자체 관리형 복제본 세트 노드 구성을 참조하세요.

돌아가기

고가용성