web-dev-qa-db-ja.com

複数のIPアドレスでmongod.conf bind_ipを設定する方法

私は、サーバー環境とmongoDBをセットアップする初心者です。これは非常に単純に聞こえるかもしれませんが、あなたの助けが本当に必要です。

ローカルマシンからmongodbインスタンスを実行する仮想マシンに接続しようとしています。これは、別のリモートサーバーで実行する場合の運用環境に似ているはずです。

環境は次のとおりです。

  • 仮想マシンのプライベートIP:192.168.184.155

  • ローカルマシンと仮想マシンの両方のパブリックIP:96.88.169.145


/ etc/mongod.conf filebind_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がコンマ区切りのリストをとることに言及しているため、本当に混乱しました。

事前にご協力いただきありがとうございます。

38
yeelan

私のためにmongo 3.2.7でカンマで区切られたIpsを括弧で囲みます:

bindIp = [127.0.0.1, 192.168.184.155, 96.88.169.145]
53
Joe Cheng

あなたはそれをすることができます:

bindIp: [172.31.60.184,127.0.0.1]

コンマの後にスペースを入れないでください。

20
pungoyal

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"

注:コンマの後にスペースはありません

4
Sachin PC

@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アドレスではありません。そのため、エラーの原因にもなります。

あなたの両方の助けに感謝します!誰かが偶然同じ問題に遭遇した場合にこれが役立つかもしれないことを願っています。

3
yeelan

SUSE 12.xで3.6を実行していますが、コンマ区切りのIPリストを使用すると問題が発生しました。 bindIpで問題を修正しました:0.0.0.0

2
jprism

Mongo 3. *では、

などのブラケットを使用します

net:
    port: 27017
    bindIp : [127.0.0.1,10.0.0.2,10.0.0.3]
2
KyungHoon Kim

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.1bindIp: 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 
1
Bruce Yo

私の場合、解決策は、コンマ区切りの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
1

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アドレスではないか、システムで不明です。