外部无法连接部署在linux上的MongoDB

一、问题描述

    CentOS7安装了mongoDB,并且成功开启服务,本机上可以访问数据库进行CURD,但是通过java或者mongo
数据库管理工具无法连接该数据库。

二、解决过程

    1、可以确定服务已经开启,所以要确认端口号是否正确
    netstat -anp查看端口信息

[root@localhost db]# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      6913/mongod
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3058/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      3383/master
tcp        0      0 192.168.3.92:22         192.168.3.123:53765     ESTABLISHED 3920/sshd: root@not
tcp        0      0 192.168.3.92:22         192.168.3.123:52492     ESTABLISHED 4112/sshd: root@not

    由此可以知道,mongo服务的端口确实是27017,端口号并没有错。
    2、可以看到,该服务的Local Address是127.0.0.1:27017。
    Local Address表示访问端口的方式,0.0.0.0 是对外开放端口,127.0.0.1 说明只能对本机访问,外面访问不了此端口;这说明了27017端口对外不开放,需要让防火墙对该端口开放。

//开放27017端口
[root@localhost /]# firewall-cmd --zone=public --add-port=27017/tcp --permanent
success
//查看端口是否开放
[root@localhost /]# firewall-cmd --query-port=27017/tcp
yes
//杀掉进程
[root@localhost /]# kill -9 6913
yes
//后台重启服务
[root@localhost /]# nohup mongo & 
yes
[root@localhost /]# netstat -anp | grep mongo
tcp        0      127.0.0.1:27017           0.0.0.0:*               LISTEN      5754/mongod

    开放端口后,local address仍然是127.0.0.1,问题没有解决。
    3、查阅资料,猜测mongo启动时若没有指定配置文件,会默认把bind_ip设为127.0.0.1。为了验证假设,在/etc目录下新建一个mongodb.conf文件。

mongodb.conf

bind_ip_all = true                 # 任何机器可以连接
#bind_ip = 127.0.0.1,192.168.0.3     # 本机和192.168.0.3可以访问
port = 27017                        # 实例运行在27017端口(默认)
dbpath = /usr/local/mongodb/db      # 数据文件夹存放地址(db要预先创建)
logpath = /usr/local/mongodb/logs/27017.log  # 日志文件地址
logappend = true                   # 启动时 添加还是重写日志文件
fork = true                         # 是否后台运行

以配置文件的形式启动

[root@localhost /]# mongod -f /etc/mongodb.conf
about to fork child process, waiting until server is ready for connections.
forked process: 12868
child process started successfully, parent exiting

查询端口信息,local address成功改为0.0.0.0

[root@localhost /]# netstat -anp | grep mongo
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      12868/mongod

现在,java可以访问数据库了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章