Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

복제본 세트 선거

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

다음 다이어그램에서 프라이머리 노드는 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에 따라 멤버의 투표 여부가 결정됩니다.

  • members[n].votes 설정이 1로 설정된 모든 복제본 세트 노드는 선거에서 투표권을 갖습니다. 어떤 노드의 선거 선거 참여를 배제하려면 해당 노드의 members[n].votes 구성 값을 0 로 변경합니다.

  • 투표권 있는 노드가 특정 상태에 있을 때만 투표할 수 있습니다.

  • 과반수 투표를 가장 먼저 얻은 멤버가 새로운 PRIMARY이(가) 됩니다.

  • 복제본 세트 멤버는 설정하다 에 표시된 PRIMARY 노드 중 optime 가장 높은 경우를 제외하고는 이(가) 될 수 없습니다.

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

복제본 세트는 최대 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" : Long(0),
"votes" : 0
}

중요

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

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

돌아가기

중재자

이 페이지의 내용