문서 홈 → 애플리케이션 개발 → 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
4경우0설정이 다른 복제본 세트에 대해 가 (MongoDB . +에서 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
쓰기 보존 사이에서 우선 순위를 정할 수 있습니다.