Skip to content

Master 또는 slave 노드 모두에 대하여 다음과 같이 명령을 입력해 보도록 하겠습니다:

> show dbs
admin  (empty)
local  0.078GB

DB 리스트를 살펴보면 최소한 admin과 local이 존재할 것입니다. local은 로컬 데이터베이스로써 master 노드와 slave 노드에 모두 존재하며 복제와 관련된 상태 정보가 저장되어 있으며, 로컬이라는 이름대로 로컬 노드에만 저장되며 복제되지 않습니다.

master 노드(포트 번호 3000이라고 가정)와 slave 노드(포트 번호 3001이라고 가정)에 대한 각각의 local DB의 내용을 살펴보자:


Master 노드:

> use local
switched to db local
> db.getCollectionNames()
[ "oplog.$main", "slaves", "startup_log", "system.indexes" ]
> db.slaves.find().pretty()
{
        "_id" : ObjectId("5345047cd8b2b6867fc017f5"),
        "config" : {
                "host" : "127.0.0.1:52627",
                "upgradeNeeded" : true
        },
        "ns" : "local.oplog.$main",
        "syncedTo" : Timestamp(1397032697, 1)
}
{
        "_id" : ObjectId("5345048241718ff4bcf3758d"),
        "config" : {
                "host" : "127.0.0.1:52628",
                "upgradeNeeded" : true
        },
        "ns" : "local.oplog.$main",
        "syncedTo" : Timestamp(1397032697, 1)
}

Slave 노드:

> use local
switched to db local
> db.getCollectionNames()
[ "me", "sources", "startup_log", "system.indexes" ]
> db.sources.find().pretty()
2014-04-09T17:39:17.113+0900 TypeError: Object DBQuery: local.sources -> { } has no method 'pretyy'
> db.sources.find().pretty()
{
        "_id" : ObjectId("5345047dd8b2b6867fc017f6"),
        "host" : "localhost:3000",
        "source" : "main",
        "syncedTo" : Timestamp(1397032657, 1)
}

위의 내용을 살펴보면, master 노드의 local DB에는 slaves라는 컬렉션이 존재하며 현재 이 master 노드에 연결된 slave 노드에 대한 정보가 저장되어 있습니다.

또한 slave 노드의 local DB에는 sources라는 컬렉션이 존재하며 이 slave 노드에 대한 master 노드의 정보가 저장되어 있습니다.

두 컬렉션 모두 syncedTo라는 키(key)가 존재하는데 이는 최신으로 업데이트 된 타임스탬프가 기록되어 있습니다.