在学习mongodb的过程中,碰见两个问题,在此记录一下。
1. java客户端连接mongodb超时问题。
报错信息:com.mongodb.MongoTimeoutException: Timed out after 30000 ms while waiting to connect. Client view of cluster state is {type=UNKNOWN, servers=[{address=47.94.98.106:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.SocketTimeoutException}}]
分析:
- 首先检查mongodb所在的服务器地址和端口号有没有写错。
- 检查本地是否能ping通mongo的服务器地址
- 前两步都没问题,然后检查本地能否telnet通mongo。例如:我的是windows系统。在命令行中,telnet 47.94.98.106 27017,如果telnet不同,则说明可能是服务器的27017端口没对外开放,则需要打开该端口的防火墙。
2. 云服务器中启动mongo启动失败
报错信息:
options: { config: "../mongodb.cfg", net: { bindIp: "47.94.98.106", port: 27017 }, processManagement: { fork: true }, storage: { dbPath: "/data/mongodb/db" }, systemLog: { destination: "file", logAppend: true, path: "/data/mongodb/logs/mongodb.log" } }
Failed to set up listener: SocketException: Cannot assign requested address
分析:
这个是因为mongodb.cfg中的bind_id地址的问题。具体如下

如上图所示,用的是阿里的ECS云服务器,其中有两个ip,一个是公网的,一个是内网私有的ip。
报错原因是在mongodb.cfg配置文件中填写的 bind_id=47.94.98.106,导致Failed to set up listener: SocketException: Cannot assign requested address。
解决方法:把bind_id改为私有地址或者直接 0.0.0.0即可解决。

注意:使用客户端连接的时候,mongodb的连接地址是服务器的公网ip。

本文记录并分析了在使用Java客户端连接MongoDB时遇到的超时问题,及云服务器上启动MongoDB失败的情况。详细探讨了网络连接、端口开放、防火墙设置以及配置文件bind_ip参数对MongoDB运行的影响。
2615

被折叠的 条评论
为什么被折叠?



