문서 메뉴

문서 홈애플리케이션 개발MongoDB 매뉴얼

복제본 세트 프로토콜 버전

버전 4.0부터 MongoDB는 복제본 세트 프로토콜 버전 1(pv1)만 지원합니다. pv1 는 MongoDB 3.2 이상으로 생성된 모든 새 복제본 세트에 대한 기본값입니다.

pv1 를 사용하면 catchUpTimeoutMillis 를 사용하여 더 빠른 페일오버와 w:1 쓰기 보존 사이에서 우선 순위를 지정할 수 있습니다.

pv1 확인된 w: "majority" 쓰기의 보존을 보장합니다.

pv1 MongoDB 버전 3 에서 사용할 수 있습니다.2 이상이며 버전 3 로 생성된 모든 새 복제본 세트의 기본값입니다.2 이상.

다음 MongoDB 버전에서 중재자가 있는 복제본 세트의 경우 pv1pv0 (MongoDB 4.0 이상에서는 더 이상 지원되지 않음)에 비해 w:1 롤백 가능성을 높입니다.

  • MongoDB 3.4.1

  • MongoDB 3.4.0

  • MongoDB 3.2.11 또는 이전 버전

pv1 지원하는 다른 버전의 MongoDB의 경우 pv1 중재자가 있는 복제본 세트에 대한 w:1 롤백 가능성을 증가시키지 않습니다.

다음 MongoDB 버전의pv1 w:1 pv0 4경우0설정이 다른 복제본 세트에 대해 가 (MongoDB . +에서 members[n].priority 더 이상 지원되지 않음)에 비해 롤백 가능성을 높입니다.

  • MongoDB 3.4.1

  • MongoDB 3.4.0

  • MongoDB 3.2.11 또는 이전 버전

을 지원하는 다른 버전의 MongoDB의 경우 는 pv1pv1 설정이 다른 복제본 세트에 대한 롤백 w:1 가능성을 members[n].priority 증가시키지 않습니다.

pv1 거부권을 사용하지 않습니다. 개별 멤버는 특정 선거에서 후보자에 대해 투표하거나 반대할 수 있지만, 투표를 일방적으로 거부권(중단)으로 할 수는 없습니다.

일부 상황에서는 복제본 세트의 두 노드가 일시적으로 자신이 주 노드라고 생각할 수 있지만, { w: "majority" }의 쓰기 우려로 쓰기를 완료할 수 있는 노드는 최대 한 개뿐입니다. { w: "majority" }개의 쓰기를 완료할 수 있는 노드가 현재의 주 노드이고, 다른 노드는 보통 네트워크 파티션으로 인해 강등된 것을 아직 인식하지 못한 이전의 주 노드입니다. 이 경우 이전 주 노드에 연결한 클라이언트는 읽기 기본 설정 primary를 요청했음에도 불구하고 오래된 데이터를 보게 되며, 이전의 주 노드에 대한 새로운 쓰기는 결국 롤백됩니다.

pv1 의 개념을 사용합니다. 이를 통해 동시 프라이머리를 더 빠르게 탐지하고 짧은 시간 내에 성공적인 투표를 여러 번 달성할 수 있습니다.

pv1 사용 가능한 가장 높은 priority 를 가진 2차자가 투표를 호출하도록 "최선의 노력"을 시도합니다. 이로 인해 우선 순위가 더 높은 자격 있는 멤버가 투표를 호출할 수 있으므로 연속 투표가 이루어질 수 있습니다.

그러나 MongoDB에서는 3 입니다.6+ (MongoDB 3.4.2+ 및 3.2.12+뿐만 아니라), pv1 에 대한

  • 우선순위 선택은 우선순위가 더 높은 노드가 현재 프라이머리로부터 10 초 이내에 있는 경우에만 발생하도록 제한되었습니다.

  • 중재자는 후보자와 동등하거나 더 높은 우선순위를 가진 정상적인 프라이머리를 발견하면 선거에서 반대 투표를 하게 됩니다.

pv1 한 멤버의 투표 요청에서 이중 투표를 방지합니다. 이는 텀을 사용하여 달성됩니다.

버전 4 부터 시작됩니다.0, MongoDB는 복제본 세트 프로토콜 버전 1 (pv1)만 지원합니다.

그러나 MongoDB 3.2 통해 MongoDB 3.6 는 복제본 세트 프로토콜 버전 1 및 프로토콜 버전 0 를 지원합니다.

32 MongoDB 3 의 프로토콜 버전을 변경하기 전. 통해 MongoDB .6, 현재 프로토콜 버전에서 생성된 oplog 항목이 하나 이상 프라이머리에서 모든 세컨더리로 복제되었는지 확인합니다. 확인하려면 각 optimes.lastCommittedOpTime.t 세컨더리에서 에서 반환된 rs.status() 필드를 확인합니다. 예를 들어 를 mongosh 각 세컨더리에 연결하고 다음을 실행합니다.

rs.status().optimes.lastCommittedOpTime.t
  • 현재 복제본 세트 프로토콜 버전이 0 인 경우 t-1 와 같습니다.

  • 현재 복제본 세트 프로토콜 버전이 1 인 경우 t-1 보다 큽니다.

현재 프로토콜 버전을 사용하는 하나 이상의 oplog 항목이 모든 세컨더리에 복제되었는지 확인한 후에는 프로토콜 버전을 변경할 수 있습니다.

복제본 세트 프로토콜 버전을 변경하려면 새 로 복제본rs.reconfig() protocolVersion 세트를 재구성( )합니다. 예를 들어 pv1 mongosh 로 업그레이드하려면 를 현재 프라이머리에 연결하고 다음 작업 순서를 수행합니다.

cfg = rs.conf();
cfg.protocolVersion=1;
rs.reconfig(cfg);

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

← 복제본 세트 구성