MST

星途 面试题库

面试题:MongoDB复制集搭建与持久性配置基础

请描述如何搭建一个简单的MongoDB复制集,并说明在复制集环境下,怎样配置持久性相关参数以确保数据的可靠存储与恢复?
42.6万 热度难度
数据库MongoDB

知识考点

AI 面试

面试题答案

一键面试

搭建简单MongoDB复制集步骤

  1. 准备节点
    • 至少准备3个MongoDB实例(建议奇数个,如3个、5个等,便于选举)。假设我们准备三个节点,分别命名为node1、node2、node3,每个节点有独立的数据目录和日志目录。
  2. 配置实例
    • 编辑每个MongoDB实例的配置文件(通常为 mongod.conf)。
    • 为每个实例设置不同的端口号(如27017、27018、27019)。
    • 设置 replSetName 为相同的复制集名称,例如:
replication:
  replSetName: myReplSet
  • 配置存储路径 storage.dbPath 和日志路径 systemLog.path 等参数。
  1. 启动实例
    • 在每个节点上使用相应的配置文件启动MongoDB实例,例如:mongod -f /path/to/mongod.conf
  2. 初始化复制集
    • 连接到其中一个节点(如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" }
    ]
})

配置持久性相关参数确保数据可靠存储与恢复

  1. 日志相关
    • 启用journaling:默认情况下,MongoDB从2.0版本开始就启用了journaling。journaling 会记录数据库的操作日志,以便在崩溃后恢复数据。在配置文件中确保 storage.journal.enabledtrue(默认值),如下:
storage:
  journal:
    enabled: true
  • 日志写入频率storage.journal.commitIntervalMs 参数控制journal日志写入磁盘的频率,默认是100ms。可以根据系统负载和性能需求调整,不过较小的值会增加磁盘I/O但能更好地保证数据持久性,例如:
storage:
  journal:
    commitIntervalMs: 50
  1. oplog相关
    • oplog大小:oplog(操作日志)记录了主节点的所有写操作,副本集成员通过应用oplog来保持数据同步。oplogSizeMB 参数可以设置oplog的大小(以MB为单位)。可以根据预计的写操作量来调整,例如设置为500MB:
replication:
  oplogSizeMB: 500
  • oplog保留时间:虽然没有直接设置oplog保留时间的参数,但通过调整oplog大小间接影响保留时间。更大的oplog大小能保留更长时间的操作日志,有利于数据恢复和故障转移。
  1. 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})