Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

Config Database

이 페이지의 내용

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

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

  • 샤딩된 클러스터 운영

  • 독립형, 복제본 세트 및 샤딩된 클러스터에 대한 인과적으로 일관된 세션과 복제본 세트 및 샤딩된 클러스터에 대한 재시도 가능 쓰기.

참고

샤딩된 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 메타데이터

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

config.chunks 컬렉션은 클러스터의 각 청크에 대한 문서를 저장합니다. 다음 예시는 문서를 보여줍니다.

{
_id: ObjectId('65a954c0de11596e08e7c1dc'),
uuid: UUID('a4479215-a38d-478f-a82b-e5e95d455e55'),
min: { a: Long('121204345') },
max: { a: Long('993849349') },
shard: 'shard01',
lastmod: Timestamp({ t: 1, i: 0 }),
history: [
{
validAfter: Timestamp({ t: 1705596095, i: 14 }),
shard: 'shard01'
}
]
}

문서에서 다음을 수행합니다.

  • _id 은(는) 청크 식별자입니다.

  • minmax은(는) 청크의 샤드 키에 대한 값 범위입니다.

  • shard 은(는) cluster에 청크를 저장하는 샤드의 이름입니다.

컬렉션에서 청크를 찾으려면 config.collections 컬렉션에서 컬렉션의 uuid 식별자를 조회합니다. 그런 다음 uuid를 사용하여 config.chunks 컬렉션에서 동일한 uuid를 가진 일치하는 문서를 조회합니다.

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.migrationCoordinators

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

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

config.mongos

내부 MongoDB 메타데이터

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

mongos 컬렉션은 클러스터와 연결된 각 mongos 인스턴스에 대한 문서를 저장합니다. 클러스터는 보고 목적으로 이 컬렉션을 유지 관리합니다.

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

필드
데이터 유형
설명
_id
문자열
mongos 실행 중인 호스트 이름 및 포트입니다. 형식은 _id <hostname>:<port>로 지정됩니다.
advisoryHostFQDNs
문자열 배열
mongos의 정규화된 도메인 이름 (FQDN) 의 배열.
created
날짜

mongos가 시작된 시간입니다.

버전 5.2에 추가되었습니다.

mongoVersion
문자열
mongos가 실행 중인 MongoDB 버전입니다.
ping
날짜
mongos 인스턴스는 30초마다 구성 서버에 ping을 보냅니다. 이 필드는 마지막 핑 시간을 나타냅니다.
up
NumberLong
마지막 핑을 기준으로 mongos가 작동한 시간 (초) 입니다.
waiting
부울
이 필드는 항상 true이며 이전 버전과의 호환성을 위해서만 포함됩니다.

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

[
{
_id: 'example.com:27017',
advisoryHostFQDNs: [ "example.com" ],
created: ISODate("2021-11-22T16:32:13.708Z"),
mongoVersion: "5.2.0",
ping: ISODate("2021-12-15T22:09:23.161Z"),
up: Long("2007429"),
waiting: true
}
]
config.rangeDeletions

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

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

config.settings

내부 MongoDB 메타데이터

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

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

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

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

  • Autosplit:

    MongoDB 6.0.3부터 자동 청크 분할이 수행되지 않습니다. 이는 밸런싱 정책이 개선되었기 때문입니다. 자동 분할 명령이 여전히 존재하지만 작업을 수행하지 않습니다. 자세한 내용은 밸런싱 정책 변경을 참조하세요.

    6.0 이전의 MongoDB 버전:

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

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

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

settings 컬렉션 내의 예시 문서입니다.

{ "_id" : "chunksize", "value" : 64 }
{ "_id" : "balancer", "mode" : "full", "stopped" : false }
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()

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 컬렉션을 제거합니다.

config.transactions

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

경고

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

돌아가기

샤딩된 클러스터 문제 해결