문서 메뉴

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

rs.reconfig()

이 페이지의 내용

  • 정의
  • 행동
  • 예제
rs.reconfig( configuration, { options } )

기존 복제본 세트 구성을 덮어써 기존 복제본 세트를 재구성합니다. 메서드를 실행하려면 복제본 세트의 프라이머리에 연결해야 합니다.

중요

Mongo쉬 방법

이 페이지에서는 mongosh 메서드를 설명합니다. 이는 데이터베이스 명령이나 Node.js와 같은 언어별 드라이버에 대한 설명서가 아닙니다 .

데이터베이스 명령에 대해서는 replSetReconfig 명령을 참조하십시오.

MongoDB API 드라이버의 경우 언어별 MongoDB 드라이버 설명서를 참조하세요.

레거시 mongo 셸 문서는 해당 MongoDB 서버 릴리스 문서를 참조하세요.

Mongo 셸 V4.4

rs.reconfig() 메서드의 구문은 다음과 같습니다.

rs.reconfig(
<configuration>,
{
"force" : <boolean>,
"maxTimeMS" : <int>
}
)
매개변수
유형
설명

구성

문서
복제본 세트의 구성을 지정하는 문서입니다.
부울

옵션

사용 가능한 복제본 세트 구성원이 새 구성을 수락하도록 하려면 true 지정합니다. 기본값은 false입니다.

강제 재구성으로 인해 개의 "majority" 커밋된 쓰기 롤백을 포함하여 예기치 않거나 원치 않는 동작이 발생할 수 있습니다.

integer

옵션

rs.reconfig() 작업을 처리하는 데 걸리는 누적 시간 제한을 밀리초 단위로 지정합니다. 기본적으로 rs.reconfig() 는 복제본 구성이 대부분의 복제본 세트 멤버에 전파될 때까지 무기한 대기합니다.

기존 복제본 세트를 재구성하려면 먼저 rs.conf() 를 사용하여 현재 구성을 조회하고 필요에 따라 구성 문서를 수정한 다음 수정된 문서를 rs.reconfig() 에 전달합니다.

force 매개 변수를 사용하면 프라이머리 노드가 아닌 노드에 재구성 명령을 실행할 수 있습니다.

MongoDB 5.0부터는 암시적 기본 쓰기 우려를 변경하는 구성으로 복제본 집합을 재구성하기 전에 글로벌 기본 쓰기 우려를 명시적으로 설정해야 합니다. 글로벌 기본 쓰기 우려를 설정하려면 setDefaultRWConcern 명령을 사용합니다.

term 필드는 프라이머리 복제본 세트 멤버가 설정합니다. 프라이머리는 term 연산에서 rs.reconfig() 명시적으로 설정된 경우 필드를 무시합니다.

기본적으로 한 번에 이하의 멤버를rs.reconfig() 추가하거나 제거할 수 1 voting 있습니다. 예를 들어, 새 구성은 클러스터에 대해 membership 다음 중 하나만 변경할 수 있습니다.

  • 새 투표 복제본 세트 멤버 추가하기.

  • 기존 투표 복제본 세트 구성원 제거하기.

  • 기존 복제본 세트 구성원에 대한 votes 을 수정합니다.

여러 투표 멤버를 추가하거나 제거하려면 rs.reconfig() 작업을 연속으로 실행하여 한 번에 한 명의 멤버를 추가하거나 제거합니다.

강제 재구성을 실행하면 여러 투표 멤버를 추가하거나 제거하더라도 새 구성이 즉시 설치됩니다. 강제 재구성은 "majority" 커밋된 쓰기 작업의 롤백과 같은 예기치 않은 동작을 일으킬 수 있습니다.

rs.reconfig() 는 투표권을 가진 복제본 세트 구성원의 과반수가 새 복제본 구성을 설치할 때까지 기다렸다가 성공을 반환합니다. 투표 멤버는 members[n].votes 1중재자를 포함하여 가 인 모든 복제본 세트 멤버입니다.

복제본 세트 멤버는 하트비트를 통해 복제본 구성을 전파합니다. 구성원이 versionterm 이상의 구성을 알게 될 때마다 새 구성을 설치합니다. 재구성 프로세스에는 두 가지 뚜렷한 '대기' 단계가 있습니다:

1) 새 구성을 설치하기 전에 현재 구성이 커밋 될 때까지 기다립니다.

"현재" 구성은 rs.reconfig() 가 발행된 시점에 프라이머리에서 사용 중인 복제본 구성을 나타냅니다.

구성이 커밋되는 시점은 다음과 같습니다:

  • 대다수의 투표 복제 세트 구성원이 현재 구성을 설치했습니다 .

  • 이전 구성에서 "majority" 커밋된 모든 쓰기가 현재 구성의 과반수에도 복제되었습니다.

일반적으로 현재 구성은 대부분의 투표 복제 세트 구성원에 이미 설치되어 있습니다. 하지만 이전 구성에서 커밋된 쓰기 중 대다수가 현재 구성에서 모두 커밋되지는 않을 수 있습니다. Delayed { 2}명의 멤버 또는 lagging behind 명인 멤버는 이 단계에 소요되는 시간을 늘릴 수 있습니다.

maxTimeMS 제한 있는 작업이 실행되었고 대기 중에 작업이 제한을 초과하는 경우 작업은 오류를 반환하고 새 구성을 삭제합니다. 한도는 누적 되며 다음 단계로 진행된 후에도 재설정되지 않습니다.

2) 새 구성에서 투표 회원의 대다수가 새 구성을 설치할 때까지 기다립니다.

"새" 구성은 rs.reconfig() 에 지정된 복제본 구성을 나타냅니다.

프라이머리는 나머지 복제본 세트 멤버에게 구성을 전파하기 전에 새 복제본 구성을 설치하고 사용하기 시작합니다. 이 작업은 투표 멤버 과반수가 새 구성을 설치할 때까지만 기다리며, 새 구성이 커밋될 때까지 기다릴 필요가 없습니다.

maxTimeMS 제한 있는 작업이 실행되었고 대기 중에 작업이 제한을 초과하는 경우 작업은 오류를 반환 하지만 새 구성을 계속 사용하고 전파합니다.

강제 재구성을 실행하면 이전 구성의 커밋 상태에 관계없이 새 구성이 즉시 설치됩니다. 강제 재구성은 "majority" 커밋된 쓰기 작업의 롤백과 같은 예기치 않은 동작을 일으킬 수 있습니다.

현재 복제본 구성의 커미트먼트 상태를 확인하려면 replSetGetConfig 복제본 집합 기본에서 커미트먼트 상태 매개변수와 함께 를 실행합니다.

액세스 제어를 적용하는 배포에서 이 메서드를 실행하려면 사용자에게 클러스터 리소스에 대한 replSetConfigure 조치 권한 작업이 있어야 합니다. admin 데이터베이스에서 사용할 수 있는 기본 제공 역할 clusterManager는 이 명령에 필요한 권한을 제공합니다.

rs.reconfig() 은(는) 동시에 둘 이상의 rs.reconfig() 작업이 발생하지 않도록 상호 배타적 특수 잠금을 얻습니다.

경고

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

셸 메서드는 일부 상황에서 현재 프라이머리가 rs.reconfig() 강등되도록 트리거할 수 있습니다. 프라이머리가 강등되면 새로운 프라이머리 를 선출 하기 위한 투표가 시작됩니다.

MongoDB 4.2부터 프라이머리 단계가 중단되면 더 이상 모든 클라이언트 연결이 닫히지 않으며 진행 중이던 쓰기가 종료됩니다. 자세한 내용은 동작을 참조하세요.

클러스터가 새 프라이머리를 선택하기까지의 시간 중앙값은 기본값 replica configuration settings 가정할 때 일반적으로 12초를 초과하지 않아야 합니다. 여기에는 예비선거를 사용할 수 없는 상태로 표시하고 전화를 걸어 선거를 완료하는 데 필요한 시간이 포함됩니다. settings.electionTimeoutMillis 복제 구성 옵션을 수정하여 이 기간을 조정할 수 있습니다. 네트워크 지연 시간 등 여러 요인으로 인해 복제본 세트 선택을 마치는 데 필요한 시간이 길어질 수 있습니다. 이렇게 되면 결국 프라이머리 노드 없이 클러스터가 작동할 수 있는 시간의 양에 영향을 미칠 수 있습니다. 이러한 요인들은 특정 클러스터 아키텍처에 따라 달라집니다.

선택 프로세스 중에 클러스터는 새 기본을 선택할 때까지 쓰기 작업을 수락할 수 없습니다.

애플리케이션 연결 로직에는 자동 페일오버 및 후속 투표에 대한 허용 범위가 포함되어야 합니다. MongoDB 드라이버는 프라이머리의 손실을 감지하고 특정 쓰기 작업을 한 번만 자동으로 재시도할 수 있으며, 자동 페일오버 및 투표에 대한 추가 기본 처리 기능을 제공합니다.

호환 가능한 드라이버는 기본적으로 재시도 가능 쓰기를 허용

운영 클러스터에 미치는 잠재적 영향을 더욱 줄이려면 예약된 유지 관리 기간 동안에만 재구성하십시오.

경고

을 와 함께 rs.reconfig() { force: true } 사용하면 과반수가 커밋된 쓰기가 롤백 될 수 있습니다. 이 옵션을 사용할 때는 주의하세요.

rs.reconfig() 를 사용하여 복제본 세트 멤버를 제거해도 다른 복제본 세트 멤버에서 제거된 멤버로 열려 있는 발신 연결이 자동으로 삭제되지는 않습니다.

기본적으로 복제 세트 구성원은 제거된 구성원에 대한 연결을 삭제하기 전에 5분 동안 기다립니다. 샤드된 복제본 세트에서는 ShardingTaskExecutorPoolHostTimeoutMS 서버 매개변수를 사용하여 이 시간 제한을 수정할 수 있습니다.

버전 4.2에 추가: 복제본 세트에서 제거된 구성원으로 나가는 모든 연결을 즉시 삭제하려면 복제본 세트의 나머지 각 구성원에 대해 dropConnections 관리 명령을 실행합니다:

db.adminCommand(
{
"dropConnections" : 1,
"hostAndPort" : [
"<hostname>:<port>"
]
}
)

<hostname> <port> 0} 및 을 제거된 멤버의 이름으로 바꿉니다.

MongoDB 5.0부터 새로 추가된 중고등학교는 투표 회원으로 간주되지 않으며 SECONDARY 주에 도달할 때까지 선출될 수 없습니다.

새 투표 노드가 복제본 세트에 추가되면 replSetReconfig 내부적으로 노드의 구성에 newlyAdded 필드를 추가합니다. 4} 필드가 있는 노드는 현재 투표 노드 수에 포함되지 않습니다.newlyAdded 초기 동기화가 완료되고 노드가 SECONDARY 상태에 도달하면 newlyAdded 필드가 자동으로 제거됩니다.

참고

  • 0}이라는 이름의 필드를 추가하려고 하는 구성은 newlyAdded{ force: true } 실행해도 오류가 발생합니다.

  • 기존 노드에 newlyAdded 필드가 있는 경우 rs.reconfig() 를 사용하여 구성을 변경해도 newlyAdded 필드가 제거되지 않습니다. newlyAdded 필드가 사용자가 제공한 구성에 추가됩니다.

  • replSetGetConfig 는 출력에서 newlyAdded 필드를 모두 제거합니다. newlyAdded 필드를 보려면 local.system.replset 컬렉션을 직접 쿼리할 수 있습니다.

0}이라는 이름의 복제본 rs0 집합은 다음과 같은 구성을 가집니다:

{
"_id" : "rs0",
"version" : 1,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "mongodb0.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongodb1.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongodb2.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : 2000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("58858acc1f5609ed986b641b")
}
}

다음 작업 시퀀스는 두 번째 멤버의 members[n].priority 를 업데이트합니다. 작업은 프라이머리에 연결된 mongosh 세션을 통해 실행됩니다.

cfg = rs.conf();
cfg.members[1].priority = 2;
rs.reconfig(cfg);
  1. 첫 번째 성명서는 rs.conf() 메서드를 사용해 복제본 세트의 현재 구성을 포함하고 있는 문서를 조회하고 문서를 로컬 변수 cfg로 설정합니다.

  2. 두 번째 문은 members[n].priority배열의 두 번째 문서에 members 값을 설정합니다. 추가 설정은 복제본 세트 구성 설정을 참조하세요.

    배열의 멤버 구성 문서에 액세스하기 위해 이 문은 복제본 세트 멤버의 members[n]._id 필드가 아닌 배열 인덱스를 사용합니다.

  3. 마지막 문은 수정된 cfg 를 사용하여 rs.reconfig() 메서드를 호출하여 이 새 구성을 초기화합니다. 재구성에 성공하면 복제본 세트 구성은 다음과 유사합니다.

{
"_id" : "rs0",
"version" : 2,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 0,
"host" : "mongodb0.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 1,
"host" : "mongodb1.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 2,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "mongodb2.example.net:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 1,
"tags" : {
},
"secondaryDelaySecs" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : 2000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("58858acc1f5609ed986b641b")
}
}

cluster 복제본 세트 settings 문서를 수정할 수도 있습니다. settings문서에는 전체 복제본 세트에 적용되는 구성 옵션이 포함되어 있습니다.

다음 작업 시퀀스는 클러스터의 settings.heartbeatTimeoutSecs15 로 업데이트합니다. 작업은 프라이머리에 연결된 mongosh 세션을 통해 실행됩니다.

cfg = rs.conf();
cfg.settings.heartbeatTimeoutSecs = 15;
rs.reconfig(cfg);

← rs.printSlaveReplicationInfo()

이 페이지의 내용