Mongodb副本设置问题

时间:2015-06-19 01:58:50

标签: mongodb replicaset

我有一台主机,一台辅助机器和一台仲裁机器的mongodb副本集配置。主机和辅助机器有2个集合(每个集合都在自己的数据库中)

我需要从一个集合中删除一些Gb并保持其他集合不变。 我是全新的,所以我想得到这个想法/陷阱。 我正在考虑遵循这个程序:

  1. 从副本集中删除辅助节点。
  2. 在辅助设备中,对于我要删除的集合,请执行我要保留的数据的mongodump。
  3. 从该转储中恢复mongo。
  4. 将辅助设备重新添加回副本集。 我想我必须设置优先级,以便主要不会成为 次级?
  5. 辅助人员会同步/赶上主要我希望但是 我在辅助数据库中删除的数据会发生什么? 主要是否将其从自身中删除? (这就是我想要的)

  6. 我是否需要对小学做任何事情?

1 个答案:

答案 0 :(得分:2)

滚动维护:

  • 要查看您拥有的oplog时间,关闭辅助节点并进行追赶:db.printReplicationInfo()
  • 使用小学,中学和仲裁员时...然后取出中学可能会有风险。如果在维护期间出现问题,主服务器将无法进行故障转移。小学 - 中学 - 中学会更安全。
  • 关闭您的辅助节点后,重新启动它而不使用--replSet选项并在另一个端口上 ,否则复制副本的其余部分将会混淆。
  • 使用--replSet重新启动辅助节点,旧端口将再次将其添加到副本集。别担心,您的小学将保持小学一年级。仅投票/选举'当主节点消失时发生...而在添加辅助节点时则不是这样。
  • 中学将从oplog中赶上来。
  • 要处理小学课程。在主服务器上执行rs.stepDown(),让辅助服务器接管,然后重复该过程。

滚动维护期间的清理

这里我不太确定,现在只能做一些猜测,因为我还没有测试过。在滚动维护期间您可以做的是:

  • 更新二进制文件(apt-get update / yum update /...)
  • 构建索引
  • 紧凑并修复

现在关于删除数据?您需要在本地小型副本上进行测试。

  • 我担心转储/恢复是一个坏主意。但我不确定。
  • 执行删除声明...我认为有办法做到这一点,然后让该声明在主要声明上执行,但我不知道如何。
  • 最简单:为什么不在主服务器上执行remove语句并将其传播到辅助服务器?因为你想减少数据库大小?好吧,删除后你可以进行滚动维护来进行修复。 Compact不会创建额外的空间,只会在预先分配的文件中订购数据。并且修理,小心,需要双倍空间来构建。 100GB数据库需要至少100GB的可用空间才能进行修复。

https://dba.stackexchange.com/questions/28269/disk-space-recovery-on-mongodb-replicaset-secondaries

看看https://university.mongodb.com => M202:MongoDB高级部署和操作......这个问题在免费课程中处理。