문서 홈 → 애플리케이션 개발 → 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
구성의 이전 버전과 복제본 세트 구성 문서의 개정판을 구별하는 데 사용되는 증분 번호입니다.
복제본 세트 멤버는
term
및version
를 사용하여 '최신' 복제본 구성에 대한 합의를 도출합니다. 멤버가 복제본 구성 문서를 비교할 때term
값이 더 큰 구성 문서가 '최신' 문서로 간주됩니다.term
이 같거나 없는 경우,version
값이 더 큰 구성 문서가 '최신'으로 간주됩니다.
term
형식: int
featureCompatibilityVersion(fCV) '4.4' 이상이어야 합니다.
복제본 세트 구성 문서의 수정본을 구성의 이전 이터레이션과 구별하는 데 사용되는 증분 숫자입니다.
term
구성 문서의 는 재구성을 수행한 복제본 세트 프라이머리 의 텀과 일치합니다. 프라이머리 는 선거에서 승리한 후 등급이 올라갈 때마다 텀이 증가합니다. 프라이머리는term
연산에서 명시적으로 설정된 경우 필드를replSetReconfig
무시합니다.강제 재구성을 실행하면
term
필드가 제거됩니다. 다음에 프라이머리가replSetReconfig
를 강제성 없이 발행할 때, 자체 텀에term
를 설정합니다.복제본 세트 멤버는
term
및version
를 사용하여 '최신' 복제본 구성에 대한 합의를 도출합니다. 멤버가 복제본 구성 문서를 비교할 때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" }
행동trueMongoDB는 대다수의 투표 멤버가 온디스크 저널에 쓰기를 수행한 후에 쓰기 작업을 승인합니다.
중요
writeConcernMajorityJournalDefault
가true
일 때 복제본 세트의 모든 투표 멤버는 저널링과 함께 실행되어야 합니다.복제본 세트의 투표 멤버가 인메모리 스토리지 엔진을 사용하는 경우
writeConcernMajorityJournalDefault
을false
로 설정해야 합니다.복제본 세트의 투표 멤버가 인메모리 스토리지 엔진 을 사용하고
writeConcernMajorityJournalDefault
가true
인 경우"majority"
쓰기 작업이 실패할 수 있습니다. 여기에는replSetStepDown
명령과 같이 본질적으로"majority"
쓰기 고려를 사용하는 작업이나 사용자 관리 메서드 및 역할 관리메서드와 같이 기본적으로"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[n]._id
배열에 있는 각 문서의 필드 값과members
혼동하지 마세요 .
members[n].host
유형: 문자열
세트 멤버의 호스트 이름 및 포트 번호(지정된 경우)입니다.
호스트 이름은 복제본 세트의 모든 호스트에서 해석할 수 있어야 합니다.
경고
members[n].host
는 세트의 모든 멤버가localhost
로 리졸브되는 호스트에 있지 않는 한localhost
또는 로컬 인터페이스로 리졸브되는 값을 보유할 수 없습니다.
members[n].arbiterOnly
선택 사항입니다.
유형: 부울
기본값: false
중재자를 식별하는 부울입니다. 값이
true
이면 멤버가 중재자임을 나타냅니다.rs.addArb()
메서드를 사용하여 중재자를 추가하는 경우 메서드는 추가된 멤버에 대해 자동으로members[n].arbiterOnly
를true
로 설정합니다.다음 MongoDB 버전에서 중재자가 있는 복제본 세트의 경우
pv1
은pv0
(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
로 설정하지 마세요.다음 조건에 모두 해당하는 경우,
buildIndexes
를false
로 설정하는 것이 유용할 수 있습니다.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"
쓰기 고려로 실행된 쓰기 작업의 경우 멤버도 투표 멤버여야 합니다(예: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>",... } 읽기 작업의 경우, 읽기 설정에서 태그 세트를 지정하여 지정된 해당 태그가 있는 복제본 세트 멤버에게 작업을 지시할 수 있습니다.
쓰기 작업의 경우 및 를
settings.getLastErrorModes
사용하여 사용자 지정 쓰기 고려 를settings.getLastErrorDefaults
생성할 수 있습니다.
자세한 내용은 복제본 세트 태그 세트 구성에서 확인하세요.
members[n].secondaryDelaySecs
선택 사항입니다.
유형: integer
기본값: 0
이 복제본 세트 멤버가 '지연'해야 하는 프라이머리보다 '뒤처지는' 시간(초)입니다.
이 옵션을 사용하여 지연 멤버를 생성할 수 있습니다. 지연 멤버는 과거 특정 시점의 데이터 상태를 반영하는 데이터 사본을 유지합니다.
지연 멤버는 쓰기 고려 로 실행된 쓰기 작업을 승인하는 데 기여할 수 있습니다. 그러나 구성된 지연 값보다 이전에는 쓰기 승인을 반환하지 않습니다.
"majority"
쓰기 고려로 실행된 쓰기 작업의 경우 멤버도 투표 멤버여야 합니다(예:votes
가0
보다 큼).팁
다음도 참조하세요.
members[n].votes
선택 사항입니다.
유형: integer
기본값: 1
서버가 복제본 세트 투표에서 투표할 투표권 수입니다. 각 멤버가 가진 투표권 수는
1
또는0
이며, 중재자는 항상 정확히1
개의 투표권을 갖습니다.priority
가 0 보다 큰 멤버는 0votes
를 가질 수 없습니다.복제본 세트에는 최대 50 멤버 가 있을 수 있지만 투표권이 있는 멤버는 7 개만 있을 수 있습니다. 하나의 복제본 세트에 7 개 이상의 멤버가 필요한 경우, 투표권이 없는 추가 멤버에 대해
members[n].votes
를0
로 설정합니다.투표권이 없는(즉,
votes
0
이(가) 인 경우) 회원은 중priority
이상이어야 0 합니다.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
로 기본 쓰기 고려를 지정할 수 없습니다. 대신setDefaultRWConcern
명령을 사용하여 복제본 세트 또는 샤드 클러스터에 대한 기본 읽기 또는 쓰기 고려 구성을 설정합니다.
settings.getLastErrorModes
선택 사항입니다.
유형: 문서
를 사용하여 사용자 지정 쓰기 고려 를 정의하는 데 사용되는
members[n].tags
문서입니다. 사용자 지정 쓰기 고려는 데이터 센터 인식을 제공할 수 있습니다.{ getLastErrorModes: { <name of write concern> : { <tag1>: <number>, .... }, ... } } <number>
는 쓰기 고려를 충족하는 데 필요한 다양한 태그 값의 수를 나타냅니다. 예를 들어, 다음settings.getLastErrorModes
는dc
태그 값이 다른 두 멤버에게 쓰기를 전파해야 하는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초)
노드가 현재 프라이머리보다 앞서 있다고 판단한 후 캐치업 테이크오버를 시작하기 위해 대기하는 시간(밀리초)입니다. 캐치업 테이크오버 중에 현재 프라이머리보다 앞선 노드가 복제본 세트의 새로운 프라이머리가 되기 위한 투표를 시작합니다.
테이크오버를 시작한 노드가 현재 프라이머리보다 앞서 있다고 판단한 후, 지정된 시간(밀리초) 동안 기다린 후 다음을 확인합니다.
여전히 현재 프라이머리보다 앞서 있습니다.
사용 가능한 모든 노드 중 가장 최신 노드입니다.
현재 프라이머리가 이를 따라잡고 있습니다.
이러한 조건이 모두 충족된다고 판단되면 테이크오버를 시작하는 노드가 즉시 투표 후보에 오릅니다.
복제본 세트 투표에 관한 자세한 내용은 복제본 세트 투표에서 확인하세요.
참고
catchUpTakeoverDelayMillis
를-1
로 설정하면 캐치업 테이크오버가 비활성화됩니다.catchUpTimeoutMillis
를0
로 설정하면 프라이머리 캐치업 이 비활성화되고 결과적으로 캐치업 테이크오버도 비활성화됩니다.
settings.replicaSetId
유형: 객체 ID
복제본 세트와 연결되어 있고
rs.initiate()
또는replSetInitiate
중에 자동으로 생성된 ObjectId입니다.replicaSetId
변경할 수 없습니다.