现象

  • 阿里云Ubuntu服务器
  • 刚刚安装完MongoDb

需要配置MongoDB外网的IP,进行了如下的操作:

  1. /etc/mongodb.conf进行配置:

    bind_ip = 127.0.0.1,XXX.XXX.XXX.XXX(阿里云分配的服务器外网IP)
  2. 重启MongoDB的服务:

    systemctl restart mongodb
  3. 检查MongoDB服务状态:

    systemctl status mongodb

    得到如下结果:

    ● mongodb.service - An object/document-oriented database
    Loaded: loaded (/lib/systemd/system/mongodb.service; enabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Mon 2020-01-20 20:55:39 CST; 49s ago
    Docs: man:mongod(1)
    Process: 599 ExecStart=/usr/bin/mongod --config /etc/mongodb.conf (code=exited, status=48)
    Main PID: 599 (code=exited, status=48)

    启动失败:code=exited, status=48

  4. 查看MongoDB日志:

    vim /var/log/mongodb/mongodb.log

    可得如下错误日志:

    ERROR: listen(): bind() failed errno:99 Cannot assign requested address for socket: XXX.XXX.XXX.XXX:27017

解决方案

  • 配置时使用阿里云分配的内网IP,而不是外网的IP。
  • 或者使用ip addr查看服务器具体的IP,使用这个IP进行配置。

出现Cannot assign requested address for socket: XXX.XXX.XXX.XXX:27017这种错误,一般是端口配置出错(如:端口被占用、端口没有开放)或者IP出错(如:所配置的IP并不是本机的IP)。在查看了防火墙等配置后,排除前者,那就是IP导致的问题了。

原因

在阿里云服务器管理控制台看到的外网IP并不是服务器真实的IP。

很可能是,外网IP的请求、数据由阿里云的网关等,从内网转发到具体的服务器:
数据 ==外网==> 阿里云 ==内网==> 服务器