자체 관리형 복제본 세트 구성
이 페이지의 내용
복제본 세트의 구성을 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
의 값과 동일해야 합니다.
version
형식: int
구성의 이전 버전과 복제본 세트 구성 문서의 개정판을 구별하는 데 사용되는 증분 번호입니다.
복제본 세트 멤버는
term
과version
을 사용하여 '최신' 복제본 구성에 관한 합의를 도출합니다. 멤버가 복제본 구성 문서를 비교할 때term
값이 더 큰 구성 문서가 '최신' 문서로 간주됩니다.term
이 같거나 없는 경우,version
값이 더 큰 구성 문서가 '최신'으로 간주됩니다.
term
형식: int
featureCompatibilityVersion(fCV) '4.4' 이상이어야 합니다.
구성의 이전 반복과 복제본 세트 구성 문서의 개정판을 구별하는 데 사용되는 증분 번호입니다. 구성 문서의
term
은 재구성을 수행한 기본 복제본 세트 프라이머리의 텀과 일치합니다. 프라이머리는 투표에서 승리한 후 등급이 올라갈 때마다 텀이 증가합니다. 프라이머리는replSetReconfig
작업에서 명시적으로 설정된 경우term
필드를 무시합니다.강제 재구성을 실행하면
term
필드가 제거됩니다. 이후에 프라이머리가replSetReconfig
를 강제성 없이 실행하는 경우, 자체 텀에term
을 설정합니다.복제본 세트 멤버는
term
과version
을 사용하여 '최신' 복제본 구성에 관한 합의를 도출합니다. 멤버가 복제본 구성 문서를 비교할 때term
값이 더 큰 구성 문서가 '최신' 문서로 간주됩니다.term
이 같거나 없는 경우,version
값이 더 큰 구성 문서가 '최신'으로 간주됩니다.
configsvr
유형: 부울
기본값: false
샤딩된 클러스터의 config 서버에 복제본 세트를 사용할지 여부를 나타냅니다. 복제본 세트가 샤딩된 클러스터의 config 서버용인 경우
true
로 설정합니다.
writeConcernMajorityJournalDefault
유형: 부울
기본값: true
쓰기 고려가 저널 옵션 j를 명시적으로 지정하지 않은 경우
{ w: "majority" }
쓰기 고려의 동작을 결정합니다.다음 표에는
writeConcernMajorityJournalDefault
값과 관련{ w: "majority" }
동작이 나열되어 있습니다.값{ w: "majority" }
행동trueMongoDB는 대다수의 투표 멤버가 온디스크 저널에 쓰기를 수행한 후에 쓰기 작업을 승인합니다.
중요:
writeConcernMajorityJournalDefault
가true
일 때 복제 세트의 모든 투표 구성원은 저널링과 함께 실행해야 합니다.복제본 세트의 투표 멤버가 인메모리 스토리지 엔진을 사용하는 경우
writeConcernMajorityJournalDefault
를false
로 설정해야 합니다.복제본 세트의 투표 노드가 인메모리 스토리지 엔진을 사용하며
writeConcernMajorityJournalDefault
가true
인 경우,"majority"
쓰기 (write) 작업은 실패할 수 있습니다. 여기에는replSetStepDown
명령 등 본질적으로"majority"
쓰기 고려 (write concern)를 사용하는 작업이나 사용자 관리 메서드 및 역할 관리 메서드 등 기본값으로"majority"
를 사용하는 다양한mongosh
메서드를 포함합니다.버전 4.2(4.0.13 및 3.6.14 포함)부터, 복제본 세트 멤버가 인메모리 스토리지 엔진(투표 또는 비투표)을 사용하지만 복제본 세트의
writeConcernMajorityJournalDefault
가 'true'로 설정된 경우, 복제본 세트 멤버는 시작 경고를 기록합니다.거짓MongoDB는 대다수의 투표 멤버가 메모리에 작업을 적용한 후에 쓰기 작업을 승인합니다.
경고:
복제본 세트의 투표 멤버가 인메모리 스토리지 엔진을 사용하는 경우
writeConcernMajorityJournalDefault
를false
로 설정해야 합니다.버전 4.2(4.0.13 및 3.6.14 포함)부터, 복제본 세트 멤버가 인메모리 스토리지 엔진(투표 또는 비투표)을 사용하지만 복제본 세트의
writeConcernMajorityJournalDefault
가 'true'로 설정된 경우, 복제본 세트 멤버는 시작 경고를 기록합니다.writeConcernMajorityJournalDefault
가false
로 설정된 샤드가 있는 샤딩된 클러스터(예: 인메모리 스토리지 엔진을 사용하는 투표 멤버가 있는 샤드)에서는 트랜잭션을 실행할 수 없습니다.
members
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].arbiterOnly
를true
로 자동 설정합니다.
members[n].buildIndexes
선택 사항입니다.
유형: 부울
기본값: true
mongod
가 이 멤버에 대해 인덱스를 빌드하는지 여부를 나타내는 부울입니다. 복제본 세트에 노드를 추가할 때만 이 값을 설정할 수 있습니다. 노드를 세트에 추가한 후에는members[n].buildIndexes
필드를 변경할 수 없습니다. 노드를 추가하려면rs.add()
및rs.reconfig()
를 참조하세요.클라이언트로부터 쿼리를 받는
mongod
인스턴스의 경우false
로 설정하지 마세요.다음 조건에 모두 해당하는 경우,
buildIndexes
를false
로 설정하는 것이 유용할 수 있습니다.이 인스턴스는
mongodump
를 사용하여 백업을 수행하는 데만 사용하고 있고이 멤버는 쿼리를 받지 않습니다.
인덱스 생성 및 유지 관리로 인해 호스트 시스템에 과부하가 걸립니다.
세컨더리는
false
로 설정되더라도, 복제에 필요한 작업을 용이하게 하기 위해_id
필드에 인덱스를 빌드할 것입니다.경고
members[n].buildIndexes
를false
로 설정하는 경우members[n].priority
도 반드시0
으로 설정해야 합니다.members[n].priority
가0
이 아닌 경우,false
와 동일한members[n].buildIndexes
가 있는 노드를 추가하려고 하면 MongoDB는 오류를 반환합니다.멤버가 쿼리를 받지 않도록 하려면 인덱스를 빌드하지 않는 모든 인스턴스를 숨겨야 합니다.
다른 세컨더리는
members[n].buildIndexes
가 false인 노드로부터 복제할 수 없습니다.
members[n].hidden
선택 사항입니다.
유형: 부울
기본값: false
이 값이
true
이면 복제본 세트는 이 인스턴스를 숨기고 해당 멤버를db.hello()
또는hello
의 출력에 포함하지 않습니다. 이렇게 하면 읽기 작업(쿼리)이 세컨더리 읽기 설정을 통해 이 호스트에 도달할 수 없습니다.숨겨진 멤버는 쓰기 고려 (write concern)로 실행된 쓰기 (write) 작업을 승인할 수 있습니다.
"majority"
쓰기 고려 (write concern)로 실행된 쓰기 (write) 작업의 경우, 반드시 해당 노드도 투표권이 있는 노드여야 합니다(즉,votes
가0
보다 큼).
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>",... } 읽기 작업의 경우, 읽기 설정에서 태그 세트를 지정하여 지정된 해당 태그가 있는 복제본 세트 멤버에게 작업을 지시할 수 있습니다.
쓰기 (write) 작업의 경우
settings.getLastErrorModes
및settings.getLastErrorDefaults
를 사용하여 사용자 정의 쓰기 고려 (write concern) 생성할 수 있습니다.
자세한 내용은 복제본 세트 태그 세트 구성에서 확인하세요.
members[n].secondaryDelaySecs
선택 사항입니다.
유형: integer
기본값: 0
이 복제본 세트 멤버가 '지연'해야 하는 프라이머리보다 '뒤처지는' 시간(초)입니다.
이 옵션을 사용하여 지연 멤버를 생성할 수 있습니다. 지연 멤버는 과거 특정 시점의 데이터 상태를 반영하는 데이터 사본을 유지합니다.
지연 멤버는 쓰기 고려 (write concern)로 실행된 쓰기 (write) 작업을 승인하는 데 기여할 수 있습니다. 그러나 구성된 지연 값 이전에는 쓰기 (write) 승인을 반환하지 않습니다.
"majority"
쓰기 고려 (write concern)로 실행된 쓰기 (write) 작업의 경우, 해당 노드도 투표권이 있는 노드여야 합니다(즉,votes
가0
보다 큼).
members[n].votes
선택 사항입니다.
유형: integer
기본값: 1
서버가 복제본 세트 투표에서 투표할 투표권 수입니다. 각 멤버가 가진 투표권 수는
1
또는0
이며, 중재자는 항상 정확히1
개의 투표권을 갖습니다.priority
가 0보다 큰 노드는votes
0개를 가질 수 없습니다.복제본 세트는 최대 노드 50개를 포함할 수 있지만 투표권을 가진 노드는 7개뿐입니다. 복제본 세트 한 개에 7개가 넘는 노드가 필요한 경우, 투표권이 없는 추가 노드에 대해
members[n].votes
를0
으로 설정합니다.투표권이 없는(즉,
votes
가0
임) 노드는 반드시 0인priority
가 있어야 합니다.MongoDB 5.0부터 새로 추가된 세컨더리는 투표 멤버로 간주되지 않으며,
SECONDARY
상태에 도달할 때까지 선출될 수 없습니다.투표권이 없는 멤버는
"majority"
쓰기 고려로 실행된 쓰기 작업을 승인할 수 없습니다.
settings
settings
선택 사항입니다.
유형: 문서
전체 복제본 세트에 적용되는 구성 옵션이 포함된 문서입니다.
settings
문서에는 다음 필드가 포함되어 있습니다.settings.chainingAllowed
선택 사항입니다.
유형: 부울
기본값: true
MongoDB 5.0.1 이전 버전에서는
settings.chainingAllowed
가 다음인 경우,true
로 설정하면 복제본 세트의 세컨더리 멤버가 다른 세컨더리 멤버의 데이터를 복제할 수 있습니다.false
(으)로 설정하면 세컨더리 멤버는 프라이머리의 데이터만 복제할 수 있습니다.
MongoDB 5.0.2부터는
복제본 세트의 세컨더리 노드는
settings.chainingAllowed
가false
인 경우에도 다른 세컨더리 노드의 데이터를 복제할 수 있습니다.settings.chainingAllowed
를 재정의하려면enableOverrideClusterChainingSetting
서버 매개 변수를true
로 설정하세요.enableOverrideClusterChainingSetting
의 기본값은false
입니다.
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.getLastErrorModes
는dc
태그 값이 다른 노드 두 개에 쓰기 (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초)
노드가 현재 프라이머리보다 앞서 있다고 판단한 후 캐치업 테이크오버를 시작하기 위해 대기하는 시간(밀리초)입니다. 캐치업 테이크오버 중에 현재 프라이머리보다 앞선 노드가 복제본 세트의 새로운 프라이머리가 되기 위한 투표를 시작합니다.
테이크오버를 시작한 노드가 현재 프라이머리보다 앞서 있다고 판단한 후, 지정된 시간(밀리초) 동안 기다린 후 다음을 확인합니다.
여전히 현재 프라이머리보다 앞서 있습니다.
사용 가능한 모든 노드 중 가장 최신 노드입니다.
현재 프라이머리가 이를 따라잡고 있습니다.
이러한 조건이 모두 충족된다고 판단되면 테이크오버를 시작하는 노드가 즉시 투표 후보에 오릅니다.
복제본 세트 투표에 관한 자세한 내용은 복제본 세트 투표에서 확인하세요.
참고
catchUpTakeoverDelayMillis
를-1
로 설정하면 캐치업 테이크오버가 비활성화됩니다.catchUpTimeoutMillis
를0
으로 설정하면 프라이머리 캐치업이 비활성화되고 결과적으로 캐치업 테이크오버도 비활성화됩니다.
settings.replicaSetId
유형: ObjectId
복제본 세트와 연결되어 있고
rs.initiate()
또는replSetInitiate
동안 자동으로 생성된 ObjectId입니다.replicaSetId
를 변경할 수 없습니다.