문서 메뉴

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

4.4의 샤딩된 클러스터를 4.2로 다운그레이드

이 페이지의 내용

  • 다운그레이드 경로
  • 백업 생성
  • 전제 조건
  • 절차

다운그레이드를 시도하기 전에 이 문서의 내용을 숙지하세요.

중요

복제본 세트를 업그레이드하거나 다운그레이드하기 전에 모든 복제본 세트 멤버가 실행 중인지 확인하세요. 그렇지 않으면 모든 구성원이 시작될 때까지 업그레이드 또는 다운그레이드가 완료되지 않습니다.

4.4에서 다운그레이드해야 하는 경우 최신 패치 릴리스인 4.2로 다운그레이드하세요.

MongoDB는 단일 버전 다운그레이드만 지원합니다. 현재 릴리스보다 이전 버전인 릴리스로 다운그레이드할 수 없습니다.

예를 들어 4 4 42을 다운그레이드할 수 있습니다. -series 를 로 설정합니다.4 2-series 배포. 그러나 해당 을 더 다운그레이드합니다.4 0에 시리즈 배포. -시리즈 배포는 지원되지 않습니다.

경고

다운그레이드 플로어

버전 4.4에서 다운그레이드해야 하는 경우 4.2.6 이상 버전으로 다운그레이드합니다. 4.2.5 이하 버전으로 다운그레이드할 수 없습니다.

선택 사항이지만 권장됩니다. 데이터베이스의 백업을 만듭니다.

4.4에서 4.2로 다운그레이드하려면 지속되고 호환되지 않는 기능을 제거하거나 호환되지 않는 구성 설정을 업데이트해야 합니다.

MongoDB 4.4부터 시작됩니다:

샤딩되지 않은 collection 및 뷰의 네임스페이스 길이 제한은 255 바이트이며, 샤드 collection의 경우 235 바이트입니다. collection 또는 뷰의 경우 네임스페이스에는 데이터베이스 이름, 점(.) 구분 기호, collection/뷰 이름(예: <database>.<collection>)이 포함됩니다.

다운그레이드하기 전에 기능 호환성 버전(fCV) 4.2의 120바이트 네임스페이스 길이 제한을 초과하는 네임스페이스가 있는 모든 컬렉션 또는 뷰를 해결합니다.

네임스페이스가 120바이트 제한을 초과하는 collection이나 뷰가 있는지 확인하려면 mongo shell을 mongos 인스턴스에 연결하고 다음을 실행합니다.

db.adminCommand("listDatabases").databases.forEach(function(d){
let mdb = db.getSiblingDB(d.name);
mdb.getCollectionInfos( ).forEach(function(c){
namespace = d.name + "." + c.name
namespacelenBytes = encodeURIComponent(namespace).length
if (namespacelenBytes > 120) {
print (c.type.toUpperCase() + " namespace exceeds 120 bytes:: " + namespace )
}
} )
})

collection 또는 뷰 네임스페이스가 120바이트를 초과하는 경우 FCV를 다운그레이드하기 전에 을(를) 사용합니다.

  • 샤딩되지 않은 collection의 경우 renameCollection 명령을 사용하여 collection 이름을 변경합니다.

  • 샤드 collection의 경우:

    • $merge 를 사용하여 더 짧은 이름의 새 샤드 collection에 매핑한 다음 원래 collection을 삭제합니다.

    • mongoexportmongoimport 를 사용하여 더 짧은 이름의 새 컬렉션에 만든 다음 원본 컬렉션을 삭제합니다.

  • 뷰의 경우 db.createView() 를 사용하여 더 짧은 이름을 사용하여 뷰를 다시 만든 다음 원래 뷰를 삭제합니다.

샤드 cluster의 featureCompatibilityVersion 를 다운그레이드하려면 다음을 수행합니다.

  1. mongo 셸을 mongos 인스턴스에 연결합니다.

  2. featureCompatibilityVersion"4.2"로 다운그레이드합니다.

    db.adminCommand({setFeatureCompatibilityVersion: "4.2"})

    setFeatureCompatibilityVersion 명령은 내부 시스템 컬렉션에 대한 쓰기를 수행하며 멱등원입니다. 어떤 이유로든 명령이 성공적으로 완료되지 않으면 mongos 인스턴스에서 명령을 다시 시도합니다.

    참고

    setFeatureCompatibilityVersion 가 샤드 클러스터에서 실행되는 동안 청크 마이그레이션, 분할 및 병합이 ConflictingOperationInProgress 실패할 수 있습니다.

  3. 샤딩된 cluster의 모든 멤버가 업데이트된 featureCompatibilityVersion 을 반영하도록 하려면 각 shard 복제본 세트 멤버와 각 config 서버 복제본 세트 멤버에 연결하여 featureCompatibilityVersion 을 확인합니다.

    액세스 제어가 활성화된 샤드 클러스터의 경우, 샤드 복제본 세트 멤버에 대해 다음 명령을 실행하려면 샤드 로컬 사용자로 멤버에 연결해야 합니다.

    db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

    모든 멤버는 다음을 포함하는 결과를 반환해야 합니다.

    "featureCompatibilityVersion" : { "version" : "4.2" }

    멤버가 "4.4"featureCompatibilityVersion 를 반환하는 경우 계속하기 전에 멤버가 버전 "4.2" 를 반영할 때까지 기다립니다.

참고

중재자는 admin.system.version 컬렉션을 복제하지 않습니다. 이로 인해 중재자는 복제본 세트의 FCV 값에 관계없이 바이너리의 다운그레이드 버전과 동일한 기능 호환성 버전을 항상 갖게 됩니다.

예를 들어, MongoDB 4.4 cluster의 중재자의 fCV 값은 4.2입니다.

반환된 featureCompatibilityVersion 값에 대한 자세한 내용은 FeatureCompatibilityVersion 가져오기를 참조하세요.

다음 단계는 fCV가 "4.4"로 설정된 적이 있는 경우에만 필요합니다.

4.2와 호환되지 않는 영구적인 4.4 기능 을 모두 제거합니다. 여기에는 다음이 포함됩니다:

복합 해시 인덱스

모든 복합 해시 인덱스를 제거합니다.

collection에서 복합 해시 인덱스를 식별하려면 db.collection.getIndexes() 를 사용하고 해당 인덱스를 제거하려면 db.collection.dropIndex() 를 사용합니다.

복합 해시 인덱스를 사용하여 collection을 샤딩하는 경우 아래 Compound Hashed Shard Keys 에 나열된 지침을 따르세요.

복합 해시 샤드 키

해시 샤드 키를 사용하여 샤딩된 모든 collection을 제거합니다.

sh.status() 를 사용하여 복합 해시 샤드 키가 있는 샤딩된 collection을 식별하고 해당 collection을 제거합니다.

  • collection이 비어 있거나 collection에 보존이 필요한 데이터가 포함되어 있는 경우 db.collection.drop() 를 사용하여 collection을 삭제합니다.

  • collection에 보존해야 하는 데이터가 있는 경우 를 사용하여 collection을 삭제하기 전에 db.collection.drop() 먼저 collection을 백업합니다. cluster를 다운그레이드한 후 데이터를 cluster로 복원합니다.

4.4 기능을 사용하는 모든 영구 기능을 제거합니다. 여기에는 다음이 포함되지만 이에 국한되지는 않습니다.

MongoDB 4.4에서는 샤드 컬렉션의 문서에서 샤드 키 필드가 누락 될 수 있습니다.

4.2로 다운그레이드하고 샤딩된 collection에 shard key 필드가 누락된 문서가 포함된 경우, 4.2 mongos 인스턴스는 shard key 필드가 누락된 문서를 반환하지 않습니다. 이러한 상황을 방지하려면 다운그레이드하기 전에 누락된 샤드 키 필드를 포함하도록 문서를 업데이트합니다.

샤드 키의 일부가 누락된 문서를 찾으려면 $exists 연산자를 사용합니다.

예를 들어 contacts 컬렉션에 샤드 키 { zipcode: 1 } 가 있는 경우 zipcode 필드가 없는 문서를 찾습니다.

db.contacts.find( { zipcode: { $exists: false } } )

이러한 문서에 대해 누락된 샤드 키 필드를 null 로 설정하려면 db.collection.updateMany() 메서드를 사용할 수 있습니다.

db.contacts.updateMany( { zipcode: { $exists: false } }, { $set: { zipcode: null } } )

누락된 샤드 키 필드를null 이 아닌 값으로 설정하는 경우 db.collection.updateMany() 메서드를 사용할 수 없으며 트랜잭션 내에서 또는 재시도 가능 쓰기로 업데이트를 수행해야 합니다. 자세한 내용은 누락된 샤드 키 필드 설정을 참조하세요.

버전 4.4에서 변경됨: 버전 4.4에서 MongoDB는 샤드 키 크기에 대한 512바이트 제한을 제거합니다. 그러나 MongoDB 4.2 이하의 경우 샤드 키는 512바이트를 초과할 수 없습니다. 512바이트 크기 제한을 초과하는 모든 샤드 키 값을 512바이트 크기 제한 이내로 업데이트합니다. 문서의 샤드 키 값을 업데이트하려면 문서의 샤드 키 값 변경을 참조하세요.

경고

다운그레이드 절차를 진행하기 전에 cluster의 지연된 복제본 세트 멤버를 포함한 모든 멤버가 필수 변경 사항을 반영하는지 확인합니다. 즉, 다운그레이드하기 전에 featureCompatibilityVersion 및 각 노드에 대해 호환되지 않는 기능 제거를 확인합니다.

1

패키지 관리자나 수동 다운로드를 사용하여 4.2 시리즈의 최신 릴리스를 다운로드합니다. 패키지 관리자를 사용하는 경우 4.2 바이너리에 대한 새 리포지토리를 추가한 다음 실제 다운그레이드 프로세스를 수행합니다.

중요

복제본 세트를 업그레이드하거나 다운그레이드하기 전에 모든 복제본 세트 멤버가 실행 중인지 확인하세요. 그렇지 않으면 모든 구성원이 시작될 때까지 업그레이드 또는 다운그레이드가 완료되지 않습니다.

4.4에서 다운그레이드해야 하는 경우 최신 패치 릴리스인 4.2로 다운그레이드하세요.

2

mongo shell을 샤드 cluster의 mongos 인스턴스에 연결하고 sh.stopBalancer() 를 실행하여 밸런서를 비활성화합니다.

sh.stopBalancer()

참고

마이그레이션이 진행 중인 경우, 시스템은 밸런서를 중지하기 전에 진행 중인 마이그레이션을 완료합니다. sh.isBalancerRunning() 를 실행하여 밸런서의 현재 상태를 확인할 수 있습니다.

밸런서가 비활성화되었는지 확인하려면 sh.getBalancerState()를 실행하면 밸런서가 비활성화된 경우 false를 반환합니다.

sh.getBalancerState()

밸런서 비활성화에 대한 자세한 내용은 밸런서 비활성화를 참조하세요 .

3

바이너리를 다운그레이드하고 다시 시작합니다.

4

샤드를 한 번에 하나씩 다운그레이드합니다.

  1. 샤드의 세컨더리 멤버를 한 번에 하나씩 다운그레이드합니다.

    1. mongosh 에서 다음 명령을 실행하여 완전히 종료하거나 mongod 프로세스 중지 를 참조하여 mongod 프로세스를 안전하게 종료할 수 있습니다.

      db.adminCommand( { shutdown: 1 } )
    2. 4.4 바이너리를 4.2 바이너리로 교체하고 다시 시작합니다.

    3. 다음 세컨더리 멤버를 다운그레이드하기 전에 멤버가 SECONDARY 상태로 복구될 때까지 기다리세요. 멤버의 상태를 확인하려면 mongo shell을 샤드에 연결하고 rs.status() 메서드를 실행합니다.

      각 세컨더리 멤버에 대해 다운그레이드하려면 이 과정을 반복합니다.

  2. 샤드 중재자(있는 경우)를 다운그레이드합니다.

    복제본 세트에 중재자가 포함되어 있지 않으면 이 단계를 건너뛰세요.

    1. mongosh 에서 다음 명령을 실행하여 완전히 종료하거나 mongod 프로세스 중지 를 참조하여 mongod 프로세스를 안전하게 종료할 수 있습니다.

      db.adminCommand( { shutdown: 1 } )
    2. 중재자 데이터 디렉토리의 내용을 삭제합니다. storage.dbPath 구성 설정 또는 --dbpath 명령줄 옵션이 중재자 mongod 의 데이터 디렉토리를 지정합니다.

      rm -rf /path/to/mongodb/datafiles/*
    3. 4.4 바이너리를 4.2 바이너리로 교체하고 다시 시작합니다.

    4. 멤버가 ARBITER 상태로 복구될 때까지 기다립니다. 멤버의 상태를 확인하려면 mongo shell을 멤버에 연결하고 rs.status() 메서드를 실행합니다.

  3. 샤드의 프라이머리를 다운그레이드합니다.

    1. 복제본 세트 프라이머리를 내려놓습니다. 프라이머리에 mongo 셸을 연결하고 rs.stepDown() 를 사용하여 프라이머리를 물러나게 하고 새 프라이머리를 강제로 선출합니다.

      rs.stepDown()
    2. rs.status() 을(를) 실행합니다.

      rs.status()

      상태가 프라이머리가 물러나고 다른 멤버가 PRIMARY 상태를 취했다고 표시되면 계속 진행합니다.

    3. mongo 셸에서 다음 명령을 실행하여 강등된 프라이머리를 완전히 종료하거나 mongod 프로세스 중지 를 참조하여 mongod 프로세스를 안전하게 종료할 수 있습니다.

      db.adminCommand( { shutdown: 1 } )
    4. 4.4 바이너리를 4.2 바이너리로 교체하고 다시 시작합니다.

나머지 샤드에 대해서도 이 과정을 반복합니다.

5
  1. config 서버의 복제본 세트(CSRS)의 세컨더리 멤버를 한 번에 하나씩 다운그레이드합니다.

    1. mongosh 에서 다음 명령을 실행하여 완전히 종료하거나 mongod 프로세스 중지 를 참조하여 mongod 프로세스를 안전하게 종료할 수 있습니다.

      db.adminCommand( { shutdown: 1 } )
    2. 4.4 바이너리를 4.2 바이너리로 교체하고 다시 시작합니다.

    3. 다음 세컨더리 멤버를 다운그레이드하기 전에 멤버가 SECONDARY 상태로 복구될 때까지 기다리세요. 멤버의 상태를 확인하려면 mongo shell을 샤드에 연결하고 rs.status() 메서드를 실행합니다.

      각 세컨더리 멤버에 대해 다운그레이드하려면 이 과정을 반복합니다.

  2. config 서버 프라이머리를 단계적으로 낮춥니다.

    1. 프라이머리에 mongo 셸을 연결하고 rs.stepDown() 를 사용하여 프라이머리를 물러나게 하고 새 프라이머리를 강제로 선출합니다.

      rs.stepDown()
    2. rs.status() 을(를) 실행합니다.

      rs.status()

      상태가 프라이머리가 물러나고 다른 멤버가 PRIMARY 상태를 취했다고 표시되면 계속 진행합니다.

    3. mongo 셸에서 다음 명령을 실행하여 강등된 프라이머리를 완전히 종료하거나 mongod 프로세스 중지 를 참조하여 mongod 프로세스를 안전하게 종료할 수 있습니다.

      db.adminCommand( { shutdown: 1 } )
    4. 4.4 바이너리를 4.2 바이너리로 교체하고 다시 시작합니다.

6

샤드 cluster 구성 요소의 다운그레이드가 완료되면 mongo shell을 mongos 에 연결 하고 balancer를 다시 활성화합니다.

sh.startBalancer()

mongo shell 메서드 sh.startBalancer() 도 shard cluster에 대한 자동 분할을 활성화합니다.

← 4 을(를) 다운그레이드합니다.4 복제본 세트가 4 으)로 설정되었습니다.2