Mongodb 为什么不是';在我的Mongo replicaset上运行故障转移?

Mongodb 为什么不是';在我的Mongo replicaset上运行故障转移?,mongodb,replicaset,Mongodb,Replicaset,因此,在我们的配置中,总共有6台Mongod服务器。其中3个我们已经运行了一段时间(版本3.0.6),最近我们从新的数据中心(v3.2.6)添加了3个新的,因为我们认为这将是一种将使用从旧迁移到新的好方法。这些较新的盒子已经轮换了几个星期,并且将是最新的。所有框的从属延迟均不超过0 其中一个原始服务器的优先级为2,而其他5个服务器的优先级为1。否则,每个服务器的配置都是相同的。我们没有用于投票等目的的额外服务器 我们的应用程序使用所有6个地址,因此它们将自行进行故障切换 所以今天,考虑到我们已经

因此,在我们的配置中,总共有6台Mongod服务器。其中3个我们已经运行了一段时间(版本3.0.6),最近我们从新的数据中心(v3.2.6)添加了3个新的,因为我们认为这将是一种将使用从旧迁移到新的好方法。这些较新的盒子已经轮换了几个星期,并且将是最新的。所有框的从属延迟均不超过0

其中一个原始服务器的优先级为2,而其他5个服务器的优先级为1。否则,每个服务器的配置都是相同的。我们没有用于投票等目的的额外服务器

我们的应用程序使用所有6个地址,因此它们将自行进行故障切换

所以今天,考虑到我们已经想到了一切,我们在3台原始服务器上停止了mongod进程

而且没有一个新的盒子会成为主盒子。他们都留在中学。所以我们重新打开了旧的小学,马上又开始了小学。因此,考虑到这个问题可能具有优先性,我们将旧的小学缩减为1,并将其中一个新的方框设置为2。保存配置,新框成为主框

我们认为我们成功了,于是再次关闭了旧的小学

新的盒子立即退到了第二层,没有留下第一层

因此,我们开始备份旧的主设备,新的盒子立即再次成为主设备

因此,我们当前将旧框的优先级设置为0,并保持其运行


但我们不能一直这样跑。为什么其中一台新机器没有自动升级到主计算机?如果我们删除了一个旧的框,它为什么会退出呢?

答案很简单:6-3=3,小于4,这是构建仲裁所需要的。只有3台服务器启动,其余运行的成员无法构建仲裁(计算副本集配置定义的服务器数量)。它们会恢复到辅助状态,因为无法可靠地确定主分区—这可能只是一个正在进行的网络分区。允许选举在法定人数不足的情况下成功将使可怕的分裂大脑的局面成为可能

顺便说一句,这与优先级无关。除非你确切知道自己在做什么,否则你不应该摆弄它

不过,解决您的问题应该很容易:

重要信息:确保所有“新”成员在继续之前处于次要或主要状态

  • 连接到主服务器
  • 使用从副本集配置中删除已停止的旧成员
  • 如有必要(我对您的描述不清楚),请使用将您的一台新服务器设为主服务器并连接到它
  • 再次使用从副本集中删除最后一个“旧”成员

  • 保留在副本集中后,他们就可以构建仲裁和。

    谢谢!我刚刚加入了这个团队,还没有参加Mongo的管理课程(到目前为止只是开发人员的课程)。你的回答很有道理。从集合中删除旧计算机将降低总数,从而减少仲裁所需的计算机。谢谢