【问题标题】:Mongodb replica set questionsMongoDB副本集问题
【发布时间】:2015-06-19 01:58:50
【问题描述】:

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

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

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

  6. 我需要对 Primary 做任何事情吗?

【问题讨论】:

    标签: mongodb replicaset


    【解决方案1】:

    滚动维护:

    • 要查看您有多少 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 ... 这个问题在那些免费课程中得到处理。

    【讨论】:

      猜你喜欢
      • 2013-10-22
      • 1970-01-01
      • 2023-03-13
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多