2

我有三个 mongod 实例的副本,其中一个是主实例,另外两个是辅助实例。我将一个 mongo 实例连接到主实例,然后我关闭了 mongod 主实例,模拟失败。

通常,一旦我启动一个命令,mongo 就会生成一个 DBClientCursor::init call() failed 错误。

我的问题是,如果出现这种故障,主节点无法恢复服务,并且肯定会有新主节点的选举,有没有办法告诉 mongo 自动搜索并连接到新主节点副本集?

4

2 回答 2

0

这不是问题所在。副本集的定义和配置都很好。这个问题真的很奇怪,我猜这是终端中的一个错误。我所做的只是关闭终端,打开一个新终端,它就像一个魅力

于 2016-08-19T08:15:39.010 回答
0

可能您的问题是您连接到一个节点,即当时的主要节点。您需要做的是在连接时指定副本集是什么以及每个可用节点的地址是什么 - 这样您的客户端可以在其主节点发生故障时重新连接到不同的节点。

Mongo URI 连接字符串格式的文档解释了这一点:

主机X:可选。您可以根据需要指定任意数量的主机。您将指定多个主机,例如,用于连接到副本集。

它给出了这个例子:

示例
使用以下 mongod 主机描述与名为 test 的副本集的连接:

db1.example.net 在端口 27017 上,
db2.example.net 在端口 2500 上。
您将使用类似于以下内容的连接字符串:

mongodb://db1.example.net,db2.example.net:2500/?replicaSet=test

您可能还需要检查驱动程序的文档,以防它需要以特定方式指定副本集和节点列表。

于 2016-08-17T22:26:05.123 回答