CentOS 5.x Linux 与 MongoDB 2.0.1(尝试过 main 和legacy-static)
MongoDB 正在运行:
root 31664 1.5 1.4 81848 11148 ? Sl 18:40 0:00 ./mongod -f mongo.conf -vvvvv --fork
使用简单的 shell 连接来访问服务器失败:
[root@xxxx bin]# ./mongo
MongoDB shell version: 2.0.1
connecting to: test
Mon Oct 31 18:41:32 Error: couldn't connect to server 127.0.0.1 shell/mongo.js:84
exception: connect failed
端口 28017 上的 Web 界面加载良好,就像从远程 Linux 主机使用 MongoDB shell 一样。还可以 telnet 到 localhost:27017,这意味着没有端口被阻止。这台机器上也没有运行 SELinux。我也尝试过明确指定localhost:2017/db
无济于事。
$ ./mongo remote-ip:27017
MongoDB shell version: 2.0.1
connecting to: remote-ip:27017/test
> show dbs
local 0.03125GB
>
日志对这个问题完全保持沉默:
.....
Mon Oct 31 18:40:34 [initandlisten] fd limit hard:1024 soft:1024 max conn: 819
Mon Oct 31 18:40:34 [initandlisten] waiting for connections on port 27017
Mon Oct 31 18:40:34 BackgroundJob starting: snapshot
Mon Oct 31 18:40:34 BackgroundJob starting: ClientCursorMonitor
Mon Oct 31 18:40:34 BackgroundJob starting: PeriodicTask::Runner
Mon Oct 31 18:40:34 [websvr] fd limit hard:1024 soft:1024 max conn: 819
Mon Oct 31 18:40:34 [websvr] admin web console waiting for connections on port 28017
跟踪 mongo shell 客户端仅显示一个有问题的调用:
[pid 31708] connect(4, {sa_family=AF_INET, sin_port=htons(27017), sin_addr=inet_addr("127.0.0.1")}, 16) = -1 EBADF (Bad file descriptor)
文件系统是干净的,没有 ulimit 限制(以 root 身份运行进行测试)。我可以从 strace 看到mongo
客户端正在尝试通过 TCP 连接(AF_INET
),但由于它是本地的并且 MongoDB 创建一个文件套接字,有没有办法告诉客户端通过它进行连接?或者更好的是,为什么客户端会抛出 EBADF?
编辑:我的基本 Mongo 配置:
dbpath=/root/mongodb-linux-i686-2.0.1/data
logpath=/root/mongodb-linux-i686-2.0.1/logs/mongo.log
slowms=15
rest=1