Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

Config Database

이 페이지의 내용

  • 제한 사항
  • 샤드 클러스터 운영을 지원하는 컬렉션
  • 세션을 지원하는 컬렉션

config 데이터베이스의 컬렉션은 다음을 지원합니다.

  • 샤드 cluster 작업

  • MongoDB 3.6 에서 시작하여 독립형, 복제본 세트 및 샤드 클러스터에 대한 인과적으로 일관된 세션 과 복제본 세트 및 샤드 클러스터에 대한 재시도 가능 쓰기를 제공합니다.

참고

샤딩된 cluster는 mongos 에 연결하는지 또는 mongod에 연결하는지에 따라 config 데이터베이스에 다른 collection이 표시될 수 있습니다.

  • mongos 에서 config 데이터베이스는 cofig 서버에 있는 컬렉션(예: collections 또는 chunks )을 표시합니다.

  • mongod에서 config 데이터베이스는 migrationCoordinators 또는 rangeDeletions 와 같이 지정된 샤드와 관련된 컬렉션을 표시합니다

config 서버와 샤드가 동일한 노드에서 호스팅되는 경우 mongosconfig 데이터베이스의 일부 샤드 로컬 collection에 액세스할 수 있습니다.

MongoDB 5.0부터는 다음과 같은 읽기 고려 사항 및 옵션이 있는 config.transactions 컬렉션에서 트랜잭션이 아닌 읽기가 허용되지 않습니다.

중요

config 데이터베이스의 스키마는 내부적이며, 릴리스 간에 변경될 수 있습니다. config 데이터베이스는 신뢰할 수 있는 API가 아니므로 사용자는 정상적인 운영 또는 유지 관리 과정에서 config 데이터베이스에 데이터를 작성해서는 안 됩니다.

참고

다중 문서 트랜잭션 내에서 config 데이터베이스의 컬렉션에는 읽기/쓰기 작업을 수행할 수 없습니다.

config 데이터베이스에 액세스하여 샤딩 작업을 지원하는 컬렉션 목록을 보려면 mongosh를 샤딩된 클러스터의 mongos 인스턴스에 연결하고 다음을 실행합니다.

use config
show collections

참고

액세스 제어와 함께 실행하는 경우 데이터베이스에 대해 listCollections 조치를 부여하는 권한이 있는지 확인하세요.합니다.

config 데이터베이스는 주로 내부용으로 사용되며, 일반적인 작업 중에 데이터를 수동으로 삽입하거나 저장해서는 안 됩니다. 그러나 샤드 클러스터에 대한 config 서버의 쓰기 가용성을 확인해야 하는 경우에는 해당 이름의 컬렉션이 이미 존재하지 않는지 확인한 후 테스트 컬렉션에 문서를 삽입할 수 있습니다.

경고

작동 중인 시스템에서 config 데이터베이스를 수정하면 데이터 세트가 불안정해지거나 일치하지 않을 수 있습니다. config 데이터베이스를 수정해야 하는 경우 mongodump를 사용하여 config 데이터베이스의 전체 백업을 만듭니다.

db.testConfigServerWriteAvail.insertOne( { a : 1 } )

작업이 성공하면 config 서버를 사용하여 쓰기를 처리할 수 있습니다.

향후 서버 릴리스에서는 config 데이터베이스에 다른 컬렉션이 포함될 수 있으므로 테스트 컬렉션의 이름을 선택할 때 주의하세요.

MongoDB는 샤딩을 지원하기 위해 config 데이터베이스에서 다음 컬렉션을 사용합니다.

config.changelog

내부 MongoDB 메타데이터

구성 데이터베이스는 내부 데이터베이스이므로 애플리케이션과 관리자는 정상적인 운영 과정에서 이 데이터베이스의 내용을 수정하거나 의존해서는 안 됩니다.

changelog 컬렉션은 샤딩된 클러스터의 각 메타데이터 변경 사항에 대한 문서를 저장합니다.

예제

다음 예시에서는 changelog 컬렉션에서 분할된 청크의 단일 레코드를 표시합니다.

{
"_id" : "<hostname>-<timestamp>-<increment>",
"server" : "<hostname><:port>",
"clientAddr" : "127.0.0.1:63381",
"time" : ISODate("2012-12-11T14:09:21.039Z"),
"what" : "split",
"ns" : "<database>.<collection>",
"details" : {
"before" : {
"min" : {
"<database>" : { $minKey : 1 }
},
"max" : {
"<database>" : { $maxKey : 1 }
},
"lastmod" : Timestamp(1000, 0),
"lastmodEpoch" : ObjectId("000000000000000000000000")
},
"left" : {
"min" : {
"<database>" : { $minKey : 1 }
},
"max" : {
"<database>" : "<value>"
},
"lastmod" : Timestamp(1000, 1),
"lastmodEpoch" : ObjectId(<...>)
},
"right" : {
"min" : {
"<database>" : "<value>"
},
"max" : {
"<database>" : { $maxKey : 1 }
},
"lastmod" : Timestamp(1000, 2),
"lastmodEpoch" : ObjectId("<...>")
},
"owningShard" : "<value>"
}
}

changelog 컬렉션의 각 문서에는 다음 필드가 포함되어 있습니다.

config.changelog._id

changelog._id의 값은 <hostname>-<timestamp>-<increment>입니다.

config.changelog.server

이 데이터를 보관하는 서버의 호스트 이름입니다.

config.changelog.clientAddr

클라이언트의 주소를 보유하는 문자열로, 이 변경을 시작하는 mongos 인스턴스입니다.

config.changelog.time

변경이 발생한 시점을 반영하는 ISODate 타임스탬프입니다.

config.changelog.what

기록된 변경 유형을 반영합니다. 가능한 값은 다음과 같습니다.

  • dropCollection

  • dropCollection.start

  • dropDatabase

  • dropDatabase.start

  • moveChunk.start

  • moveChunk.commit

  • split

  • multi-split

config.changelog.ns

변경이 발생한 네임스페이스입니다.

config.changelog.details

변경 사항에 대한 추가 세부 정보가 포함된 문서 입니다. details 문서의 구조는 변경 유형에 따라 달라집니다.

config.chunks

내부 MongoDB 메타데이터

구성 데이터베이스는 내부 데이터베이스이므로 애플리케이션과 관리자는 정상적인 운영 과정에서 이 데이터베이스의 내용을 수정하거나 의존해서는 안 됩니다.

chunks 컬렉션은 클러스터의 각 청크에 대한 문서를 저장합니다. 이름이 mydb.foo-a_\"cat\" 인 청크에 대한 문서의 다음 예를 살펴보겠습니다.

{
"_id" : "mydb.foo-a_\"cat\"",
"lastmod" : Timestamp(2, 1),
"uuid": "c025d039-e626-435e-b2d2-c1d436038041",
"min" : {
"animal" : "cat"
},
"max" : {
"animal" : "dog"
},
"shard" : "shard0004",
"history" : [ { "validAfter" : Timestamp(1569368571, 27), "shard" : "shard0004" } ]
}

이러한 문서는 minmax 필드의 청크를 설명하는 샤드 키 값의 범위를 저장합니다. 또한 shard 필드는 청크를 "소유"하는 클러스터의 샤드를 식별합니다.

config.collections

내부 MongoDB 메타데이터

구성 데이터베이스는 내부 데이터베이스이므로 애플리케이션과 관리자는 정상적인 운영 과정에서 이 데이터베이스의 내용을 수정하거나 의존해서는 안 됩니다.

collections 컬렉션은 클러스터의 각 샤드 컬렉션에 대한 문서를 저장합니다. records 데이터베이스에 pets라는 컬렉션이 있는 경우 collections 컬렉션의 문서는 다음과 같습니다.

{
"_id" : "records.pets",
"lastmod" : ISODate("2021-07-21T15:48:15.193Z"),
"timestamp": Timestamp(1626882495, 1),
"key" : {
"a" : 1
},
"unique" : false,
"lastmodEpoch" : ObjectId("5078407bd58b175c5c225fdc"),
"uuid" : UUID("f8669e52-5c1b-4ea2-bbdc-a00189b341da")
}
config.databases

내부 MongoDB 메타데이터

구성 데이터베이스는 내부 데이터베이스이므로 애플리케이션과 관리자는 정상적인 운영 과정에서 이 데이터베이스의 내용을 수정하거나 의존해서는 안 됩니다.

databases 컬렉션은 클러스터의 각 데이터베이스에 대한 문서를 저장합니다.

각 데이터베이스에 대해 해당 문서에는 이름, 데이터베이스의 프라이머리 샤드 , 데이터베이스의 샤딩 활성화 상태 및 버전이 표시됩니다.

{ "_id" : "test", "primary" : "shardA", "partitioned" : true, "version" : { "uuid" : UUID("516a5f79-5eb9-4844-8ee9-b8e9de91b760"), "timestamp" : Timestamp(1626894204, 1), "lastMod" : 1 } }
{ "_id" : "hr", "primary" : "shardA", "partitioned" : false, "version" : { "uuid" : UUID("8e39d61d-6259-4c33-a5ed-bcd2ae317b6f"), "timestamp" : Timestamp(1626895015, 1), "lastMod" : 1 } }
{ "_id" : "reporting", "primary" : "shardB", "partitioned" : false, "version" : { "uuid" : UUID("07c63242-51b3-460c-865f-a67b3372d792"), "timestamp" : Timestamp(1626895826, 1), "lastMod" : 1 } }

sh.status() 메서드는 데이터베이스 섹션에 이 정보를 반환합니다.

config.lockpings

내부 MongoDB 메타데이터

구성 데이터베이스는 내부 데이터베이스이므로 애플리케이션과 관리자는 정상적인 운영 과정에서 이 데이터베이스의 내용을 수정하거나 의존해서는 안 됩니다.

lockpings 컬렉션은 샤드 클러스터의 활성 구성 요소를 추적합니다. example.com:30000 에서 mongos 실행 중인 클러스터가 있는 경우 lockpings 컬렉션의 문서는 다음과 유사합니다.

{ "_id" : "example.com:30000:1350047994:16807", "ping" : ISODate("2012-10-12T18:32:54.892Z") }
config.locks

내부 MongoDB 메타데이터

구성 데이터베이스는 내부 데이터베이스이므로 애플리케이션과 관리자는 정상적인 운영 과정에서 이 데이터베이스의 내용을 수정하거나 의존해서는 안 됩니다.

locks 컬렉션은 분산된 잠금을 저장합니다. config 서버 복제본 세트의 프라이머리는 locks 컬렉션에 문서를 삽입하여 잠금을 사용합니다.

{
"_id" : "test.myShardedCollection",
"state" : 2,
"process" : "ConfigServer",
"ts" : ObjectId("5be0b9ede46e4f441a60d891"),
"when" : ISODate("2018-11-05T21:52:00.846Z"),
"who" : "ConfigServer:Balancer",
"why" : "Migrating chunk(s) in collection test.myShardedCollection"
}

버전 3.4 부터 state 필드에는 레거시 mongos 인스턴스가 밸런싱 작업을 수행하지 못하도록 항상 2 값이 있습니다. when 필드는 config 서버 멤버가 프라이머리가 된 시간을 지정합니다.

버전 3.4 에서 밸런서가 활성화되면 다음 3.4 에서와 같이 밸런서가 잠금을 취합니다. 예:

{
"_id" : "balancer",
"state" : 2,
"ts" : ObjectId("5be0bc6cb20effa83b15baa8"),
"who" : "ConfigServer:Balancer",
"process" : "ConfigServer",
"when" : ISODate("2018-11-05T21:56:13.096Z"),
"why" : "CSRS Balancer"
}

버전 3 부터 시작됩니다.6, 밸런서가 더 이상 "잠금"을 사용하지 않습니다. 3 에서 업그레이드한 경우.4 ~ 3.6, 나머지 "_id" : "balancer" 문서를 삭제하도록 선택할 수 있습니다.

config.migrationCoordinators

migrationCoordinators 컬렉션은 각 샤드에 존재하며 이 샤드에서 다른 샤드로 진행 중인 각 청크 마이그레이션에 대한 문서를 저장합니다. 문서를 샤드의 복제본 세트에 있는 대부분의 노드에 쓸 수 없는 경우 청크 마이그레이션이 실패합니다.

마이그레이션이 완료되면 마이그레이션을 설명하는 문서가 에서 삭제됩니다.

config.mongos

내부 MongoDB 메타데이터

구성 데이터베이스는 내부 데이터베이스이므로 애플리케이션과 관리자는 정상적인 운영 과정에서 이 데이터베이스의 내용을 수정하거나 의존해서는 안 됩니다.

mongos 컬렉션은 클러스터와 관련된 각 mongos 인스턴스에 대한 문서를 저장합니다. mongos 인스턴스는 30 초마다 클러스터의 모든 구성원에게 핑을 전송하여 클러스터가 mongos 이(가) 활성 상태인지 확인할 수 있도록 합니다. ping 필드는 마지막 핑 시간을 표시하고 up 필드는 마지막 핑을 기준으로 mongos 의 가동 시간을 보고합니다. 클러스터는 보고 목적으로 이 컬렉션을 유지 관리합니다.

다음 문서는 example.com:27017에서 실행되는 mongos 상태를 보여줍니다.

{
"_id" : "example.com:27017",
"advisoryHostFQDNs" : [
"example.com"
],
"mongoVersion" : "4.2.0",
"ping" : ISODate("2019-09-25T19:26:52.360Z"),
"up" : NumberLong(50),
"waiting" : true
}
config.rangeDeletions

rangeDeletions 컬렉션은 각 샤드에 존재하며 고아 문서가 포함된 각 청크 범위에 대한 문서를 저장합니다. 문서를 샤드의 복제본 세트에 있는 대부분의 노드에 쓸 수 없는 경우 청크 마이그레이션이 실패합니다.

분리된 청크 범위가 정리되면 범위를 설명하는 문서가 컬렉션에서 삭제됩니다.

config.settings

내부 MongoDB 메타데이터

구성 데이터베이스는 내부 데이터베이스이므로 애플리케이션과 관리자는 정상적인 운영 과정에서 이 데이터베이스의 내용을 수정하거나 의존해서는 안 됩니다.

settings 컬렉션에는 다음과 같은 샤딩 구성 설정이 있습니다.

  • 청크 크기. 청크 크기를 변경하려면 샤드 클러스터에서 청크 크기 수정 을 참조하세요. 지정된 chunksize 값은 메가바이트 단위입니다.

  • 밸런서 설정. 밸런서 상태를 포함한 밸런서 설정을 변경하려면 샤드 클러스터 밸런서 관리를 참조하세요.

    MongoDB 4.2부터:

    • balancerStart 또한 샤드 클러스터에 대한 자동 분할도 활성화합니다.

    • balancerStop 또한 샤드 클러스터에 대한 자동 분할도 비활성화합니다.

  • 자동 분할. 자동 분할 플래그를 활성화하거나 비활성화하려면 해당 sh.enableAutoSplit() 메서드 또는 sh.disableAutoSplit() 메서드를 사용합니다.

    MongoDB 4.2부터:

    • balancerStart 또한 샤드 클러스터에 대한 자동 분할도 활성화합니다.

    • balancerStop 또한 샤드 클러스터에 대한 자동 분할도 비활성화합니다.

다음은 settings collection의 몇 가지 예시 문서입니다.

{ "_id" : "chunksize", "value" : 64 }
{ "_id" : "balancer", "mode" : "full", "stopped" : false }
{ "_id" : "autosplit", "enabled" : true }
config.shards

내부 MongoDB 메타데이터

구성 데이터베이스는 내부 데이터베이스이므로 애플리케이션과 관리자는 정상적인 운영 과정에서 이 데이터베이스의 내용을 수정하거나 의존해서는 안 됩니다.

shards 컬렉션은 다음과 같이 클러스터의 각 샤드를 별도의 문서로 나타냅니다.

{ "_id" : "shard0000", "host" : "localhost:30000", "state" : 1 }

샤드가 복제본 세트인 경우 host 필드에는 다음 예와 같이 복제본 세트의 이름과 슬래시, 쉼표로 구분된 복제본 세트의 각 멤버의 호스트 이름 목록이 표시됩니다.

{ "_id" : "shard0001", "host" : "shard0001/localhost:27018,localhost:27019,localhost:27020", "state" : 1 }

샤드에 구역이 할당된 경우 이 문서에는 다음 예와 같이 구역이 할당된 구역의 배열이 포함된 tags 필드가 있습니다.

{ "_id" : "shard0002", "host" : "localhost:30002", "state" : 1, "tags": [ "NYC" ] }
config.tags

내부 MongoDB 메타데이터

구성 데이터베이스는 내부 데이터베이스이므로 애플리케이션과 관리자는 정상적인 운영 과정에서 이 데이터베이스의 내용을 수정하거나 의존해서는 안 됩니다.

tags 컬렉션은 클러스터의 각 영역 범위에 대한 문서를 보유합니다. tags 컬렉션의 문서는 다음과 유사합니다.

{
"_id" : { "ns" : "records.users", "min" : { "zipcode" : "10001" } },
"ns" : "records.users",
"min" : { "zipcode" : "10001" },
"max" : { "zipcode" : "10281" },
"tag" : "NYC"
}
config.version

내부 MongoDB 메타데이터

구성 데이터베이스는 내부 데이터베이스이므로 애플리케이션과 관리자는 정상적인 운영 과정에서 이 데이터베이스의 내용을 수정하거나 의존해서는 안 됩니다.

version 컬렉션에는 현재 메타데이터 버전 번호가 있습니다. 이 컬렉션에는 문서가 하나만 포함되어 있습니다. 예를 들면 다음과 같습니다.

{ "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("5d8bc01a690d8abbd2014ddd") }

version 컬렉션에 액세스하려면 db.getCollection() 메서드를 사용해야 합니다. 예를 들어 컬렉션의 문서를 조회하려면 다음을 수행합니다.

db.getCollection("version").find()

버전 3.6에 새로 추가되었습니다.

MongoDB 3.6부터 데이터베이스에는 config 독립형, 복제본 세트 및 샤드 클러스터에 대해 인과적으로 일관적인 세션과 복제본 세트 및 샤드 클러스터에 대해 재시도 가능한 쓰기 및 트랜잭션을 지원하기 위한 내부 컬렉션이 포함되어 있습니다.

경고

이러한 컬렉션을 수동으로 수정하거나 삭제하지 않도록 합니다.

mongod 또는 mongos 인스턴스에 대한 이러한 컬렉션에 액세스하려면 mongosh 를 인스턴스에 연결합니다.

config.system.sessions

system.sessions 컬렉션은 배포의 모든 멤버가 사용할 수 있는 세션 레코드를 저장합니다.

사용자가 mongod 또는 mongos 인스턴스에서 세션을 만들면 세션처음에는 의 기록이 인스턴스의 인메모리에만 존재합니다. 인스턴스는 주기적으로 캐시된 세션을 system.sessions 컬렉션에 동기화하며, 이 때 배포의 모든 멤버가 해당 세션을 볼 수 있습니다.

system.sessions 컬렉션의 레코드를 보려면 $listSessions를 사용합니다.

경고

system.sessions 컬렉션을 수동으로 수정하거나 삭제하지 않도록 합니다.

샤드 클러스터에서는 system.sessions collection이 샤딩됩니다.

  • 샤드 클러스터에 샤드를 추가할 때, 추가할 샤드에 자체 system.sessions 컬렉션이 이미 포함되어 있으면 MongoDB는 추가 프로세스 중에 새 샤드의 system.sessions 컬렉션을 삭제합니다.

  • 버전 4.4(및 4.2.7)부터 MongoDB는 자동으로 system.sessions 컬렉션을 1024개 이상의 청크로 분할하고 클러스터의 샤드에 균일하게 청크를 분산합니다.

config.transactions

컬렉션은 복제본 세트 및 샤드 클러스터에 transactions 대해 재시도 가능 쓰기트랜잭션을 지원하는 데 사용되는 기록을 저장합니다.

경고

transactions 컬렉션을 수동으로 수정하거나 삭제하지 않도록 합니다.

돌아가기

샤드 클러스터 문제 해결