movePrimary샤딩된 클러스터
movePrimary는 데이터베이스 의 모든 비샤드 컬렉션을 보유하는 프라이머리 샤드 를 재할당합니다.movePrimary는 먼저 클러스터 메타데이터 의 프라이머리 샤드 를 변경한 다음 샤딩되지 않은 모든 컬렉션을 지정된 샤드 로 마이그레이션합니다. 다음 형식의 명령을 사용합니다.db.adminCommand( { movePrimary: <databaseName>, to: <newPrimaryShard> } ) 예를 들어, 다음 명령은 프라이머리 샤드를
test에서shard0001로 이동합니다.db.adminCommand( { movePrimary : "test", to : "shard0001" } ) 명령이 반환되면 데이터베이스의 프라이머리 샤드 위치가 지정된 샤드로 전환됩니다. 샤드를 완전히 서비스 해제하려면
removeShard명령을 사용합니다.movePrimary은mongos인스턴스에만 사용할 수 있는 관리 명령입니다.경고
movePrimary을(를) 시작한 후에는 명령이 완료될 때까지 해당 데이터베이스의 샤딩되지 않은 컬렉션에 대해 읽기 또는 쓰기 작업을 수행하지 마세요 . 마이그레이션 중에 해당 컬렉션에 대해 실행된 읽기 또는 쓰기 작업으로 인해 마이그레이션 작업이 실패하거나 데이터가 손실되는 등 예기치 않은 동작이 발생할 수 있습니다.
호환성
이 명령은 다음 환경에서 호스팅되는 배포에서 사용할 수 있습니다.
MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스
MongoDB Enterprise: MongoDB의 구독 기반 자체 관리 버전
MongoDB Community: MongoDB의 소스 사용 가능 무료 자체 관리 버전
고려 사항
mongos 는movePrimary 에 대해 "majority" 쓰기 고려를 사용합니다
유지 관리 기간 중 문제발생 movePrimary
movePrimary 는 데이터베이스 의 크기와 네트워크 상태 또는 머신 리소스 등의 요인에 따라 완료하는 데 상당한 시간이 걸릴 수 있습니다. 마이그레이션 중에 이동 중인 데이터베이스 의 샤딩되지 않은 컬렉션에 DDL 작업을 쓰기 (write) 수행하려는 시도가 "movePrimary is in progress" 오류와 함께 실패합니다.
애플리케이션이 클러스터에 대한 모든 읽기 및 쓰기를 중지하는 유지 관리 기간을 예약하는 것이 좋습니다. 계획된 다운타임 동안 movePrimary 를 실행하면 데이터베이스의 샤딩되지 않은 컬렉션에 대한 읽기 또는 쓰기 인터리빙으로 인해 정의되지 않은 동작이 발생할 위험을 완화할 수 있습니다.
네임스페이스 충돌로 마이그레이션 방지
movePrimary 대상 샤드에 충돌하는 컬렉션 네임스페이스가 포함된 경우 실패합니다. 예를 들면 다음과 같습니다.
관리자가
movePrimary를 발행하여hr데이터베이스의 프라이머리 샤드를 변경합니다.movePrimary가 해당 collection을 이동하는 동안 사용자 또는 애플리케이션이hr의 샤딩되지 않은 collection에 대해 쓰기 작업을 실행합니다. 쓰기 작업은 원래 프라이머리 샤드에 collection을 생성합니다.나중에 관리자가
movePrimary를 실행하여hr데이터베이스의 원래 프라이머리 샤드를 복원합니다.movePrimary인터리빙 쓰기 작업에서 남겨진 충돌 네임스페이스로 인해 실패합니다.
대상 샤드는 인덱스를 재구축해야 함
movePrimary 작업의 일부로 대상 샤드는 프라이머리 샤드가 된 후 마이그레이션된 collection의 인덱스를 다시 작성해야 합니다. collection당 인덱스 수와 인덱싱할 데이터의 양에 따라 상당한 시간이 걸릴 수 있습니다.
인덱스 빌드 프로세스에 대한 자세한 내용 은 채워진 collection 에 대한 인덱스 빌드를 참조하세요.
추가 정보
전체 절차 는 기존 샤드 클러스터에서 샤드 제거를 참조하세요.