我有个网站用的是 MongoDB 数据库,搞不懂的地方在于网站正常,但是 mongo 连不上。
最近没动过配置,不敢贸然重启服务,求教下各位
1
Jooooooooo 2021-09-17 10:29:53 +08:00 1
网站正常说明 db 没问题, 那就是你的链接方式有问题
看下是不是密码 /端口写错了, client 不兼容之类的 |
2
hvboekml OP @Jooooooooo 早前是正常的
|
3
ElmerZhang 2021-09-17 10:46:24 +08:00 1
用什么连的?软件还是命令行的 mongo ?
mongo 部署在哪里?你是从哪里连过去的?家里还是同一内网中的服务器? 是报错还是卡住不动?报错的话把错误信息贴一下。 |
4
qinxi 2021-09-17 11:02:46 +08:00 1
原本正常,现在不行,如果没动数据库配置和代码连接配置的话, 先看看防火墙?
|
5
hvboekml OP @ElmerZhang
@qinxi ``` # bindIp: 127.0.0.1 $ mongo MongoDB shell version v4.4.4 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb ``` 用 `mongo` 卡住不动,用 `mongodump` 的话报错 `Failed: can't create session: could not connect to server: server selection error: server selection timeout, current topology` |
6
hvboekml OP `mongodump` 报错:Failed: can't create session: could not connect to server: server selection error: server selection timeout, current topology: { Type: Single, Servers: [{ Addr: 127.0.0.1:27017, Type: Unknown, State: Connected, Average RTT: 0, Last error: connection() : connection(127.0.0.1:27017[-13]) incomplete read of message header: read tcp 127.0.0.1:54658->127.0.0.1:27017: i/o timeout }, ] }
|
7
fkdtz 2021-09-17 11:52:23 +08:00 1
端口允许外网连接么,看看防火墙安全组之类的
|
8
ila 2021-09-17 12:05:29 +08:00 via Android 1
在 docker 容器内吗
|
9
cathiabi 2021-09-17 12:26:50 +08:00 via Android 1
之前 mysql 遇到类似问题,后来发现需要用 root 权限运行客户端。安全升级的缘故只让用 socket 连。。。
|
11
ElmerZhang 2021-09-17 15:08:36 +08:00 1
@hvboekml
卡住的话首先怀疑是防火墙,但是你连的是 127.0.0.1,可以排除防火墙的原因。 `sudo netstat -nltp` 看下端口是否正常,不过你没有报 'Connection refused' 八成是开着的。 连接的时候 tail 一下 mongodb 日志和系统日志( /var/log/syslog 或者 /var/log/message ),看看有没有什么 warning, error 之类的日志吧。 |
12
ila 2021-09-17 15:42:33 +08:00 1
关闭掉 mongo server,在 27017 端口开启个 web 服务,能访问,排除了端口映射。
mongo 能够进入 mongodb 的 shell 。排除了 mongodb 的问题。 接下来可以锁定是网络配置了。 你在 host 这栏填写主机名,非 ip 名。 如果可以进入,那就是这个问题了。 |
13
hvboekml OP @ElmerZhang /var/log/syslog 没看到有报错,mongodb 的日志停留在几天前,停留的那天,我部署了基于 redis 的频率限制,我在想,难道是系统问题
|
14
cathiabi 2021-09-17 15:55:42 +08:00 1
@hvboekml 用 telnet 连一下 27017 端口看看通不通,如果不通的话,服务是否有正常运行呢?网站正常的话不会是因为缓存了吧。
|
15
cathiabi 2021-09-17 15:57:22 +08:00 1
还有一个很罕见的问题是 lo 本地回环有问题
|
17
ElmerZhang 2021-09-17 15:59:22 +08:00 1
|
19
hvboekml OP |
20
hvboekml OP @ElmerZhang
``` $ sudo netstat -nltp tcp 2088 0 127.0.0.1:27017 0.0.0.0:* LISTEN 3204/mongod $ ps aux | grep mongod mongodb 3204 0.5 13.2 2073556 532464 ? Ssl Mar22 1412:17 /usr/bin/mongod --config /etc/mongod.conf ``` |
22
ElmerZhang 2021-09-17 16:36:18 +08:00 1
@hvboekml
我记得 mongo 连上 mongod 之后,会先执行一些初始化 shell 的命令,比如 listDb 之类的,很可能是卡在这里了。 你会不会写脚本?用 nodejs/php/python 之类的写个简单的连接脚本,看能不能连上去。 如果能连上去的话,给脚本中加一个 currentOp 的输出。然后执行 mongo 去连接,趁它卡住时,执行一下脚本看看当前都有什么 op 在执行。 |
23
cathiabi 2021-09-17 16:56:03 +08:00 1
python2,确认装了 pymongo,执行这几条看看
from pymongo import MongoClient client = MongoClient(host="127.0.0.1") db = client.mydb print db.current_op(True) |
24
vanlink 2021-09-17 19:11:22 +08:00 1
查查防火墙,wireshark 抓包看看
|
25
hvboekml OP |