Mongodb

使用 Mongodb 綁定特定的 ip

  • August 12, 2020

我在 Centos 7 上使用 Mongodb 3.6.3。

我正在執行以下命令:

sudo mongod --storageEngine wiredTiger --dbpath /data --bind_ip_all --logpath /var/log/mongodb/mongod.log --fork

一切都會正常工作。除了,綁定 all 不夠安全。

我曾經在嘗試時收到過日誌記錄錯誤,--bind_ip 127.0.0.1,privateIP但發現當我這樣做時錯誤會消失bind_ip [127.0.0.1,privateIP]

但是,當我嘗試在本地連接到 mongo 時,它會失敗,並且通過我的站點,它會一直坐在那裡直到超時。我檢查了一下sudo netstat -plnt | egrep mongod,然後什麼都沒有出現,雖然它成功地分叉了 mongod 程序,但它沒有綁定到任何指定的 ips。

--bind_ip_all作為參考,當我在它返回的版本上嘗試相同的命令時tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1645/mongod

我的問題是,為什麼--bind_ip ips無法綁定到指定的ips?

旁注 - 綁定 ips 時,我應該綁定我的彈性 ip 還是我的私有 ip?

我正在執行以下命令:

sudo mongod –storageEnginewiredTiger –dbpath /data –bind_ip_all –logpath /var/log/mongodb/mongod.log –fork

一切都會正常工作。除了,綁定 all 不夠安全。

根據此處 的MongoDB BOL**警告:**在綁定到其他 ip 地址之前,請考慮啟用安全檢查表中列出的訪問控制和其他安全措施,以防止未經授權的訪問。

我曾經在嘗試 –bind_ip 127.0.0.1,privateIP 時收到日誌錯誤,但發現當我執行 bind_ip 時錯誤會消失

$$ 127.0.0.1,privateIP $$.

在這裡我想說,如果您要綁定多個 ip,那麼根據此處的 MongoDB 文件要綁定到多個地址,請輸入逗號分隔值的列表。

例子

localhost,/tmp/mongod.sock

Or 

localhost,192.168.103.100

在上面的範例中,假設我綁定了多個 ip。一個外部 ip (192.168.103.100) 和另一個 localhost 或(代替 localhost,即 127.0.0.1)。

net.bindIp

類型:字元串

預設值:本地主機

Starting in MongoDB 3.6, mongos and mongod bind to localhost (127.0.0.1) by default.

但是,當我嘗試在本地連接到 mongo 時,它會失敗,並且通過我的站點,它會一直坐在那裡直到超時。我檢查了 sudo netstat -plnt | egrep mongod 沒有任何顯示,雖然它成功地 fork mongod 程序,但它沒有綁定到任何指定的 ips。

“–fork”是一個標誌,告訴 mongod 作為後台程序執行,而不是作為阻塞 shell 的活動程序。“–fork”是一個標誌,告訴 mongod 作為後台程序執行,而不是作為阻塞 shell 的活動程序。

大多數情況下,當我們無法mongd.conf正確配置(我的意思是說 bindIp、埠和授權限制)時,就會得到timed out error.

作為參考,當我在 –bind_ip_all 版本上嘗試相同的命令時,它返回 tcp 0 0 0.0.0.0:27017

0.0.0.0:* LISTEN 1645/mongod。

net.bindIpAll

類型:布爾值

預設值:假

New in version 3.6.

如果為 true,則 mongos 和 mongod 實例綁定到所有 IP 地址。將 mongos 和 mongod 附加到可公開訪問的介面時,請確保您已實施適當的身份驗證和防火牆限制以保護數據庫的完整性。

將 net.bindIp 設置為0.0.0.0,::綁定到所有 IP 地址。

與上面的 mongo shell 輸出一樣,mongod 伺服器預設返回 localhost 的 pid 埠號27017

注意: net.bindIp 和 net.bindIpAll 是互斥的。也就是說,您可以指定其中之一,但不能同時指定兩者。

我的問題是,為什麼 –bind_ip ips 無法綁定到指定的 ips?

旁注 - 綁定 ips 時,我應該綁定我的彈性 ip 還是我的私有 ip?

可能是你的mongod.conf配置文件沒有正確配置。這就是為什麼您無法啟動 mongod 伺服器文件到該特定 ip 的原因。

由於 MongoDB 配置文件使用YAML格式。

mongod設置的範例配置文件,你可以在這裡找到

例如,我還mongod.conf以“YAML”格式寫下了範例配置文件。

storage:
 dbPath: /var/mongodb/db/node1   -- this is the dbPath location 
net:
 bindIp: 192.168.103.100,localhost  -- here there is multiple ip binding
 port: 27011
security:
 authorization: enabled    -- here Authorization is enabled
systemLog:
 destination: file
 path: /var/mongodb/db/node1/mongod.log  -- this is log path 
 logAppend: true
processManagement:
 fork: true    -- here fork is true

除非您無法通過您的 mongod.conf 文件執行 mongod 伺服器,否則這意味著您的 YAML 配置文件中存在一些錯誤。

注意: YAML 不支持製表符進行縮進:請改用空格。

希望這對您有所幫助。

引用自:https://dba.stackexchange.com/questions/202029