MongoDB复制集在更新主副本时丢失数据库(Kubernetes + Bitnami Helm Chart)



我在这里使用Microk8s和bitnami helm chart

我设置了一个包含3个副本的副本集mongo-0(根据定义这是Primary), mongo-1和mongo-2

Bitnami使复制集始终使用mongo-0(如果可用)作为主副本。然而下一种情况可能会发生:我发现我需要更新节点,比如说增加存储空间。要做到这一点,我需要:

  1. 排出运行mongo-0的节点。这会自动触发一次新的选举,假设蒙古-1是新的主节点。
  2. 我将添加一个新的节点到集群(更大的容量)。

这将使mongodb复制集为新节点分配一个mongodb -0 pod。但是,新节点是空的,因此存储数据库的持久卷(例如/mnt/mongo)是空的。

我希望当前的主副本将完成对新副本(mongodb -0,以及它的Persistent Volume)的数据库填充,并且只有在完成后,才将mongodb -0设置为主副本。

然而,我看到mongodb -0变成了主节点,没有从以前的主节点复制任何数据到它,有效地删除了整个数据库,因为现在主节点声明数据库为空。

这怎么可能?我遗漏了什么?

我不熟悉你们确切的管理工具,但是你们描述的缩放过程是错误的。在任何时候都不应该从副本集中删除3个节点中的1个,至少在生产环境中不应该这样做。

替换RS节点:

  1. 添加带有所需参数的第四个节点
  2. 设置节点优先级,使要删除的节点优先级低于其他节点。
  3. 等待新添加的节点具有可接受的复制延迟。
  4. 确保主节点不是要删除的节点。
  5. 从RS中删除要删除的节点。

期望通用软件自动计算出#3何时完成,并正确地继续执行#4,我想说,这是相当乐观的。也许MongoDB的运营经理会这样做。

你的帖子包含了一些关于MongoDB如何运作的其他不正确的陈述。例如,没有数据的节点不能成为有数据的复制集中的主节点。也许你有其他的配置问题,你实际上有独立的节点/多个副本集在你认为是一个单一的部署。

相关内容

  • 没有找到相关文章

最新更新