0

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

我需要从一个集合中删除几个 Gb 并保持另一个集合完好无损。我在这方面是全新的,所以我想获得关于这个的想法/陷阱。我正在考虑遵循这个程序:

  1. 从副本集中删除辅助节点。
  2. 在辅助中,对于我要删除的集合,对我要保留的数据进行 mongodump。
  3. 从那个转储做一个 mongo 恢复。
  4. 将辅助节点重新添加回副本集。我想我必须设置优先级,以便主要不会成为次要?
  5. 辅助节点将与我希望的主节点同步/赶上,但是我在辅助节点中删除的数据会怎样?主节点是否将其从自身中移除?(这就是我想要的)

  6. 我需要对初级会做任何事情吗?

4

1 回答 1

2

滚动维护:

  • 要查看您有多少 oplog 时间,关闭辅助节点并赶上:db.printReplicationInfo()
  • 当与 Primary、Secondary 和 Arbiter 一起工作时......然后取出辅助设备可能会有风险。万一在您的维护期间发生某些事情,主服务器将不会进行故障转移。小学-中学-中学会更安全。
  • 关闭辅助节点后,在没有 --replSet 选项的情况下重新启动它,并且在不同的端口上重新启动它,否则副本集的其余部分将被混淆。
  • 使用 --replSet 重新启动您的辅助节点,旧端口将再次将其添加到 ReplicaSet。别担心,你的初级会保持初级。投票/选举“仅”发生在主节点消失时……而添加辅助节点时并非如此。
  • 辅助节点将赶上 oplog。
  • 在主节点上工作。在 Primary 上执行 rs.stepDown(),让 Secondary 接管,然后重复该过程。

滚动维护期间的清理

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

  • 更新二进制文件(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 Advanced Deployment and Operations ... 这个问题在那些免费课程中处理。

于 2015-06-19T08:59:55.537 回答