对于Unix和Windows系统,默认操作日志大小取决于存储引擎:
储存引擎 | 默认操作日志大小 | 下界 | 上界 |
---|---|---|---|
In-Memory存储引擎 | 物理内存的5% | 50MB | 50GB |
WiredTiger存储引擎 | 可用磁盘空间的5% | 990MB | 50GB |
Oplog 的值是储存在 local 库下的 集合 oplog.rs 里的。
# 获取日志
use local
db.polog.rs.find()
# 日志内容
{ "ts" : Timestamp(1554948714, 1), "t" : NumberLong(7), "h" : NumberLong("5670178969026212077"), "v" : 2, "op" : "i", "ns" : "djx.a", "ui" : UUID("f0a8c38d-af6b-4fb1-a109-775455dd7f19"), "wall" : ISODate("2019-04-11T02:11:54.602Z"), "o" : { "_id" : ObjectId("5caea26adebe94533fdb42a9"), "name" : "youju" } }
Oplog 的日志由 key value 组成。
ts 的值: 表示该日志的时间戳
op 的值: i 表示 insert ,u 表示 update, d 表示 delete, c 表示的是 db cmd, db 表示声明当前数据库 (其中ns 被设置成为=>数据库名称+ '.'), n 表示 noop,,即空操作,其会定期执行以确保时效性
ns 的值: 表示操作所在的数据库和集合。
ui 的值: 表示当前登录用户的会话 id 值。
wall 的值: 表示该操作的执行时间,utc时间。
o 的值: 表示操作的内容,如果是插入,就会将插入的数据放到该位置。示例日志就是插入了一条数据{"name":"youju"}
[root@localhost /]# cd /opt/
[root@localhost opt]# mkdir mongodb
[root@localhost opt]# cd mongodb/
[root@localhost mongodb]# wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.4.4.tgz
[root@localhost mongodb]# tar -zxvf mongodb-linux-x86_64-rhel70-4.4.4.tgz
IP | port | role |
---|---|---|
192.168.128.208 | 27017 | PRIMARY |
192.168.128.208 | 27018 | SECONDARY |
192.168.128.208 | 27019 | ARBITER |
[root@localhost mongodb]# mkdir primary
[root@localhost mongodb]# cd primary
[root@localhost primary]# mkdir data logs config pid
[root@localhost primary]# ll
总用量 0
drwxr-xr-x. 2 root root 25 3月 3 21:51 config
drwxr-xr-x. 2 root root 6 3月 2 22:20 data
drwxr-xr-x. 2 root root 6 3月 2 22:20 logs
drwxr-xr-x. 2 root root 6 3月 3 21:43 pid
[root@localhost mongodb]# mkdir secondary
[root@localhost mongodb]# cd secondary
[root@localhost secondary]# mkdir data logs config pid
[root@localhost secondary]# ll
总用量 0
drwxr-xr-x. 2 root root 25 3月 3 21:51 config
drwxr-xr-x. 2 root root 6 3月 2 22:20 data
drwxr-xr-x. 2 root root 6 3月 2 22:20 logs
drwxr-xr-x. 2 root root 6 3月 3 21:43 pid
[root@localhost mongodb]# mkdir arbiter
[root@localhost mongodb]# cd arbiter
[root@localhost arbiter]# mkdir data logs config pid
[root@localhost arbiter]# ll
总用量 0
drwxr-xr-x. 2 root root 25 3月 3 21:51 config
drwxr-xr-x. 2 root root 6 3月 2 22:20 data
drwxr-xr-x. 2 root root 6 3月 2 22:20 logs
drwxr-xr-x. 2 root root 6 3月 3 21:43 pid
[root@localhost primary]# cd /opt/mongodb/primary/
[root@localhost primary]# vim config/mongod.conf
添加内容如下:
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/opt/mongodb/primary/logs/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod
dbPath: "/opt/mongodb/primary/data"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/opt/mongodb/primary/pid/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true
#服务实例绑定的IP
bindIp: 0.0.0.0
#bindIp
#绑定的端口
port: 27017
replication:
#副本集的名称
replSetName: "test"
[root@localhost ]# cd /opt/mongodb/secondary/
[root@localhost secondary]# vim config/mongod.conf
添加内容如下:
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/opt/mongodb/secondary/logs/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod
dbPath: "/opt/mongodb/secondary/data"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/opt/mongodb/secondary/pid/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true
#服务实例绑定的IP
bindIp: 0.0.0.0
#bindIp
#绑定的端口
port: 27018
replication:
#副本集的名称
replSetName: "test"
[root@localhost ]# cd /opt/mongodb/arbiter/
[root@localhost arbiter]# vim config/mongod.conf
添加内容如下:
systemLog:
#MongoDB发送所有日志输出的目标指定为文件
destination: file
#mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径
path: "/opt/mongodb/arbiter/logs/mongod.log"
#当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾
logAppend: true
storage:
#mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod
dbPath: "/opt/mongodb/arbiter/data"
journal:
#启用或禁用持久性日志以确保数据文件保持有效和可恢复。
enabled: true
processManagement:
#启用在后台运行mongos或mongod进程的守护进程模式。
fork: true
#指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID
pidFilePath: "/opt/mongodb/arbiter/pid/mongod.pid"
net:
#服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip
#bindIpAll: true
#服务实例绑定的IP
bindIp: 0.0.0.0
#bindIp
#绑定的端口
port: 27019
replication:
#副本集的名称
replSetName: "test"
[root@localhost mongodb]# cd /opt/mongodb/
[root@localhost mongodb]# ll
总用量 69796
drwxr-xr-x. 6 root root 55 3月 3 21:43 arbiter
drwxr-xr-x. 3 root root 100 3月 2 21:44 mongodb-linux-x86_64-rhel70-4.4.4
-rw-r--r--. 1 root root 71468089 3月 2 21:43 mongodb-linux-x86_64-rhel70-4.4.4.tgz
drwxr-xr-x. 6 root root 55 3月 3 21:44 primary
drwxr-xr-x. 6 root root 55 3月 3 21:43 secondary
# 启动主节点
[root@localhost mongodb]# mongodb-linux-x86_64-rhel70-4.4.4/bin/mongod --config primary/config/mongod.conf
[root@localhost mongodb]# cd /opt/mongodb/
[root@localhost mongodb]# ll
总用量 69796
drwxr-xr-x. 6 root root 55 3月 3 21:43 arbiter
drwxr-xr-x. 3 root root 100 3月 2 21:44 mongodb-linux-x86_64-rhel70-4.4.4
-rw-r--r--. 1 root root 71468089 3月 2 21:43 mongodb-linux-x86_64-rhel70-4.4.4.tgz
drwxr-xr-x. 6 root root 55 3月 3 21:44 primary
drwxr-xr-x. 6 root root 55 3月 3 21:43 secondary
# 启动副节点
mongodb-linux-x86_64-rhel70-4.4.4/bin/mongod --config secondary/config/mongod.conf
[root@localhost mongodb]# cd /opt/mongodb/
[root@localhost mongodb]# ll
总用量 69796
drwxr-xr-x. 6 root root 55 3月 3 21:43 arbiter
drwxr-xr-x. 3 root root 100 3月 2 21:44 mongodb-linux-x86_64-rhel70-4.4.4
-rw-r--r--. 1 root root 71468089 3月 2 21:43 mongodb-linux-x86_64-rhel70-4.4.4.tgz
drwxr-xr-x. 6 root root 55 3月 3 21:44 primary
drwxr-xr-x. 6 root root 55 3月 3 21:43 secondary
# 启动仲裁节点
mongodb-linux-x86_64-rhel70-4.4.4/bin/mongod --config arbiter/config/mongod.conf
连接任意一个节点
[root@localhost mongodb]# cd /opt/mongodb/
[root@localhost mongodb]# mongodb-linux-x86_64-rhel70-4.4.4/bin/mongo
MongoDB shell version v4.4.4
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("eb08dc0a-8d21-419e-b53d-426acb9b4a08") }
MongoDB server version: 4.4.4
---
The server generated these startup warnings when booting:
2021-03-03T22:16:49.901+08:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2021-03-03T22:16:49.901+08:00: You are running this process as the root user, which is not recommended
2021-03-03T22:16:49.901+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
2021-03-03T22:16:49.901+08:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never'
2021-03-03T22:16:49.901+08:00: Soft rlimits too low
2021-03-03T22:16:49.901+08:00: currentValue: 1024
2021-03-03T22:16:49.901+08:00: recommendedMinimum: 64000
---
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
> use admin
switched to db admin
> config={
... _id: "test",
... members: [
... { _id: 0, host: "127.0.0.1:27017",priority:2 },
... { _id: 1, host: "127.0.0.1:27018",priority:1 },
... { _id: 2, host: "127.0.0.1:27019",arbiterOnly:true }
... ] }
{
"_id" : "test",
"members" : [
{
"_id" : 0,
"host" : "127.0.0.1:27017",
"priority" : 2
},
{
"_id" : 1,
"host" : "127.0.0.1:27018",
"priority" : 1
},
{
"_id" : 2,
"host" : "127.0.0.1:27019",
"arbiterOnly" : true
}
]
}
> rs.initiate(config)
{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1614782486, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1614782486, 1)
}
test:SECONDARY> rs.status()
{
"set" : "test",
"date" : ISODate("2021-03-03T14:42:33.905Z"),
"myState" : 1,
"term" : NumberLong(1),
"syncSourceHost" : "",
"syncSourceId" : -1,
"heartbeatIntervalMillis" : NumberLong(2000),
"majorityVoteCount" : 2,
"writeMajorityCount" : 2,
"votingMembersCount" : 3,
"writableVotingMembersCount" : 2,
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1614782547, 1),
"t" : NumberLong(1)
},
"lastCommittedWallTime" : ISODate("2021-03-03T14:42:27.366Z"),
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1614782547, 1),
"t" : NumberLong(1)
},
"readConcernMajorityWallTime" : ISODate("2021-03-03T14:42:27.366Z"),
"appliedOpTime" : {
"ts" : Timestamp(1614782547, 1),
"t" : NumberLong(1)
},
"durableOpTime" : {
"ts" : Timestamp(1614782547, 1),
"t" : NumberLong(1)
},
"lastAppliedWallTime" : ISODate("2021-03-03T14:42:27.366Z"),
"lastDurableWallTime" : ISODate("2021-03-03T14:42:27.366Z")
},
"lastStableRecoveryTimestamp" : Timestamp(1614782497, 3),
"electionCandidateMetrics" : {
"lastElectionReason" : "electionTimeout",
"lastElectionDate" : ISODate("2021-03-03T14:41:37.330Z"),
"electionTerm" : NumberLong(1),
"lastCommittedOpTimeAtElection" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
},
"lastSeenOpTimeAtElection" : {
"ts" : Timestamp(1614782486, 1),
"t" : NumberLong(-1)
},
"numVotesNeeded" : 2,
"priorityAtElection" : 2,
"electionTimeoutMillis" : NumberLong(10000),
"numCatchUpOps" : NumberLong(0),
"newTermStartDate" : ISODate("2021-03-03T14:41:37.357Z"),
"wMajorityWriteAvailabilityDate" : ISODate("2021-03-03T14:41:38.727Z")
},
"members" : [
{
"_id" : 0,
"name" : "127.0.0.1:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 1545,
"optime" : {
"ts" : Timestamp(1614782547, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2021-03-03T14:42:27Z"),
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "Could not find member to sync from",
"electionTime" : Timestamp(1614782497, 1),
"electionDate" : ISODate("2021-03-03T14:41:37Z"),
"configVersion" : 1,
"configTerm" : 1,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 1,
"name" : "127.0.0.1:27018",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 67,
"optime" : {
"ts" : Timestamp(1614782547, 1),
"t" : NumberLong(1)
},
"optimeDurable" : {
"ts" : Timestamp(1614782547, 1),
"t" : NumberLong(1)
},
"optimeDate" : ISODate("2021-03-03T14:42:27Z"),
"optimeDurableDate" : ISODate("2021-03-03T14:42:27Z"),
"lastHeartbeat" : ISODate("2021-03-03T14:42:33.367Z"),
"lastHeartbeatRecv" : ISODate("2021-03-03T14:42:32.878Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "127.0.0.1:27017",
"syncSourceId" : 0,
"infoMessage" : "",
"configVersion" : 1,
"configTerm" : 1
},
{
"_id" : 2,
"name" : "127.0.0.1:27019",
"health" : 1,
"state" : 7,
"stateStr" : "ARBITER",
"uptime" : 67,
"lastHeartbeat" : ISODate("2021-03-03T14:42:33.367Z"),
"lastHeartbeatRecv" : ISODate("2021-03-03T14:42:33.367Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"configVersion" : 1,
"configTerm" : 1
}
],
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1614782547, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
},
"operationTime" : Timestamp(1614782547, 1)
}
test:PRIMARY>