面试题答案
一键面试常见备份策略
- mongodump 和 mongorestore:
- 原理:
mongodump
工具会将指定 MongoDB 实例中的数据导出为 BSON 文件,mongorestore
则用于将这些 BSON 文件中的数据恢复到 MongoDB 实例中。 - 保证数据完整性:在单节点环境下,
mongodump
直接连接到该节点,按数据库、集合依次导出数据,能保证数据完整。在副本集环境中,mongodump
通常连接到主节点进行备份,由于副本集的复制机制,从节点会与主节点保持数据同步,所以能保证备份数据的完整性。对于分片集群,mongodump
会连接到 mongos 路由节点,它会协调从各个分片和配置服务器导出数据,确保整个集群数据完整备份。
- 原理:
- 文件系统快照:
- 原理:利用底层存储系统的快照功能,对包含 MongoDB 数据文件的存储卷创建快照。
- 保证数据完整性:在单节点下,只要快照创建瞬间 MongoDB 数据文件处于一致性状态,就能完整备份数据。副本集和分片集群环境中,由于数据文件在各节点是一致的(副本集通过复制,分片集群通过数据分布规则保证),所以只要各节点数据文件同时快照,就能保证整个集群数据的完整性。不过需要注意,在创建快照时 MongoDB 可能正在写入数据,可能导致部分数据未完全落盘,所以通常需要在创建快照前执行
fsync
并锁定数据库,完成快照后再解锁。
- ** oplog 重放**:
- 原理: oplog(操作日志)记录了 MongoDB 实例的所有写操作。通过保留 oplog 并在需要恢复时重放 oplog 中的操作,可将数据库恢复到某个时间点的状态。
- 保证数据完整性:在副本集环境中,主节点的 oplog 会同步到从节点,可利用从节点的 oplog 进行备份和恢复。只要 oplog 记录完整且重放过程无误,就能保证数据恢复到期望的时间点状态。对于分片集群,配置服务器也会记录 oplog 相关信息,通过结合各分片和配置服务器的 oplog 信息,也能实现数据的完整恢复。
不同部署架构下备份策略的差异
- 单节点:备份相对简单,可直接使用
mongodump
或文件系统快照。无需考虑节点间数据同步问题,只要备份工具或快照操作正常执行,就能保证数据完整性。 - 副本集:
mongodump
一般连接主节点备份,但要注意主从同步延迟可能影响备份数据的时效性。文件系统快照需要协调各节点同时操作,保证数据一致性。oplog 重放依赖从节点的 oplog 同步情况,确保重放的操作完整且顺序正确。 - 分片集群:
mongodump
要通过 mongos 路由节点协调各分片和配置服务器数据导出。文件系统快照不仅要协调各分片节点,还需关注配置服务器数据文件。oplog 重放需要综合各分片和配置服务器的 oplog 信息,操作更为复杂,以保证整个集群数据恢复的完整性。