Docs Menu
Docs Home
/
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은 재구성을 수행한 기본 복제본 세트 프라이머리의 텀과 일치합니다. 프라이머리는 투표에서 승리한 후 등급이 올라갈 때마다 텀이 증가합니다. 프라이머리는 replSetReconfig 작업에서 명시적으로 설정된 경우 term 필드를 무시합니다.

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

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

configsvr

유형: 부울

기본값: false

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

protocolVersion

유형: 숫자

기본값: 1

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

writeConcernMajorityJournalDefault

유형: 부울

기본값: true

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

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

{ w: "majority" } 행동
true

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

중요: writeConcernMajorityJournalDefaulttrue 일 때 복제 세트의 모든 투표 구성원은 저널링과 함께 실행해야 합니다.

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

복제본 세트의 투표 노드가 인메모리 스토리지 엔진을 사용하며 writeConcernMajorityJournalDefaulttrue인 경우, "majority" 쓰기 (write) 작업은 실패할 수 있습니다. 여기에는 replSetStepDown명령 등 본질적으로 "majority" 쓰기 고려 (write concern)를 사용하는 작업이나 사용자 관리 메서드역할 관리 메서드 등 기본값으로 "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 배열에 있는 members[n]._id 필드 값으로 혼동하지 마세요.

members[n].host

유형: 문자열

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

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

경고

members[n].host는 세트의 모든 멤버가 localhost로 해석되는 호스트에 있지 않은 이상, localhost 또는 로컬 인터페이스로 해석되는 값을 가질 수 없습니다.

members[n].arbiterOnly

선택 사항입니다.

유형: 부울

기본값: false

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

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

members[n].buildIndexes

선택 사항입니다.

유형: 부울

기본값: true

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

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

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

  • 이 인스턴스는 mongodump를 사용하여 백업을 수행하는 데만 사용하고 있

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

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

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

경고

members[n].buildIndexesfalse로 설정하는 경우 members[n].priority도 반드시 0으로 설정해야 합니다. members[n].priority0이 아닌 경우, false와 동일한 members[n].buildIndexes가 있는 노드를 추가하려고 하면 MongoDB는 오류를 반환합니다.

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

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

members[n].hidden

선택 사항입니다.

유형: 부울

기본값: false

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

숨겨진 멤버는 쓰기 고려 (write concern)로 실행된 쓰기 (write) 작업을 승인할 수 있습니다. "majority" 쓰기 고려 (write concern)로 실행된 쓰기 (write) 작업의 경우, 반드시 해당 노드도 투표권이 있는 노드여야 합니다(즉, votes0보다 큼).

members[n].priority

선택 사항입니다.

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

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

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

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

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

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

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

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

투표권이 없는 노드(votes0으로 설정된 노드)는 우선 순위가 반드시 0이어야 합니다.

다음도 참조하세요.

members[n].tags

선택 사항입니다.

유형: 문서

기본값: 없음

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

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

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

members[n].secondaryDelaySecs

선택 사항입니다.

유형: integer

기본값: 0

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

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

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

members[n].votes

선택 사항입니다.

유형: integer

기본값: 1

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

priority가 0보다 큰 노드는 votes 0개를 가질 수 없습니다.

복제본 세트는 최대 노드 50개를 포함할 수 있지만 투표권을 가진 노드는 7개뿐입니다. 복제본 세트 한 개에 7개가 넘는 노드가 필요한 경우, 투표권이 없는 추가 노드에 대해 members[n].votes0으로 설정합니다.

투표권이 없는(즉, votes0임) 노드는 반드시 0인 priority가 있어야 합니다.

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 기본 쓰기 고려 (write concern)를 지정할 수 없습니다. 대신 setDefaultRWConcern 명령을 사용하여 복제본 세트 또는 샤딩된 클러스터에 대한 기본 읽기 또는 쓰기 고려 (write concern) 구성을 설정합니다.

settings.getLastErrorModes

선택 사항입니다.

유형: 문서

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

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

<number>는 쓰기 고려 (write concern)를 충족하기 위해 필요한 다양한 태그 값을 나타냅니다. 예를 들어, 다음의 settings.getLastErrorModesdc 태그 값이 다른 노드 두 개에 쓰기 (write)를 전파해야 하는, datacenter라는 이름의 쓰기 고려 (write concern)를 정의합니다.

{ 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

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

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

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

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

settings.catchUpTakeoverDelayMillis

선택 사항입니다.

형식: int

기본값: 30000(30초)

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

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

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

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

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

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

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

참고

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

settings.heartbeatIntervalMillis

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

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

settings.replicaSetId

유형: ObjectId

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

돌아가기

참조