我有一个相当复杂的问题,我认为可以归结为以下几点。今天早上,我有一个由主机 A、B 和 C 组成的副本集,其中 A 是主要的。然后我完全失去了 A,而 B 可能会下降一段时间(我不知道)。它是一个 ec2 实例,因此当它返回时它具有不同的主机名(尽管它具有完全相同的 ebs 卷,因此具有相同的文件结构)。
所以此时,就主机名 A 而言,我有 B、C 和 D。D 的内容与 A 的内容相同,但外部世界将它们视为两个不同的主机(它们是)。为 B 和 C 登录 mongo 显示它们是次要的(优先级 0),它仍然列出旧主机 A,没有注明优先级:
SECONDARY> rs.conf() //this is from C
{
"_id" : "rs_0",
"version" : 1,
"members" : [
{
"_id" : 0,
"host" : "A:27018" //this is the dead guy ....
},
{
"_id" : 1,
"host" : "C:27019",
"priority" : 0
},
{
"_id" : 2,
"host" : "B:27020",
"priority" : 0
}
]
}
我从 B 或 C 发出的任何命令都会返回一条消息,告诉我我不是主服务器,因此我无法更改此副本集的 conf 记录中的任何主机。
最糟糕的情况是我可以使用mongoexport
所有内容并将其转储到 json 中,这是 (a) 很痛苦, (b) 非常难看, (c) 当我在生产时并不实用。
所以基本上,它归结为这一点。当我有一个副本集并且我失去对主节点的控制/访问并想要添加另一个主机来接管该功能时,我该怎么办?
谢谢!