我们有一个在 Ubuntu 10.04 上运行 MongoDB 2.2 的三服务器副本集,最近不得不为每个特定数据库所在的服务器升级硬盘驱动器。该数据库包含 Web 服务请求的日志信息,它们使用当前时间戳写入每小时存储桶中的集合以确定名称,例如log_yyyymmddhh。
我执行了这个过程:
- 使用mongodump --db log_db备份主服务器上的数据库
- 使辅助服务器脱机,更换磁盘
- 以独立模式启动辅助服务器(即在启动服务之前注释掉 /etc/mongodb.conf 中的 replSet 条目)
- 使用mongorestore --drop --db log_db恢复辅助服务器上的数据库
- 将辅助服务器添加回副本集并使其联机,让复制赶上在脱机时更新/创建的每小时存储桶
一切似乎都按预期进行,除了在备份时作为当前存储桶的集合没有通过复制更新。我不得不手动复制该集合以使其保持最新。请注意,备份后创建的集合可以很好地同步。
在这个过程中我错过了什么导致 MongoDB 无法让那个集合恢复同步?我认为关于 oplog 有什么问题吗?
编辑1:
主节点上的 oplog 显示其最早的时间戳可以追溯到几天前,因此应该有足够的空间来维持几个小时的事务(这是从节点离线的时间)。
编辑2:
我们的 MongoDB 安装使用两个磁盘分区:/dev/sda1 和 /dev/sdb1。主要的 MongoDB 目录 /var/lib/mongodb/ 位于 /dev/sda1 上,并包含多个数据库,而日志数据库本身位于 /dev/sdb1 上。有一个符号链接/var/lib/mongodb/log_db指向 /dev/sdb1 上的目录。由于日志数据库已满,我们需要升级 /dev/sdb1 的磁盘。