MongoDB 5.0 复制:Mongo::Error::NoServerAvailable

Posted

技术标签:

【中文标题】MongoDB 5.0 复制:Mongo::Error::NoServerAvailable【英文标题】:MongoDB 5.0 Replication: Mongo::Error::NoServerAvailable 【发布时间】:2021-10-17 02:26:39 【问题描述】:

我想知道在 MongoDB 上启用复制时如何解决以下错误:<Server address=db-master:27017 UNKNOWN> 它仅在启用复制时发生。

错误

Mongo::Error::NoServerAvailable (No nearest server is available in cluster: #<Cluster topology=ReplicaSetNoPrimary[db-master:27017,db-node2:27017,db-node1:27017,name=rs0,v=6,e=7fffffff0000000000000017] 
servers=[#<Server address=db-master:27017 UNKNOWN>,#<Server address=db-node2:27017 UNKNOWN>,#<Server address=db-node1:27017 UNKNOWN>]> with timeout=30, LT=0.015)

这个问题是由 DNS 解析引起的吗?有没有办法为集群拓扑指定 IP 地址而不是别名(来自主机文件)? 当ssh'ing 向主节点和辅助节点ping 似乎有效。

[db-node2 server] $ ping db-master
PING db-master ([IP_IS_HERE]) 56(84) bytes of data.
64 bytes from db-master ([IP_IS_HERE]): icmp_seq=1 ttl=63 time=0.153 ms
64 bytes from db-master ([IP_IS_HERE]): icmp_seq=2 ttl=63 time=0.150 m

mongo.conf

net:
  port: 27017
  bindIp: 0.0.0.0,localhost,127.0.0.1,db-master,[IP_IS_HERE]
  bindIpAll: true
replication:
  replSetName: "rs0"

ubuntu 主机

$ cat /etc/hosts
127.0.0.1 localhost
[IP_IS_HERE] db-master
[IP_IS_HERE] db-node1
[IP_IS_HERE] db-node2

【问题讨论】:

【参考方案1】:

你是否在其他主机上启动了 mongod 服务?

您的配置没有多大意义。如果您想允许来自任何主机的连接,请使用

net:
  port: 27017
  bindIpAll: true

net:
  port: 27017
  bindIp: 0.0.0.0

如果您想限制来自特定主机的连接,请使用

net:
  port: 27017
  bindIp: localhost,db-master,[IP_IS_HERE]

ssh 使用端口 22,但您的 MongoDB 使用端口 27017,因此您的防火墙可能会阻止连接(同样适用于 ping)。如果你想检查连接是否可用,你可以使用curl 命令:

curl --connect-timeout 3 --silent --show-error db-node1:27017

如果您收到回复

您似乎正试图在本机驱动程序端口上通过 HTTP 访问 MongoDB。

那么就可以连接了。

回应

连接在 3000 毫秒后超时

表示您的防火墙阻止了连接尝试。

【讨论】:

感谢您对 bindIpAll 和 bindIp 的澄清,它有效:)

以上是关于MongoDB 5.0 复制:Mongo::Error::NoServerAvailable的主要内容,如果未能解决你的问题,请参考以下文章

最新!MongoDB 重磅发布 MongoDB 5.0 和无服务器 Atlas

MongoDB 5.0新特性概览

MongoDB 5.0新特性概览

MongoDB 5.0新特性概览

MongoDB 5.0 来了,原生时序版本化 API 新特性悉数登场

MongoDB 安装