搭建简单MongoDB复制集步骤
- 准备节点:
- 至少准备3个MongoDB实例(建议奇数个,如3个、5个等,便于选举)。假设我们准备三个节点,分别命名为node1、node2、node3,每个节点有独立的数据目录和日志目录。
- 配置实例:
- 编辑每个MongoDB实例的配置文件(通常为
mongod.conf
)。
- 为每个实例设置不同的端口号(如27017、27018、27019)。
- 设置
replSetName
为相同的复制集名称,例如:
replication:
replSetName: myReplSet
- 配置存储路径
storage.dbPath
和日志路径 systemLog.path
等参数。
- 启动实例:
- 在每个节点上使用相应的配置文件启动MongoDB实例,例如:
mongod -f /path/to/mongod.conf
。
- 初始化复制集:
- 连接到其中一个节点(如node1)的MongoDB shell,例如:
mongo --port 27017
。
- 在MongoDB shell中运行初始化命令:
rs.initiate({
_id: "myReplSet",
members: [
{ _id: 0, host: "node1:27017" },
{ _id: 1, host: "node2:27018" },
{ _id: 2, host: "node3:27019" }
]
})
配置持久性相关参数确保数据可靠存储与恢复
- 日志相关:
- 启用journaling:默认情况下,MongoDB从2.0版本开始就启用了journaling。journaling 会记录数据库的操作日志,以便在崩溃后恢复数据。在配置文件中确保
storage.journal.enabled
为 true
(默认值),如下:
storage:
journal:
enabled: true
- 日志写入频率:
storage.journal.commitIntervalMs
参数控制journal日志写入磁盘的频率,默认是100ms。可以根据系统负载和性能需求调整,不过较小的值会增加磁盘I/O但能更好地保证数据持久性,例如:
storage:
journal:
commitIntervalMs: 50
- oplog相关:
- oplog大小:oplog(操作日志)记录了主节点的所有写操作,副本集成员通过应用oplog来保持数据同步。
oplogSizeMB
参数可以设置oplog的大小(以MB为单位)。可以根据预计的写操作量来调整,例如设置为500MB:
replication:
oplogSizeMB: 500
- oplog保留时间:虽然没有直接设置oplog保留时间的参数,但通过调整oplog大小间接影响保留时间。更大的oplog大小能保留更长时间的操作日志,有利于数据恢复和故障转移。
- W和J参数:
- W参数:在写操作时,可以指定
w
选项,它表示写操作需要等待多少个副本集成员确认才返回。例如 w: "majority"
表示等待大多数节点确认后才返回,确保写操作的持久性。示例代码如下:
db.collection.insertOne({data: "test"}, {w: "majority"})
- J参数:
j
选项表示写操作是否等待journal日志写入磁盘后才返回。设置 j: true
能进一步保证数据持久性,例如:
db.collection.insertOne({data: "test"}, {j: true})