【发布时间】:2018-02-27 12:21:23
【问题描述】:
我有一个不寻常的问题。我使用 MongoDB Community edition 3.6.2 配置了一个 3 节点副本集,带有 SSL 和 Basic-Auth。当 PRIMARY 节点是我运行 rs.initiate() 的节点时,我可以连接到集群。
Node1 = 我运行 rs.initiate() 并添加了其他副本的初始节点。
Node2 = 次要
Node3 = 次要
副本集中所有节点的优先级为 10,票数为 1。
如果我在 Node1 是 PRIMARY 时停止它,我可以看到其他节点之一切换为 PRIMARY,当前是我的服务器上的 Node3,但之后我无法连接到集群。即使有可用的主节点。
事实上,我唯一能建立的连接是直接连接到成为 PRIMARY 的那个节点。正常的集群连接字符串根本不起作用。连接到该节点后,我可以运行 rs.status() 并且可以看到两个节点当前都可用,Node3 为主,Node2 为辅助,Node1 无法访问。
我只是想知道是否有人知道这里可能出了什么问题。
我正在使用集群的标准连接字符串格式
mongodb://user:password@node1:27017,node2:27017,node3:27017/dbName??maxIdleTimeMS=60000&readPreference=primary&ssl=true
【问题讨论】:
-
您的连接字符串似乎缺少建立副本集连接所需的
replicaSetname。如果未提供replicaSet名称,您的客户端将创建与种子列表的第一个成员的独立连接。独立连接不支持服务器发现或故障转移。 -
感谢您的指点,但也没有帮助。
-
您使用什么工具或驱动程序(和版本)连接到 MongoDB?初级的变化会发生什么?使用副本集连接的驱动程序/客户端应该检测到故障转移并自动发现当前的主节点,但可能存在重试或短暂的间隔,此时没有可用的主节点(例如,在选举期间)。您能否更新一个包含副本集名称的新连接字符串示例?
标签: mongodb