主节点失败后无法访问MongoDB群集
我有一个不寻常的问题。 我使用SSL和Basic-Auth配置了使用MongoDB Community Edition版本3.6.2的3节点副本集。 当PRIMARY节点是我运行rs.initiate()的节点时,我可以连接到集群。
Node1 =我运行rs.initiate()并添加到其他副本中的初始节点。
Node2 = Secondary
Node3 = Secondary
副本集中的所有节点的优先级为10,投票数为1。
如果我在主节点停止Node1时,可以看到其他节点之一切换为主节点,当前为我的服务器上的节点3,但之后无法连接到集群。 即使有主节点可用。
事实上,我可以做的唯一连接就是直接连接到成为PRIMARY的那个节点。 正常的集群连接字符串根本不起作用。 一旦我连接到该节点上,我就可以运行一个rs.status(),并且可以看到两个节点当前都可用,Node3为主节点,Node2为辅助节点,Node1无法访问。
我只是想知道是否有人对这里可能有什么错误有所了解。
我为集群使用标准连接字符串格式
mongodb://user:password@node1:27017,node2:27017,node3:27017/dbName??maxIdleTimeMS=60000&readPreference=primary&ssl=true
最终发现这一点。 这里有两件事。
与集群连接公有DNS名称的事实有关,当集群中的节点发生故障时,它会忽略连接字符串上的节点,并尝试使用在集群中注册的DNS名称连接到节点。 这些注册在一个私人子网内,所以不公开accessibl,并且由于外部客户无法看到。 当我设置集群时,我在主机文件中注册了一个注册,以使用它的公共IP地址指向集群中的初始节点。 这就是为什么如果其中一个节点发生故障并且主节点可用并被提名为主节点,它可以重新连接。
我需要将公共和私有DNS名称都放入为群集中每个节点创建的数字证书中。 我将公有DNS作为证书中的主题备用名称。
无论如何,这两个需要我的
MongoDB只使用连接字符串作为初始连接和设置,然后在集群中忽略连接字符串并使用内部集群注册来访问节点。
在做这样的事情时,记下我所做的所有流血事情(比如更改我的私人主机文件)。 如果我记得那会让我的生活变得更简单。
干杯...
链接地址: http://www.djcxy.com/p/61661.html上一篇: Can't access MongoDB cluster after primary node fails
下一篇: Restoring MongoDB config replica set stucked in RECOVERY