Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ / /

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

이 페이지의 내용

  • 시작하기 전에
  • 단일 샤드가 있는 클러스터를 복제본 세트로 변환하기
  • 샤딩된 클러스터를 복제본 세트로 변환
  • 다음 단계
  • 자세히 알아보기

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

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

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

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

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

  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 } ]

샤드가 하나뿐인 샤딩된 클러스터의 경우 해당 샤드에 전체 데이터 세트가 포함됩니다. 다음 절차를 사용하여 해당 클러스터를 샤딩되지 않은 복제본 세트로 변환합니다.

  1. 시스템이 새 복제본 세트가 될 단일 샤드를 호스팅하는 복제본 세트의 프라이머리 멤버에 연결하도록 애플리케이션을 재구성합니다.

  2. mongod 에서 --shardsvr 옵션을 제거합니다

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

단일 샤드 클러스터는 이제 데이터 세트에 읽기 및 쓰기 작업을 허용하는 비샤드형 복제본 세트 입니다.

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

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

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

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

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

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

    참고

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

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

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

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

샤딩된 클러스터 복제본 세트 로 변환한 후 다음 단계를 수행하여 클러스터 잠금을 해제합니다.

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

    db.getSiblingDB( "admin" ).fsyncLock()
  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 } ]

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

돌아가기

클러스터 메타데이터 백업