我有三个mongod实例的副本,其中一个是主要实例,另外两个是次要实例。我将mongo实例连接到主要实例,然后我关闭了mongod主实例,模拟了失败。
通常,只要我启动命令,mongo就会生成DBClientCursor :: init call()失败错误。
我的问题是,如果出现这样的故障,主服务器无法恢复服务,并且肯定会有新主服务器的选举,有没有办法告诉mongo自动搜索并连接到新服务器副本集的主要内容?
答案 0 :(得分:0)
您的问题可能是您仅 连接到一个节点,那个节点当时是主节点。您需要做的是在连接时指定复制项是什么以及每个可用节点的地址是什么 - 这样,如果主服务器的主服务器发生故障,客户端可以重新连接到另一个节点。
Mongo URI connection string format上的文档解释了这一点:
hostX :可选。您可以根据需要指定任意数量的主机。您可以指定多个主机,例如,指定与副本集的连接。
它给出了这个例子:
实施例
要使用以下mongod主机描述与名为test的副本集的连接:端口27017上的db1.example.net和
端口2500上的db2.example.net 您将使用类似于以下内容的连接字符串:的mongodb://db1.example.net,db2.example.net:2500 / replicaSet =测试
如果需要特定的方式来指定副本集和节点列表,您可能还需要检查驱动程序的文档。
答案 1 :(得分:0)
这不是问题所在。副本集已定义良好并已配置。问题真的很奇怪,我猜它是终端中的一个bug。我所做的就是关闭终端,打开一个新的终端,它就像一个魅力