문서 메뉴

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

replSetStepDown

이 페이지의 내용

  • 설명
  • 호환성
  • 구문
  • 명령 필드
  • 행동
  • 예제
replSetStepDown

복제본 세트의 프라이머리세컨더리가 되도록 지시합니다. 프라이머리가 강등된 후에는 자격을 갖춘 세컨더리가 프라이머리 투표를 치르게 됩니다.

이 명령은 프라이머리를 즉시 강등시키지 않습니다. If no electable secondaries are up to date with the primary, the primary waits up to secondaryCatchUpPeriodSecs (by default 10 seconds) for a secondary to catch up. 선택 가능한 세컨더리를 사용할 수 있게 되면 명령이 프라이머리를 강등합니다.

일단 중단되고 나면 원래의 프라이머리가 세컨더리로 바뀌며, replSetStepDown: <seconds>(으)로 지정된 기간 중 남은 시간 동안 다시 프라이머리가 될 수 있는 자격을 잃습니다.

명령 실행에 대한 자세한 설명은 동작 을 참조하세요.

참고

이 명령은 프라이머리에 대해서만 유효하며 프라이머리가 아닌 멤버에서 실행하면 오류가 발생합니다.

mongosh 에서 이 명령은 rs.stepDown() 헬퍼 메서드를 통해서도 실행할 수 있습니다.

헬퍼 메서드는 mongosh 사용자에게 편리하지만 데이터베이스 명령과 동일한 수준의 정보를 반환하지 않을 수 있습니다. 편의가 필요하지 않거나 추가 반환 필드가 필요한 경우 database 명령을 사용합니다.

replSetStepDownadmin 데이터베이스에서만 실행할 수 있습니다.

이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

참고

이 명령은 M0, M2, M5 및 M10 클러스터에서 제한적으로 지원 됩니다. 자세한 내용은 지원되지 않는 명령을 참조하세요.

명령은 다음과 같은 구문을 가집니다:

db.adminCommand(
{
replSetStepDown: <seconds>,
secondaryCatchUpPeriodSecs: <seconds>,
force: <true|false>
}
)

이 명령은 다음 필드를 사용합니다.

필드
유형
설명
replSetStepDown
숫자

프라이머리를 강등시키는 데 걸리는 시간(초)으로, 이 시간 동안에는 강등된 멤버가 프라이머리가 될 수 없습니다. 숫자가 아닌 값을 지정하면 이 명령이 60초를 사용합니다.

강등 기간은 mongod이(가) 명령을 받은 시점부터 시작됩니다. 강등 기간은 secondaryCatchUpPeriodSecs보다 커야 합니다.

secondaryCatchUpPeriodSecs
숫자

선택 사항. mongod 가 선택 가능한 세컨더리가 프라이머리를 따라잡을 때까지 기다리는 시간(초)입니다.

지정되면 secondaryCatchUpPeriodSecs 가 기본 대기 시간인 10 초를 재정의하고, force: true 인 경우에는 0 초를 재정의합니다.

force
부울

선택 사항. 대기 기간 내에 선택 가능한 최신 세컨더리가 없는 경우 프라이머리가 강등할지 여부를 결정하는 부울입니다.

true 인 경우 적합한 세컨더리 멤버가 없더라도 프라이머리가 강등됩니다. 이로 인해 복제 지연이 있는 보조 서버가 새 기본 서버가 되는 경우 롤백 이 발생할 수 있습니다.

false 인 경우, 적합한 세컨더리 멤버가 없으면 프라이머리가 강등되지 않고 명령이 오류를 반환합니다.

기본값은 false입니다.

replSetStepDown 명령은 인덱스 빌드, 쓰기 작업 또는 맵 리듀스 작업과 같이 프라이머리가 단계적으로 중단되는 것을 차단하는 장기 실행 사용자 작업을 종료하려고 시도합니다.

그런 다음 명령은 세컨더리가 프라이머리와 최신 상태가 될 때까지 최대 secondaryCatchUpPeriodSeconds 초(기본값 10초)까지 기다리는 따라잡기 기간을 시작합니다. 롤백을 방지하기 위해 따라잡기 기간 동안 세컨더리가 프라이머리를 최신 상태로 유지하는 경우에만 프라이머리가 단계적으로 강등됩니다.

If no electable secondary meets this criterion by the end of the waiting period, the primary does not step down and the command errors. 이 동작을 재정의하고 force: true 옵션으로 명령을 실행하여 프라이머리를 즉시 물러나게 할 수 있습니다.

프라이머리가 성공적으로 강등되면 해당 노드는 명령을 받은 시점부터 시작된 replSetStepDown: <seconds> 기간의 나머지 기간 동안 프라이머리가 될 수 없습니다.

replSetStepDown 이 명령은 모든 클라이언트 연결을 닫지 않습니다.

참고

replSetStepDown 명령이 수신된 시점부터 새 프라이머리가 선출될 때까지, 또는 선출 가능한 세컨더리가 없는 경우 원래 프라이머리가 정상 작동을 재개할 때까지 프라이머리에 대한 모든 쓰기가 실패합니다.

replSetStepDown 이(가) 실행될 때 진행 중이던 쓰기가 종료됩니다. 진행 중인 트랜잭션TransientTransactionError 로 인해 실패하며 전체를 다시 시도할 수 있습니다.

쓰기가 실패하는 최대 기간은 다음과 같습니다.

secondaryCatchUpPeriodSecs (기본 10초) + electionTimeoutMillis(기본 10초)

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

현재 프라이머리에서 실행되는 다음 예시는 120 초 동안 멤버를 강등하려고 시도합니다.

The operation waits up to the default 10 seconds for a secondary to catch up. 적합한 세컨더리가 없는 경우 프라이머리가 강등되지 않고 명령에 오류가 발생합니다.

참고

replSetStepDown 명령이 수신된 시점부터 새 프라이머리가 선출될 때까지, 또는 선출 가능한 세컨더리가 없는 경우 원래 프라이머리가 정상 작동을 재개할 때까지 프라이머리에 대한 모든 쓰기가 실패합니다.

replSetStepDown 이(가) 실행될 때 진행 중이던 쓰기가 종료됩니다. 진행 중인 트랜잭션TransientTransactionError 로 인해 실패하며 전체를 다시 시도할 수 있습니다.

쓰기가 실패하는 최대 기간은 다음과 같습니다.

secondaryCatchUpPeriodSecs (기본 10초) + electionTimeoutMillis(기본 10초)

db.adminCommand( { replSetStepDown: 120 } )

현재 프라이머리에서 실행되는 다음 예제는 120 초 동안 멤버를 강등하려고 시도하고, 선택 가능한 세컨더리가 따라잡을 때까지 최대 15 초까지 기다립니다. 적합한 세컨더리가 없는 경우 프라이머리가 강등되지 않고 명령에 오류가 발생합니다.

참고

replSetStepDown 명령이 수신된 시점부터 새 프라이머리가 선출될 때까지, 또는 선출 가능한 세컨더리가 없는 경우 원래 프라이머리가 정상 작동을 재개할 때까지 프라이머리에 대한 모든 쓰기가 실패합니다.

replSetStepDown 이(가) 실행될 때 진행 중이던 쓰기가 종료됩니다. 진행 중인 트랜잭션TransientTransactionError 로 인해 실패하며 전체를 다시 시도할 수 있습니다.

쓰기가 실패하는 최대 기간은 다음과 같습니다.

secondaryCatchUpPeriodSecs (기본 10초) + electionTimeoutMillis(기본 10초)

db.adminCommand( { replSetStepDown: 120, secondaryCatchUpPeriodSecs: 15 } )

현재 프라이머리에서 실행되는 다음 예제는 120 초 동안 멤버를 강등하려고 시도하고, 선택 가능한 세컨더리가 따라잡을 때까지 최대 15 초까지 기다립니다. force: true 옵션으로 인해 적합한 세컨더리가 없더라도 프라이머리가 강등됩니다.

참고

replSetStepDown 명령이 수신된 시점부터 새 프라이머리가 선출될 때까지, 또는 선출 가능한 세컨더리가 없는 경우 원래 프라이머리가 정상 작동을 재개할 때까지 프라이머리에 대한 모든 쓰기가 실패합니다.

replSetStepDown 이(가) 실행될 때 진행 중이던 쓰기가 종료됩니다. 진행 중인 트랜잭션TransientTransactionError 로 인해 실패하며 전체를 다시 시도할 수 있습니다.

쓰기가 실패하는 최대 기간은 다음과 같습니다.

secondaryCatchUpPeriodSecs (기본 10초) + electionTimeoutMillis(기본 10초)

db.adminCommand( { replSetStepDown: 120, secondaryCatchUpPeriodSecs: 15, force: true } )

다음도 참조하세요.

← replSetResizeOplog