Docs Menu
Docs Home
/

자체 관리형 샤드 클러스터를 복제본 세트로 변환

이 튜토리얼에서는 샤딩된 클러스터 비샤드 복제본 세트 로 변환하는 방법을 설명합니다. 복제본 세트 샤딩된 클러스터 로 변환하려면 자체 관리 복제본 세트를 샤드 클러스터로 변환을 참조하세요. 샤딩된 클러스터에 대한 자세한 내용은 샤딩 문서를 참조하세요.

이 튜토리얼에서는 다음 작업을 안내합니다.

  1. 밸런서를 비활성화합니다.

  2. 클러스터를 복제본 세트로 변환합니다.

  3. 클러스터를 잠금 해제합니다(다중 샤드 클러스터에만 해당).

MongoDB 8.0 부터 directShardOperations 역할을 사용하여 샤드에 대해 직접 명령을 실행해야 하는 유지 관리 작업을 수행할 수 있습니다.

경고

directShardOperations 역할 사용하여 명령을 실행하면 클러스터 올바르게 작동하지 않고 데이터가 손상될 수 있습니다. directShardOperations 역할 유지 관리 목적으로만 사용하거나 MongoDB 지원 의 지침 에 따라 사용하세요. 유지 관리 작업 수행이 완료되면 directShardOperations 역할 사용을 중지합니다.

이 튜토리얼의 단계에는 MongoDB 6.0 이상이 필요합니다.

fsyncfsyncUnlock 명령에는 권한 부여 fsync 조치 필요하며, 이는 역할 또는 사용자 지정 역할 통해 할당될 수 있습니다.hostManager

청크 마이그레이션, 리샤딩 및 스키마 변환이 일반적으로 수행되지 않는 경우 클러스터 변환합니다.

MongoDB 8.3부터는 이전에 클러스터를 샤딩된 복제본 세트를 복제본 세트로 다시 변환할 수 없습니다.

샤딩된 클러스터 를 복제본 세트 로 변환하면 샤드 ID document 포함하여 이전 배포서버 의 샤딩 메타데이터 보존되어 다시 샤딩된 클러스터 되는 것을 차단합니다. 샤딩된 클러스터 로 자체 관리형 변환을 다시 시도하면 MongoDB 오류를 반환합니다.

이러한 복제본 세트를 샤딩된 클러스터로 변환하려면 기술 지원팀에문의 .

샤드 하나만 있는 샤딩된 클러스터 의 경우, 해당 샤드 전체 데이터 세트 포함됩니다. 해당 클러스터 샤딩되지 않은 복제본 세트:로 변환하려면 다음을 수행합니다.

1

밸런서를 비활성화하려면:

  1. mongosh mongos 를 샤딩된 클러스터 의 인스턴스 에 연결합니다.

  2. 밸런서 중지하려면 실행.

    sh.stopBalancer()
  3. 밸런서 비활성화되었는지 확인하려면 다음 명령을 실행 하고 출력이 false인지 확인합니다.

    sh.getBalancerState()
2
  1. 모든 mongos 인스턴스를 중지합니다.

  2. 새 복제본 세트가 될 샤드의 복제본 세트 노드에 직접 연결하도록 애플리케이션을 재구성합니다.

  3. 복제본 세트 노드의 롤링 재시작을 mongod 수행하여 --shardsvr에서 옵션을 제거합니다.

    --shardsvr 옵션을 변경하면 mongod 의 수신 연결 포트가 변경됩니다.

단일 샤드 클러스터는 이제 데이터 세트에 대한 읽기 및 쓰기 작업을 허용하는 비샤딩된 복제본 세트 입니다. 필요에 따라 config 서버를 폐기할 수 있습니다.

다음 절차에 따라 샤드가 두 개 이상인 샤딩된 클러스터에서 완전히 새로운 복제본 세트로 전환할 수 있습니다.

1

밸런서 비활성화하고 클러스터 락 .

  1. mongosh mongos 를 샤딩된 클러스터 의 인스턴스 에 연결합니다.

  2. 밸런서 중지하려면 실행.

    sh.stopBalancer()
  3. 밸런서 비활성화되었는지 확인하려면 다음 명령을 실행 하고 출력이 false인지 확인합니다.

    sh.getBalancerState()
  4. 데이터베이스 쓰기를 방지하는 샤딩된 클러스터 락 실행.

    db.getSiblingDB( "admin" ).fsyncLock()
  5. 락 확인하려면 실행.

    db.getSiblingDB( "admin" ).aggregate( [
    { $currentOp: { } },
    { $facet: {
    "locked": [
    { $match: { $and: [
    { fsyncLock: { $exists: true } }
    ] } }
    ],
    "unlocked": [
    { $match: { fsyncLock: { $exists: false } } }
    ]
    } },
    { $project: {
    "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] },
    "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] }
    } }
    ] )
  6. 출력에 fsyncLocked 이(가) true(이는 클러스터 가 잠겨 있음을 의미함)로 표시되는지 확인합니다.

    [ { fsyncLocked: true }, { fsyncUnlocked: false } ]
2
  1. 샤딩된 클러스터 잠그고 밸런서 비활성화한 상태에서 샤딩된 클러스터에 새 복제본 세트 배포 . 복제본 세트 현재 샤드의 모든 데이터 파일을 결합한 상태로 저장할 수 있는 충분한 용량 있어야 합니다. 데이터 전송 이 완료될 때까지 새 복제본 세트 에 연결하도록 애플리케이션 구성하지 마세요.

  2. 애플리케이션을 재구성하거나 모든 mongos 인스턴스를 중지합니다. 모든 mongos 인스턴스를 중지하면 애플리케이션이 데이터베이스에서 데이터를 읽을 수 없습니다. 모든 mongos 인스턴스를 중지하는 경우 데이터 마이그레이션 절차를 위해 애플리케이션이 액세스할 수 없는 임시 mongos 인스턴스를 시작합니다.

  3. mongodump 및 mongorestore를 사용하여 mongos 인스턴스의 데이터를 새 복제본 세트로 마이그레이션합니다.

    mongorestore를 실행 때 config 데이터베이스 제외합니다. 이 예시 와 같이 옵션을 --nsExclude 사용합니다.

    mongorestore --nsExclude="config.*" <connection-string> /data/backup

    참고

    모든 데이터베이스의 모든 컬렉션이 반드시 샤드되는 것은 아닙니다. 샤드 된 컬렉션만 마이그레이션하지 않습니다. 데이터베이스와 컬렉션 모두가 올바르게 마이그레이션되는지 확인합니다.

  4. mongos 인스턴스 대신 샤딩되지 않은 복제본 세트를 사용하도록 애플리케이션을 다시 구성합니다.

    샤딩된 클러스터를 복제본 세트로 변환한 후 애플리케이션에서 사용하는 연결 문자열 복제본 세트의 연결 문자열로 업데이트합니다. 그런 다음 애플리케이션을 다시 시작합니다.

이제 애플리케이션은 샤딩되지 않은 복제본 세트 를 읽기 및 쓰기에 사용합니다. 사용하지 않는 나머지 샤드 클러스터 인프라를 폐기할 수 있습니다.

3

샤딩된 클러스터를 복제본 세트로 변환한 후 클러스터의 잠금을 해제합니다.

  1. 클러스터 잠금을 해제하고 데이터베이스 쓰기를 재개하려면 다음 실행.

    db.getSiblingDB( "admin" ).fsyncUnlock()
  2. 잠금 해제를 확인하려면 실행.

    db.getSiblingDB( "admin" ).aggregate( [
    { $currentOp: { } },
    { $facet: {
    "locked": [
    { $match: { $and: [
    { fsyncLock: { $exists: true } }
    ] } } ],
    "unlocked": [
    { $match: { fsyncLock: { $exists: false } } }
    ]
    } },
    { $project: {
    "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] },
    "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] }
    } }
    ] )
  3. 출력에 fsyncLocked 이(가) false(이는 클러스터 의 잠금이 해제되었음을 의미함)로 표시되는지 확인합니다.

    [ { fsyncLocked: false }, { fsyncUnlocked: true } ]

샤딩된 클러스터 밸런서 관리

돌아가기

클러스터 메타데이터 백업

이 페이지의 내용