문서 메뉴

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

복제본 세트 구성

이 페이지의 내용

  • 복제본 세트 구성 문서 예제
  • 복제본 세트 구성 필드

rs.conf() 메서드 또는 replSetGetConfig 명령을 사용하여 복제본 세트의 구성에 액세스할 수 있습니다.

복제본 세트의 구성을 수정하려면 rs.reconfig() 메서드를 사용하여 구성 문서를 메서드에 전달합니다. 자세한 내용은 rs.reconfig()를 참조하세요.

경고

유효성 검사 규칙은 MongoDB 버전마다 다를 수 있으므로 다른 MongoDB 버전의 멤버를 포함하는 복제본 세트를 다시 구성하지 마십시오.

다음 문서는 복제본 세트 구성 문서의 표현을 제공합니다. 복제본 세트의 구성에는 다음과 같은 설정의 하위 집합만 포함될 수 있습니다.

{
_id: <string>,
version: <int>,
term: <int>,
protocolVersion: <number>,
writeConcernMajorityJournalDefault: <boolean>,
configsvr: <boolean>,
members: [
{
_id: <int>,
host: <string>,
arbiterOnly: <boolean>,
buildIndexes: <boolean>,
hidden: <boolean>,
priority: <number>,
tags: <document>,
secondaryDelaySecs: <int>,
votes: <number>
},
...
],
settings: {
chainingAllowed : <boolean>,
heartbeatIntervalMillis : <int>,
heartbeatTimeoutSecs: <int>,
electionTimeoutMillis : <int>,
catchUpTimeoutMillis : <int>,
getLastErrorModes : <document>,
getLastErrorDefaults : <document>,
replicaSetId: <ObjectId>
}
}
_id

유형: 문자열

복제본 세트의 이름입니다.

_id 는 명령줄에서 replication.replSetName 또는 mongod에 지정된 --replSet의 값과 동일해야 합니다.

참조:

replSetName 또는 --replSet로 복제본 세트 이름 설정에 대한 정보를 확인합니다.

version

형식: int

구성의 이전 버전과 복제본 세트 구성 문서의 개정판을 구별하는 데 사용되는 증분 번호입니다.

복제본 세트 멤버는 termversion 를 사용하여 '최신' 복제본 구성에 대한 합의를 도출합니다. 멤버가 복제본 구성 문서를 비교할 때 term 값이 더 큰 구성 문서가 '최신' 문서로 간주됩니다. term 이 같거나 없는 경우, version 값이 더 큰 구성 문서가 '최신'으로 간주됩니다.

term

형식: int

featureCompatibilityVersion(fCV) '4.4' 이상이어야 합니다.

복제본 세트 구성 문서의 수정본을 구성의 이전 이터레이션과 구별하는 데 사용되는 증분 숫자입니다.term 구성 문서의 는 재구성을 수행한 복제본 세트 프라이머리 의 텀과 일치합니다. 프라이머리 는 선거에서 승리한 후 등급이 올라갈 때마다 텀이 증가합니다. 프라이머리는 term 연산에서 명시적으로 설정된 경우 필드를 replSetReconfig 무시합니다.

강제 재구성을 실행하면 term 필드가 제거됩니다. 다음에 프라이머리가 replSetReconfig 를 강제성 없이 발행할 때, 자체 텀에 term 를 설정합니다.

복제본 세트 멤버는 termversion 를 사용하여 '최신' 복제본 구성에 대한 합의를 도출합니다. 멤버가 복제본 구성 문서를 비교할 때 term 값이 더 큰 구성 문서가 '최신' 문서로 간주됩니다. term 이 같거나 없는 경우, version 값이 더 큰 구성 문서가 '최신'으로 간주됩니다.

configsvr

유형: 부울

기본값: false

샤드 클러스터의 config 서버에 복제본 세트를 사용할지 여부를 나타냅니다. 복제본 세트가 샤드 클러스터의 config 서버용인 경우 true로 설정합니다.

protocolVersion

유형: 숫자

기본값: 1

MongoDB는 4.0부터 protocolVersion: 1만 지원하며 더 이상 protocolVersion: 0을 지원하지 않습니다.

다음도 참조하세요.

writeConcernMajorityJournalDefault

유형: 부울

기본값: true

쓰기 고려가 저널 옵션 j를 명시적으로 지정하지 않은 경우 { w: "majority" } 쓰기 고려의 동작을 결정합니다.

다음 표에는 writeConcernMajorityJournalDefault 값과 관련 { w: "majority" } 동작이 나열되어 있습니다.

{ w: "majority" } 행동
true

MongoDB는 대다수의 투표 멤버가 온디스크 저널에 쓰기를 수행한 후에 쓰기 작업을 승인합니다.

중요

writeConcernMajorityJournalDefaulttrue일 때 복제본 세트의 모든 투표 멤버는 저널링과 함께 실행되어야 합니다.

복제본 세트의 투표 멤버가 인메모리 스토리지 엔진을 사용하는 경우 writeConcernMajorityJournalDefaultfalse 로 설정해야 합니다.

복제본 세트의 투표 멤버가 인메모리 스토리지 엔진 을 사용하고 writeConcernMajorityJournalDefaulttrue 인 경우 "majority" 쓰기 작업이 실패할 수 있습니다. 여기에는 replSetStepDown 명령과 같이 본질적으로 "majority" 쓰기 고려를 사용하는 작업이나 사용자 관리 메서드역할 관리메서드와 같이 기본적으로"majority"쓰기 고려를 사용하는 다양한mongosh메서드가 포함됩니다.

버전 4 부터 시작됩니다.2 ( 4.0.13 및 3.6.14 ), 복제본 세트 멤버가 인메모리 스토리지 엔진 (투표 또는 비투표)을 사용하지만 복제본 세트에 writeConcernMajorityJournalDefault 가 true로 설정되어 있으면 복제본 세트 멤버가 시작 경고를 기록합니다.

거짓

MongoDB는 대다수의 투표 멤버가 메모리에 작업을 적용한 후에 쓰기 작업을 승인합니다.

경고

복제본 세트의 투표 멤버가 인메모리 스토리지 엔진을 사용하는 경우 writeConcernMajorityJournalDefaultfalse 로 설정해야 합니다.

버전 4 부터 시작됩니다.2 ( 4.0.13 및 3.6.14 ), 복제본 세트 멤버가 인메모리 스토리지 엔진 (투표 또는 비투표)을 사용하지만 복제본 세트에 writeConcernMajorityJournalDefault 가 true로 설정되어 있으면 복제본 세트 멤버가 시작 경고를 기록합니다.

writeConcernMajorityJournalDefaultfalse 로 설정된 샤드가 있는 샤드 클러스터(예: 인메모리 스토리지 엔진 을 사용하는 투표 멤버가 있는 샤드)에서는 트랜잭션을 실행할 수 없습니다.

다음도 참조하세요.

members

유형: 배열

복제본 세트의 각 멤버에 대해 하나씩 멤버 구성 문서의 배열입니다. members 배열은 인덱스가 0인 배열입니다.

각 멤버별 구성 문서에는 다음 필드가 포함될 수 있습니다.

members[n]._id

유형: integer

복제본 세트에 있는 멤버의 정수 식별자이며, 모든 멤버 간에 고유합니다.

MongoDB 5.0부터 값은 0 이상의 정수 값일 수 있습니다. 이전에는 이 값이 0 부터 255까지의 정수로 제한되었습니다.

각 복제본 세트 멤버에는 고유한 _id 이 있어야 합니다. 현재 구성에서 해당 _id 를 사용하는 members[n] 항목이 없더라도 _id 값을 재사용하지 않도록 합니다.

한 번 설정하면 멤버의 _id 을(를) 변경할 수 없습니다.

참고

복제본 구성 객체를 업데이트할 때 배열 인덱스 가 있는 members 배열의 복제본 세트 멤버에 액세스합니다. 배열 인덱스는 로 시작합니다.0 이 인덱스 값을 members[n]._id 배열에 있는 각 문서의 필드 값과 members 혼동하지 마세요 .

members[n].host

유형: 문자열

세트 멤버의 호스트 이름 및 포트 번호(지정된 경우)입니다.

호스트 이름은 복제본 세트의 모든 호스트에서 해석할 수 있어야 합니다.

경고

members[n].host 는 세트의 모든 멤버가 localhost 로 리졸브되는 호스트에 있지 않는 한 localhost 또는 로컬 인터페이스로 리졸브되는 값을 보유할 수 없습니다.

members[n].arbiterOnly

선택 사항입니다.

유형: 부울

기본값: false

중재자를 식별하는 부울입니다. 값이 true이면 멤버가 중재자임을 나타냅니다.

rs.addArb() 메서드를 사용하여 중재자를 추가하는 경우 메서드는 추가된 멤버에 대해 자동으로 members[n].arbiterOnlytrue 로 설정합니다.

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

  • MongoDB 3.4.1

  • MongoDB 3.4.0

  • MongoDB 3.2.11 또는 이전 버전

복제본 세트 프로토콜 버전을 참조하세요.

members[n].buildIndexes

선택 사항입니다.

유형: 부울

기본값: true

mongod 가 이 멤버에 대한 인덱스 를 빌드하는지 여부를 나타내는 부울입니다. 복제본 세트에 멤버를 추가할 때만 이 값을 설정할 수 있습니다. 멤버를 세트에 추가한 후에는 members[n].buildIndexes 필드를 변경할 수 없습니다. 멤버를 추가하려면 rs.add()rs.reconfig() 를 참조하세요.

클라이언트로부터 쿼리를 받는 mongod 인스턴스의 경우 false로 설정하지 마세요.

다음 조건에 모두 해당하는 경우, buildIndexesfalse로 설정하는 것이 유용할 수 있습니다.

  • mongodump 을(를) 사용하여 백업을 수행하는 데만 이 인스턴스를 사용 하고있습니다.

  • 이 멤버는 쿼리를 받지 않습니다.

  • 인덱스 생성 및 유지 관리로 인해 호스트 시스템에 과부하가 걸립니다.

세컨더리는 false로 설정되더라도, 복제에 필요한 작업을 용이하게 하기 위해 _id 필드에 인덱스를 빌드할 것입니다.

경고

members[n].buildIndexes 을 로 설정한 false 경우 도 로 members[n].priority 설정해야 0 합니다. 이(가) 이(가)members[n].priority 아닌 0 경우, MongoDB는 가 인 멤버를 추가하려고 할 members[n].buildIndexes false때 오류를 반환합니다.

멤버가 쿼리를 받지 않도록 하려면 인덱스를 빌드하지 않는 모든 인스턴스를 숨겨야 합니다.

다른 세컨더리는 members[n].buildIndexes 이 false인 멤버로부터 복제할 수 없습니다.

members[n].hidden

선택 사항입니다.

유형: 부울

기본값: false

이 값이 true이면 복제본 세트는 이 인스턴스를 숨기고 해당 멤버를 db.hello() 또는 hello의 출력에 포함하지 않습니다. 이렇게 하면 읽기 작업(쿼리)이 세컨더리 읽기 설정을 통해 이 호스트에 도달할 수 없습니다.

숨겨진 멤버는 쓰기 고려 로 실행된 쓰기 작업을 승인할 수 있습니다. "majority" 쓰기 고려로 실행된 쓰기 작업의 경우 멤버도 투표 멤버여야 합니다(예: votes0 보다 큼).

members[n].priority

선택 사항입니다.

유형: 프라이머리/세컨더리의 경우 0에서 1,000 사이의 숫자입니다. 중재자의 경우 0 또는 1입니다.

기본값: 프라이머리/세컨더리는 1.0, 중재자는 0입니다.

복제본 세트 멤버가 프라이머리가 될 상대적인 가능성을 나타내는 숫자입니다.

  • 멤버가 프라이머리가 될 가능성을 높이려면 해당 멤버에 대해 더 높은 priority 값을 지정하세요.

  • 멤버가 프라이머리가 될 가능성을 낮추려면 해당 멤버에 대해 더 낮은 priority 값을 지정하세요.

멤버의 우선 순위를 변경하면 하나 이상의 투표가 트리거됩니다. 투표 알고리즘은 우선 순위가 가장 높은 멤버를 프라이머리로 선출하기 위해 최선의 조치를 취합니다. 하지만 우선 순위가 높은 세컨더리 멤버를 사용할 수 있는 경우에도 우선 순위가 더 낮은 멤버가 프라이머리 멤버가 될 수 있습니다.

만약 우선 순위가 더 낮은 멤버가 프라이머리가 되면, 서버는 우선 순위가 가장 높은 복제본 세트 멤버가 프라이머리가 될 때까지 주기적으로 투표를 계속 호출합니다. 투표 빈도는 선출된 멤버와 최우선 순위 멤버 간의 우선 순위 차이에 따라 달라집니다.

우선 순위가 0인 멤버는 프라이머리가 될 수 없습니다.

투표권이 없는 멤버( 가 로 설정된 멤버를 votes 0의미)의 우선 순위는 이어야 0 합니다.

members[n].tags

선택 사항입니다.

유형: 문서

기본값: 없음

tags 문서에는 복제본 세트 멤버를 위한 사용자 정의 태그 필드와 값 쌍이 포함되어 있습니다.

{ "<tag1>": "<string1>", "<tag2>": "<string2>",... }

자세한 내용은 복제본 세트 태그 세트 구성에서 확인하세요.

members[n].secondaryDelaySecs

선택 사항입니다.

유형: integer

기본값: 0

이 복제본 세트 멤버가 '지연'해야 하는 프라이머리보다 '뒤처지는' 시간(초)입니다.

이 옵션을 사용하여 지연 멤버를 생성할 수 있습니다. 지연 멤버는 과거 특정 시점의 데이터 상태를 반영하는 데이터 사본을 유지합니다.

지연 멤버는 쓰기 고려 로 실행된 쓰기 작업을 승인하는 데 기여할 수 있습니다. 그러나 구성된 지연 값보다 이전에는 쓰기 승인을 반환하지 않습니다. "majority" 쓰기 고려로 실행된 쓰기 작업의 경우 멤버도 투표 멤버여야 합니다(예: votes0 보다 큼).

members[n].votes

선택 사항입니다.

유형: integer

기본값: 1

서버가 복제본 세트 투표에서 투표할 투표권 수입니다. 각 멤버가 가진 투표권 수는 1 또는 0이며, 중재자는 항상 정확히 1개의 투표권을 갖습니다.

priority 가 0 보다 큰 멤버는 0 votes 를 가질 수 없습니다.

복제본 세트에는 최대 50 멤버 가 있을 수 있지만 투표권이 있는 멤버는 7 개만 있을 수 있습니다. 하나의 복제본 세트에 7 개 이상의 멤버가 필요한 경우, 투표권이 없는 추가 멤버에 대해 members[n].votes0 로 설정합니다.

투표권이 없는(즉, votes 0이(가) 인 경우) 회원은 중 priority 이상이어야 0 합니다.

MongoDB 5.0부터 새로 추가된 세컨더리는 투표 멤버로 간주되지 않으며, SECONDARY 상태에 도달할 때까지 선출될 수 없습니다.

투표권이 없는 멤버는 "majority" 쓰기 고려로 실행된 쓰기 작업을 승인할 수 없습니다.

settings

선택 사항입니다.

유형: 문서

전체 복제본 세트에 적용되는 구성 옵션이 포함된 문서입니다.

settings 문서에는 다음 필드가 포함되어 있습니다.

settings.chainingAllowed

선택 사항입니다.

유형: 부울

기본값: true

MongoDB 5.0.1 이하에서 settings.chainingAllowed 인 경우:

  • true로 설정하면 복제본 세트의 세컨더리 멤버가 다른 세컨더리 멤버의 데이터를 복제할 수 있습니다.

  • false(으)로 설정하면 세컨더리 멤버는 프라이머리의 데이터만 복제할 수 있습니다.

MongoDB 5 부터 시작.0.2:

다음도 참조하세요.

settings.getLastErrorDefaults

선택 사항입니다.

유형: 문서

MongoDB 5.0부터는 사용할 수 없습니다.

중요

MongoDB 5 부터 시작.0, 기본값 { w: 1, wtimeout: 0 } 이외의 settings.getLastErrorDefaults 로 기본 쓰기 고려를 지정할 수 없습니다. 대신 setDefaultRWConcern 명령을 사용하여 복제본 세트 또는 샤드 클러스터에 대한 기본 읽기 또는 쓰기 고려 구성을 설정합니다.

settings.getLastErrorModes

선택 사항입니다.

유형: 문서

를 사용하여 사용자 지정 쓰기 고려 를 정의하는 데 사용되는 members[n].tags 문서입니다. 사용자 지정 쓰기 고려는 데이터 센터 인식을 제공할 수 있습니다.

{ getLastErrorModes: {
<name of write concern> : { <tag1>: <number>, .... },
...
} }

<number> 는 쓰기 고려를 충족하는 데 필요한 다양한 태그 값의 수를 나타냅니다. 예를 들어, 다음 settings.getLastErrorModesdc 태그 값이 다른 두 멤버에게 쓰기를 전파해야 하는 datacenter 라는 쓰기 고려를 정의합니다.

{ getLastErrorModes: { datacenter: { "dc": 2 } } }

사용자 지정 쓰기 고려를 사용하려면 쓰기 고려 이름을 w 옵션으로 전달합니다. 그 예는 다음과 같습니다.

{ w: "datacenter" }

자세한 내용과 예제는 복제본 세트 태그 세트 구성에서 확인하세요.

settings.heartbeatTimeoutSecs

선택 사항입니다.

형식: int

기본값: 10

복제본 세트 멤버가 서로에게서 성공적인 하트비트를 기다리는 시간(초)입니다. 멤버가 시간 내에 응답하지 않으면 다른 멤버는 지연되는 해당 멤버를 액세스 불가로 표시합니다.

settings.electionTimeoutMillis

선택 사항입니다.

형식: int

기본값: 10000(10초)

복제본 세트의 프라이머리 세트에 연결할 수 없는 경우를 감지하기 위한 시간 제한(밀리초)입니다. 이 설정은 protocolVersion: 1 사용 시 페일오버 민감도를 제어합니다. 페일오버 시간 제한은 electionTimeoutMillis 값을 초과하지 않을 것으로 예상할 수 있습니다.

값을 선택할 때 다음 사항을 고려하세요.

  • 값이 높을수록 페일오버는 느려지지만, 프라이머리 노드나 네트워크의 속도 저하 또는 장애에 대한 민감도가 낮아집니다.

  • 값이 낮을수록 페일오버는 빨라지지만, 프라이머리 노드나 네트워크의 속도 저하 또는 장애에 대한 민감도가 높아집니다.

이 설정은 protocolVersion: 1 을(를) 사용할 때만 적용됩니다.

참고

force 필드를 true로 설정하지 않고 rs.stepDown() 또는 replSetStepDown을 사용하여 프라이머리를 강등하는 경우, 강등된 프라이머리는 즉시 투표를 호출할 수 있는 적격 세컨더리를 지명합니다.

settings.catchUpTimeoutMillis

선택 사항입니다.

형식: int

버전 3.6에서 변경된 사항:

기본값: -1, 캐치업 시간 무한대

새로 선출된 프라이머리가 더 최근 쓰기가 있을 수 있는 다른 복제본 세트 멤버와 동기화(캐치업)하는 데 걸리는 시간(밀리초)입니다. 무제한 또는 높은 시간 제한은 투표 후 다른 멤버가 롤백해야 하는 데이터의 양을 줄일 수 있지만, 페일오버 시간을 늘릴 수 있습니다.

새로 선출된 프라이머리는 복제본 세트의 다른 멤버들을 완전히 따라잡으면 캐치업 기간을 일찍 종료합니다. 캐치업 기간 동안 새로 선출된 프라이머리는 클라이언트의 쓰기에 사용할 수 없습니다. replSetAbortPrimaryCatchUp을 사용하여 캐치업을 중단한 다음 프라이머리로의 전환을 완료합니다.

이 설정은 protocolVersion: 1 을(를) 사용할 때만 적용됩니다.

참고

버전 3.6에서 시작된 복제본 세트를 3.4로 다운그레이드하려면 catchUpTimeoutMillis-1에서 양수로 변경하세요. 이 값을 양수로 설정하지 않으면 버전 3.4를 실행 중인 노드의 재시작이나 복제본 세트 합류가 이루어지지 않습니다.

settings.catchUpTakeoverDelayMillis

선택 사항입니다.

형식: int

기본값: 30000(30초)

노드가 현재 프라이머리보다 앞서 있다고 판단한 후 캐치업 테이크오버를 시작하기 위해 대기하는 시간(밀리초)입니다. 캐치업 테이크오버 중에 현재 프라이머리보다 앞선 노드가 복제본 세트의 새로운 프라이머리가 되기 위한 투표를 시작합니다.

테이크오버를 시작한 노드가 현재 프라이머리보다 앞서 있다고 판단한 후, 지정된 시간(밀리초) 동안 기다린 후 다음을 확인합니다.

  1. 여전히 현재 프라이머리보다 앞서 있습니다.

  2. 사용 가능한 모든 노드 중 가장 최신 노드입니다.

  3. 현재 프라이머리가 이를 따라잡고 있습니다.

이러한 조건이 모두 충족된다고 판단되면 테이크오버를 시작하는 노드가 즉시 투표 후보에 오릅니다.

복제본 세트 투표에 관한 자세한 내용은 복제본 세트 투표에서 확인하세요.

참고

catchUpTakeoverDelayMillis-1 로 설정하면 캐치업 테이크오버가 비활성화됩니다. catchUpTimeoutMillis0 로 설정하면 프라이머리 캐치업 이 비활성화되고 결과적으로 캐치업 테이크오버도 비활성화됩니다.

settings.heartbeatIntervalMillis

내부용으로만 사용하세요.

하트비트의 밀리초 단위 주파수입니다.

settings.replicaSetId

유형: 객체 ID

복제본 세트와 연결되어 있고 rs.initiate() 또는 replSetInitiate 중에 자동으로 생성된 ObjectId입니다. replicaSetId 변경할 수 없습니다.

← 복제 참조