我是设置服务器环境和mongoDB的新手。这可能听起来很简单,但是,我真的需要你的帮助。
我正在尝试连接到我的虚拟机,该虚拟机从本地计算机运行mongodb实例,我认为当我在单独的远程服务器上运行它时,它应该类似于生产环境。
环境如下:
虚拟机的专用IP: 192.168.184.155
本地计算机和虚拟机的公共IP: 96.88.169.145
我更改了 /etc/mongod.conf文件中的 bind_ip
bind_ip = 127.0.0.1
到
bind_ip = 127.0.0.1,192.168.184.155,96.88.169.145
重新启动mongod服务后,虚拟机和本地计算机都无法通过mongodb命令访问mongodb并给我以下错误。
MongoDB shell version: 3.0.1
connecting to: test
2015-03-17T16:02:22.705-0400 W NETWORK Failed to connect to 127.0.0.1:27017, reason: errno:111 Connection refused
2015-03-17T16:02:22.707-0400 E QUERY Error: couldn't connect to server 127.0.0.1:27017 (127.0.0.1), connection attempt failed
at connect (src/mongo/shell/mongo.js:179:14)
at (connect):1:6 at src/mongo/shell/mongo.js:179
exception: connect failed
但是,如果我改变了
bind_ip = 192.168.184.155
并重启服务,它可以工作,我可以使用本地机器上的mongo进行访问。它似乎不适用于多个IP地址。我试着在mongodb文档中查找,但是,他们确实提到bind_ip采用逗号分隔的列表,这让我很困惑。
提前感谢您的帮助。
答案 0 :(得分:52)
用逗号分隔的逗号分隔的Ips在mongo 3.2.7中为我工作:
bindIp = [127.0.0.1, 192.168.184.155, 96.88.169.145]
答案 1 :(得分:20)
你可以通过以下方式做到:
bindIp: [172.31.60.184,127.0.0.1]
请记住不要在逗号后面加上空格。
答案 2 :(得分:4)
我在SUSE 12.x上运行3.6并且使用逗号分隔的IP列表时出现问题。我解决了这个问题 bindIp:0.0.0.0
答案 3 :(得分:3)
感谢@wdberkeley和@anhlc提出了线索。
我查看了/var/log/mongodb/mongod.log下的日志文件。它显示了问题的失败原因。
2015-03-17T16:08:17.274-0400 I CONTROL [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1, 192.168.184.155" }, storage: { dbPath: "/var/lib/mongodb" }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
2015-03-17T16:08:17.332-0400 I NETWORK [initandlisten] getaddrinfo(" 192.168.184.155") failed: Name or service not known
所以mongo.conf文件对空间很敏感,我碰巧添加了它,应该注意到。正如@anhlc指出的那样,96.88.169.145不是VM的有效IP地址。因此,这也会导致错误。
非常感谢您的帮助!希望如果有人遇到同样的问题,这可能会有所帮助。
答案 4 :(得分:2)
在Mongo 3。*中,
使用支架,例如
net:
port: 27017
bindIp : [127.0.0.1,10.0.0.2,10.0.0.3]
答案 5 :(得分:2)
使用以下版本的MongoDB: MongoDB Shell版本v3.6.10
再现问题: 使用[127.0.0.1,xxx.xxx.xxx.xxx]时,出现以下错误。 标量选项“ net.bindIp”必须为单个值 尝试“ mongod --help”以获取更多信息
分析
这是因为,根据MongoDB文档:https://docs.mongodb.com/manual/reference/configuration-options/#net.bindIP
net.bindIP的类型为“ 字符串”。
绑定多个IP地址的解决方案
bindIp: "127.0.0.1,xxx.xxx.xxx.xxx"
注意:逗号后不能有空格
答案 6 :(得分:1)
我使用逗号,没有空格和FQDN在我的3.2版服务上成功添加了第二个ip
net:
port: 27017
bindIp: localhost,dev-2.office.sampleorg.com
答案 7 :(得分:1)
我的Ubuntu16.04 LTS上的 mongodb版本3.6 中的情况是您不需要将IP地址放在方括号“[]”中。 删除逗号后面的空格解决mongod日志中失败的连接问题(/var/log/mongodb/mongod.log)
NETWORK [initandlisten] getaddrinfo(" xxx.xxx.xxx.xxx") failed: Name or service not known
将bindIp: 127.0.0.1
修改为bindIp: 127.0.0.1,xxx.xxx.xxx.xxx
(注意IP之间没有逗号)后,主机IP正在监听如下:
xxx@xxxx:/var/log/mongodb$ sudo netstat -plnt |egrep mongod
tcp 0 0 xxx.xxx.xxx.xxx:27017 0.0.0.0:* LISTEN 30747/mongod
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 30747/mongod
答案 8 :(得分:1)
在我的情况下,解决方案是将逗号分隔的IP放在不带任何空格的位置。
bind_ip=192.168.2.29,127.0.0.1
#port = 27017
这样有效:
2018-10-02T07:49:27.952+0000 I CONTROL [initandlisten] options: { config: "/etc/mongodb.conf", net: { bindIp: "192.168.2.29,127.0.0.1", unixDomainSocket: { pathPrefix: "/run/mongodb" } }, storage: { dbPath: "/var/lib/mongodb", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongodb.log" } } 2018-10-02T07:49:27.954+0000 I - [initandlisten] Detected data files in /var/lib/mongodb created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
Mongo 3.6.3在这里。
mongod --version 数据库版本v3.6.3 git版本:9586e557d54ef70f9ca4b43c26892cd55257e1a5 OpenSSL版本:OpenSSL 1.1.0g 2017年11月2日 分配器:tcmalloc 模块:无 构建环境: distarch:x86_64 target_arch:x86_64
答案 9 :(得分:0)
对于 4.4.6
,所以 - 让我们假设系列 4.x(也许是系列 3.x 的一些)
正确的语法是:
bindIp: 127.0.0.1,<private_host_ip>,<public_host_ip>
对于每个新 IP,只需使用 ,
且不带任何空格
对于 LAN 访问必须使用 private_host_ip
,您可以分别使用 ipconfig
或 ip a
for Windows 和 Linux知道ip值。
当然对于公共 WAN 访问必须使用 <public_host_ip>
,这与您的 ISP 相关
警告 ips - private_host_ip
和 <public_host_ip>
- 都是您的 MongoDB 服务器 运行的位置,不是远程客户端。因此存在错误的假设,即添加每个新 IP,其中每个 IP 代表远程 客户端 IP 地址(不同于 服务器 IP地址 - LAN 和/或 WAN),它不正确。
注意为了避免出现问题,最好使用静态 ip,私有通过您的路由器,第二个通过您的 ISP。
答案 10 :(得分:0)
对于MongoDB服务器版本:3.6.8用逗号分隔的列表对我有用。逗号后有无空格。
bind_ip = 127.0.0.1, 192.168.0.104
bind_ip = 127.0.0.1,192.168.0.104
但是,在[]
中添加附件失败,并在MongoDB日志中出现以下错误
bind_ip = [127.0.0.1,192.168.0.104]
getaddrinfo("[127.0.0.1") failed: Name or service not known
bind_ip = [127.0.0.1, 192.168.0.104]
getaddrinfo("[127.0.0.1") failed: Name or service not known
答案 11 :(得分:0)
默认的/etc/mongod.conf文件具有以下用于网络接口的条目:
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
这对应于命令行上的--bind-ip arg
参数。注意将破折号转换为驼峰式。要将VM中运行的数据库公开给主机,最简单的方法是将数据库绑定到所有接口以进行测试。这将涵盖VM使用NAT接口或桥接接口的情况。命令行参数是--bind_ip_all
,它没有参数,它的存在与配置文件中的bindIPAll: true
参数相对应。因此,配置文件应更改为:
# network interfaces
net:
port: 27017
bindIpAll: true
请注意,bindIp
参数已删除。
还应注意,可以在命令行中添加参数以覆盖配置文件中的参数。通常,mongod使用--config /etc/mongod.conf
参数运行。更改配置文件比查找脚本将其作为守护程序运行并让systemd
重新加载和使用它更容易。
有关配置文件的YAML强度与命令行中的参数的详细信息,请参阅当前位于https://docs.mongodb.com/manual/reference/configuration-options/上的文档
如果您正在使用NAT的VM上运行mongod,则默认端口27017
将不会暴露给主机。必须将主机上的端口映射到来宾VM中的该端口。这超出了此答案的范围,但是一些研究将提供一种用于您正在使用的VM软件(VirtualBox,VMware等)的方法。
答案 12 :(得分:0)
Amazon-linux2 |操作系统MongoDB Shell版本:3.0.15
这是需要在最新配置中完成的方式
#network interfaces
net:
port: 27017
bindIp: [xxx.xxx.xxx.xxx,127.0.0.1] # Listen to local interface only, comment to listen on all interfaces.
干杯!
答案 13 :(得分:0)
对于那些仍然想知道的人-问题不是语法,而是您输入的地址。
答案 14 :(得分:0)
具有逗号分隔的IP地址的bindIp规则仅适用于已知的以太网接口或0.0.0.0和127.0.0.1规则。您只能使用系统的网络接口卡的IP地址。如果此列表包含未知的IP地址(即另一个系统的IP),则您的MongoDb实例将不会重新启动,因此您将无法连接。要检查您的MongoDb实例是否正在运行,请运行以下命令:
$ sudo systemctl status mongod
如果您想使您的MongoDb实例可用于网络上的其他系统,则需要绑定与专用网络关联的本地IP。要轻松确定网络接口配置,只需从命令行运行ifconfig:
$ ifconfig
这将列出您可以在bindIp规则中使用的所有可用IP地址。最肯定的是,您使用的IP地址96.88.169.145不是有效的IP地址,或系统未知。
答案 15 :(得分:0)
就我而言,使用 mongoDB 4.4.6 以下解决方案有效 -
net:
port: 27017
bindIp: 127.0.0.1;<private_host_ip>
进行更改后,使用以下命令重新启动 mongoDB -
sudo systemctl restart mongod
要检查 mongoDB 状态,请运行 -
sudo systemctl status mongod
答案 16 :(得分:-1)
Ubuntu 16.04-> MongoDB Shell版本:2.6.10
对我来说,以下作品:
请注意,我有一个;
而不是,
答案 17 :(得分:-9)
如果您只想通过网络连接到本机,则 NOT 需要修改bind_ip
值。
在您的情况下,您需要按照以下步骤操作。
如果您不确定如何执行此任何步骤。查看我撰写的博客文章,其中详细介绍了如何执行此操作。
希望这有帮助。