문서 홈 → 애플리케이션 개발 → MongoDB 매뉴얼
복제본 세트 프로토콜 버전
버전 4.0부터 MongoDB는 복제본 세트 프로토콜 버전 1(pv1
)만 지원합니다. pv1
는 MongoDB 3.2 이상으로 생성된 모든 새 복제본 세트에 대한 기본값입니다.
쓰기 보존
w:1
쓰기
pv1
를 사용하면 catchUpTimeoutMillis
를 사용하여 더 빠른 페일오버와 w:1
쓰기 보존 사이에서 우선 순위를 지정할 수 있습니다.
w: "majority"
쓰기
pv1
확인된 w:
"majority"
쓰기의 보존을 보장합니다.
가용성
pv1
MongoDB 버전 3.2 이상에서 사용할 수 있으며 버전 3.2 이상에서 생성된 모든 새 복제본 세트의 기본값입니다.
중재자
다음 MongoDB 버전에서 중재자가 있는 복제본 세트의 경우 pv1
은 pv0
(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
다른 복제본 세트에 대해 가 (MongoDB 4.0+에서 더 이상 지원되지 않음)에 비해 롤백 members[n].priority
가능성을 높입니다.
MongoDB 3.4.1
MongoDB 3.4.0
MongoDB 3.2.11 또는 이전 버전
을 지원하는 다른 버전의 MongoDB의 경우 는 pv1
pv1
설정이 다른 복제본 세트에 대한 롤백 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
쓰기 보존 사이에서 우선 순위를 정할 수 있습니다.