私は、サーバー環境とmongoDBをセットアップする初心者です。これは非常に単純に聞こえるかもしれませんが、あなたの助けが本当に必要です。
ローカルマシンからmongodbインスタンスを実行する仮想マシンに接続しようとしています。これは、別のリモートサーバーで実行する場合の運用環境に似ているはずです。
環境は次のとおりです。
仮想マシンのプライベートIP:192.168.184.155
ローカルマシンと仮想マシンの両方のパブリックIP:96.88.169.145
/ etc/mongod.conf fileの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がコンマ区切りのリストをとることに言及しているため、本当に混乱しました。
事前にご協力いただきありがとうございます。
私のためにmongo 3.2.7でカンマで区切られたIpsを括弧で囲みます:
bindIp = [127.0.0.1, 192.168.184.155, 96.88.169.145]
あなたはそれをすることができます:
bindIp: [172.31.60.184,127.0.0.1]
コンマの後にスペースを入れないでください。
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は、タイプ "string"です。
複数のIPアドレスをバインドするための解決策
bindIp: "127.0.0.1,xxx.xxx.xxx.xxx"
注:コンマの後にスペースはありません
@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アドレスではありません。そのため、エラーの原因にもなります。
あなたの両方の助けに感謝します!誰かが偶然同じ問題に遭遇した場合にこれが役立つかもしれないことを願っています。
SUSE 12.xで3.6を実行していますが、コンマ区切りのIPリストを使用すると問題が発生しました。 bindIpで問題を修正しました:0.0.0.0
Mongo 3. *では、
などのブラケットを使用します
net:
port: 27017
bindIp : [127.0.0.1,10.0.0.2,10.0.0.3]
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
私の場合、解決策は、コンマ区切りの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 dbバージョンv3.6.3 gitバージョン:9586e557d54ef70f9ca4b43c26892cd55257e1a5 OpenSSLバージョン:OpenSSL 1.1.0g 2017年11月2日アロケーター:tcmallocモジュール:なしビルド環境:distarch:x86_64 target_Arch:x86_64
コンマ、スペースなし、FQDNを使用して、バージョン3.2サービスに2番目のIPを追加しました
net:
port: 27017
bindIp: localhost,dev-2.office.sampleorg.com
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アドレスではないか、システムで不明です。