Config Database
config
데이터베이스의 컬렉션은 다음을 지원합니다.
MongoDB 3.6 에서 시작하여 독립형, 복제본 세트 및 샤드 클러스터에 대한 인과적으로 일관된 세션 과 복제본 세트 및 샤드 클러스터에 대한 재시도 가능 쓰기를 제공합니다.
참고
샤딩된 cluster는 mongos
에 연결하는지 또는 mongod
에 연결하는지에 따라 config
데이터베이스에 다른 collection이 표시될 수 있습니다.
mongos
에서config
데이터베이스는collections
또는chunks
와 같은 config 서버에 있는 컬렉션을 표시합니다.mongod
에서config
데이터베이스는migrationCoordinators
또는rangeDeletions
와 같이 지정된 샤드와 관련된 컬렉션을 표시합니다
config 서버와 샤드가 동일한 노드에서 호스팅되는 경우 mongos
가 config
데이터베이스의 일부 샤드 로컬 collection에 액세스할 수 있습니다.
제한 사항
MongoDB 5.0부터는 다음과 같은 읽기 고려 사항 및 옵션이 있는 config.transactions
컬렉션에서 트랜잭션이 아닌 읽기가 허용되지 않습니다.
"majority"
이고 afterClusterTime 옵션이 설정되어 있습니다.인과적으로 일관된 세션 내에서 MongoDB 드라이버 및
"majority"
를 사용할 때
중요
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
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.clientAddr
클라이언트의 주소를 보유하는 문자열로, 이 변경을 시작하는
mongos
인스턴스입니다.
config.changelog.time
변경이 발생한 시점을 반영하는 ISODate 타임스탬프입니다.
config.chunks
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" } ] } 이러한 문서는
min
및max
필드의 청크를 설명하는 샤드 키 값의 범위를 저장합니다. 또한shard
필드는 청크를 "소유"하는 클러스터의 샤드를 식별합니다.
config.collections
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
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
lockpings
컬렉션 은 샤딩된 클러스터 의 활성 구성 요소를 추적 합니다.example.com:30000
에서mongos
실행 클러스터 가 있는 경우lockpings
컬렉션 의 문서 는 다음과 유사합니다.{ "_id" : "example.com:30000:1350047994:16807", "ping" : ISODate("2012-10-12T18:32:54.892Z") }
config.locks
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
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
settings
컬렉션에는 다음과 같은 샤딩 구성 설정이 있습니다.청크 크기. 청크 크기를 변경하려면 샤드 클러스터에서 청크 크기 수정 을 참조하세요. 지정된
chunksize
값은 메가바이트 단위입니다.밸런서 설정. 밸런서 상태를 포함한 밸런서 설정을 변경하려면 샤딩된 클러스터 밸런서 관리를 참조하세요.
MongoDB 4.2부터:
balancerStart
또한 샤딩된 클러스터에 대한 자동 분할도 활성화합니다.balancerStop
또한 샤딩된 클러스터에 대한 자동 분할도 비활성화합니다.
자동 분할. 자동 분할 플래그를 활성화하거나 비활성화하려면 해당
sh.enableAutoSplit()
메서드 또는sh.disableAutoSplit()
메서드를 사용합니다.MongoDB 4.2부터:
balancerStart
또한 샤딩된 클러스터에 대한 자동 분할도 활성화합니다.balancerStop
또한 샤딩된 클러스터에 대한 자동 분할도 비활성화합니다.
다음은
settings
컬렉션 의 몇 가지 예시 문서입니다.{ "_id" : "chunksize", "value" : 64 } { "_id" : "balancer", "mode" : "full", "stopped" : false } { "_id" : "autosplit", "enabled" : true }
config.shards
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
tags
컬렉션은 클러스터의 각 영역 범위에 대한 문서를 보유합니다.tags
컬렉션의 문서는 다음과 유사합니다.{ "_id" : { "ns" : "records.users", "min" : { "zipcode" : "10001" } }, "ns" : "records.users", "min" : { "zipcode" : "10001" }, "max" : { "zipcode" : "10281" }, "tag" : "NYC" }
config.version
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개 이상의 청크로 분할하고 클러스터의 샤드에 균일하게 청크를 분산합니다.