我有三台安装了 mongod 的服务器,它们作为复制集运行。突然间,两个辅助服务器变得不可用(mongod 进程终止)——我认为是因为它们太陈旧了。
问题是原来的 PRIMARY 现在是 SECONDARY,并且我的应用程序无法工作,因为它无法连接到 PRIMARY。
我的意思是,这对我有什么帮助?如果副本集无法进行故障转移?!我是不是漏掉了什么?
此外,我还在问自己,为什么 SECONDARIES 会死掉/为什么它们太陈旧了?我能做些什么呢?
仅供参考:我的数据库很大(磁盘上有 40GB)。
答案1
您的主节点现在不再是主节点的原因是因为您必须拥有足够的选票才能在副本集中形成多数 - 在您的例子中,这意味着至少 2/3。对于您的特定故障,这似乎没有意义,但想象一下,所讨论的主节点已与 2 个辅助节点隔离(例如网络事件)。在这种情况下,您不希望选出两个主节点,因此它会退居二线,直到它能够看到其他集合成员。
为了使主服务器恢复工作,您需要做以下两件事之一:
- 让其他成员重新加入
- 重新配置集合,以便形成多数(添加更多成员,转到单个)
有关重新配置选项的更多信息请参见此处:
http://www.mongodb.org/display/DOCS/Reconfiguring+a+replica+set+when+members+are+down
基本上,您的副本集将会进行故障转移,但您必须拥有足够多的成员才能真正进行选举。
至于次要节点死亡的原因,根据您在此处提供的信息,我无法判断,但我可以告诉您,这不是因为它们太陈旧了。落后太多的次要节点将报告为陈旧,但即使在这种状态下,它仍将继续运行(并投票给主要节点),直到您修复它并使其恢复到最新状态。请参阅此处了解如何修复陈旧的集合成员:
http://www.mongodb.org/display/DOCS/Resyncing+a+Very+Stale+Replica+Set+Member