36. MongoDB Replication Part 6. - oplog
oplog
(operation log)는 master 노드에 요청되는 연산들이 로그로 기록되는 파일이며, local
이라는 이름의 db
내의 oplog.rs
(rs
는 Replica Set
의 이름)이라는 이름의 컬렉션 내에 저장됩니다.
예를 들어 oplog
의 내용을 출력하면 다음과 같습니다:
> show dbs
local 4.279296875GB
test 0.0625GB
> use local
switched to db local
> db.getCollectionNames()
[
"oplog.rs",
"slaves",
"startup_log",
"system.indexes",
"system.replset"
]
> db.oplog.rs.find().pretty()
{
"ts" : Timestamp(1396096489, 1),
"h" : NumberLong(0),
"v" : 2,
"op" : "n",
"ns" : "",
"o" : {
"msg" : "initiating set"
}
}
{
"ts" : Timestamp(1396096495, 1),
"h" : NumberLong("-8745255044808441839"),
"v" : 2,
"op" : "n",
"ns" : "",
"o" : {
"msg" : "Reconfig set",
"version" : 2
}
}
{
"ts" : Timestamp(1396096507, 1),
"h" : NumberLong("-4666497119748582412"),
"v" : 2,
"op" : "n",
"ns" : "",
"o" : {
"msg" : "Reconfig set",
"version" : 3
}
}
{
"ts" : Timestamp(1396097326, 1),
"h" : NumberLong("2929377522288628653"),
"v" : 2,
"op" : "i",
"ns" : "test.tmp",
"o" : {
"_id" : ObjectId("5336c12e07a320abf7b320e3"),
"username" : "gchoi",
"pwd" : 1234
}
}
도큐먼트는 위와 같이 ts
, h
, v
, op
, ns
, o
등의 키를 포함하는데 주요 키에 대한 설명은 다음과 같습니다.
-
ts
연산에 대한 타임스탬프(Timestamp). 4 바이트의 타임스탬프와 4 바이트의 증가 카운터로 구성되어 있습니다.
-
op
1 바이트 코드로 수행되는 연산 유형.
i
는 insert를 의미합니다. -
ns
연산이 수행되었던 컬렉션 이름(네임스페이스).
-
o
수행할 연산을 지정하는 도큐먼트.
oplog
에 대한 몇가지 특징을 살펴보겠습니다:
-
oplog
는 master와 slave 노드 간 데이터를 동기화하는 것이 주목적이므로 데이터의 쓰기 등과 관련된 연산만 기록된다는 것입니다. 즉, 이미 저장된 데이터에 대한 처리를 위한 쿼리는 기록되지 않으며 사실상 기록될 필요가 없습니다. -
oplog
에 저장된 연산들은 master 서버에서 수행된 연산들과 정확히 일치하는 것은 아닙니다. -
oplog
는Capped Collection
에 저장됩니다.