主节点发生故障后无法访问MongoDB集群

问题描述 投票:1回答:1

我有一个不寻常的问题。我使用MongoDB社区版本3.6.2配置了3节点副本集,使用SSL和Basic-Auth。当PRIMARY节点是我运行rs.initiate()的节点时,我可以连接到集群。

Node1 =我运行rs.initiate()的初始节点,并添加到其他副本中。

Node2 =辅助

Node3 =辅助

副本集中的所有节点都具有10的优先级和1的投票权。

如果我在它是PRIMARY时停止Node1,我可以看到其中一个节点切换为PRIMARY,当前我的服务器上有Node3,但之后我无法连接到集群。即使有可用的主节点。

事实上,我唯一可以建立的连接是直接连接到成为PRIMARY的节点。普通的群集连接字符串根本不起作用。一旦我连接到该节点,我就可以运行rs.status(),并且可以看到两个节点当前可用,Node3为主节点,Node2为辅助节点,Node1无法访问。

我只是想知道是否有人对这里可能出现的问题有所了解。

我正在为集群使用标准连接字符串格式

mongodb://user:password@node1:27017,node2:27017,node3:27017/dbName??maxIdleTimeMS=60000&readPreference=primary&ssl=true
mongodb
1个回答
0
投票

最终想出来了。这里有两件事。

  1. 与群集连接公共DNS名称的事实有关,当群集中的节点发生故障时,它会忽略连接字符串上的节点,并尝试使用在群集中注册的DNS名称连接到节点。这些注册是在私有子网内,因此外部客户端无法看到公共accessibl。当我设置集群时,我已经在我的hosts文件中进行了注册,使用它的公共IP地址指向集群中的初始节点。这就是为什么如果其中一个节点发生故障并且主节点可用并被提名为主节点,它就可以重新连接。
  2. 我需要将公共和私有DNS名称放入我为集群中的每个节点创建的数字证书中。我将公共DNS作为主题备用名称放在证书中。

无论如何,这对我来说是两个外卖

  1. MongoDB仅为其初始连接和设置使用连接字符串,之后在集群中它忽略连接字符串并使用内部集群注册来访问节点。
  2. 在做这样的事情时记下我做的所有血腥事情(比如改变我的私人主文件)。如果我记得它会让我的生活更简单。

干杯......

© www.soinside.com 2019 - 2024. All rights reserved.