Robomongo:无法连接到副本集。 Set 的主节点不可访问

Robomongo: Cannot connect to replica set. Set's primary is unreachable

我正在将 mLab 从 Heroku 迁移到 MongoDB Atlas。作为步骤之一,我想检查是否有连接到新创建的集群。我在 Heroku mLab 实例中使用 Robo3T(以前称为 Robomongo)。但它不适用于 Atlas。从 URL:

创建连接时出现以下错误
Cannot connect to replica set "SampleProject"[cluster-abcd12ef-shard-00-00.a0b1c.mongodb.net:27017]. 
Set's primary is unreachable.

Reason:
Failed to initialize MongoWorker. Reason: connect failed

尝试调整设置,但一切看起来都是正确的,比如 Heroku,唯一的主机和端口不同。

也查看了 similar questions and on GitHub isssues,但没有任何帮助。

首先,检查您是否使用最新的Robo3T。 MongoDB Atlas 使用 mongodb+srv:// 协议,之前一段时间不支持该协议。

之后请关注check-list:

  • 使用 copy-pasting URL 从 MongoDB Atlas 导入 From SRV
  • MongoDB Atlas 正在为免费沙盒 (Atlas M0) 帐户使用副本集。因此,在创建过程中确保您使用了该类型;
  • 填写或勾选所有集群成员;
  • Set Name应该设置。

身份验证选项卡上的重要差异

  • Database 应该是 admin 不像数据库名称(在 Heroku 上使用),
  • Auth Mechanism 应该是 SCRAM-SHA-1
  • 检查 Manually specify visible databases 并在那里输入 admin,<you database name from Heroku>

在 TLS 选项卡上:

  • 勾选Use TLS protocol
  • Authentication method - Self-signed Certificate

现在应该可以了。

P.S. 以前,我也遇到过与 Heroku 上相同的数据库有相同 db-name 和 user-name 的问题,我也是认为 Auth 机制应该是 MONGODB-CR。但这没有用。

P.P.S. 如果您没有看到 Manually specify visible databases - 那么请检查您是否有最新版本 (1.4.+) Robo3T(以前称为 Robomongo)

如果有人在使用 Robo3T 版本 1.4.4 时遇到此错误,我们可以通过更新 robo3t.json 文件解决此问题(启用日志,您可以看到此文件的本地位置)

By enable Logs, you will see where settings saved via message starts with Info: Settings saved to: {robo3t.json_path}

  • 正常粘贴您的 URI,然后正常点击 From URI,然后保存。
  • 关闭Robo3T(重要)
  • 使用文本编辑器打开 robo3t.json 文件。
  • connections 范围内,查找刚刚从上面的步骤创建的连接,在 ssl 对象内找到 allowInvalidCertificates 属性,将值从 false 更改为true 然后保存文件
  • 打开Robo3T然后连接,应该可以正常连接

确保您已在 Network Access 下的 mongodb 云门户上将您的 IP 地址列入白名单。

检查您的用户名和密码!

tl;博士

似乎 Robo 3T 1.4.3 returns Cannot connect to replica set... Set's primary is unreachable 错误也用于身份验证错误。仔细检查您的用户凭据。

详情

过去,上述所有优秀答案都帮助我解决了此错误消息。然而,最近我遇到了一个似乎不受所有变通办法影响的 Atlas 集群。我最终放弃并尝试使用 Atlas 推广的“官方”MongoDB Compass 客户端。此客户端也返回了一个错误,但一个不同且更有用的错误:

bad auth : Authentication failed.

怀疑密码不正确,我在Atlas中为用户生成了一个新密码,并在Robo 3T中进行了更新。此Robo成功连接到DB后