Mongodb

無法連接到mongos

  • December 23, 2019

MongoDB Sharding Documentation之後,我使用包含我的配置伺服器細節的配置文件來啟動一個 mongos。

這似乎很簡單,但我遇到了一個問題。我在一台機器上啟動 mongos(假設它的 ip 地址是“some_ip”):

$ sudo mongos --config /etc/some_config.conf

我嘗試從另一台機器連接到它的外殼,但我收到連接被拒絕錯誤。

$ mongos some_ip:xxxxx

這是我的 some_config.conf 文件的一部分:

   net:
     port: xxxxx
     bindIp: 0.0.0.0

  sharding:
     configDB: <configReplSet>/<ip_of_config>:27019

我使用 0.0.0.0 進行測試。我確保我要連接的 ip_addr 和埠與 mongos 主機的 ip 和我在**net.port**參數中指定的埠匹配。我還在我的防火牆中打開了這個埠用於入口/出口連接。

我錯過了什麼嗎?(注意:**我編輯了文章以進一步澄清)

更新

(注意:我用“ip_of_config”替換了實際的 ip addr)這是我的 mongos 日誌文件在我啟動 mongos 時所說的內容。

2018-05-02T05:57:48.533+0000 W NETWORK  [monitoring keys for HMAC] Failed to 
connect to <ip_of_config>:27019, in(checking socket for error after poll), reason: 
Connection refused
2018-05-02T05:57:48.533+0000 W NETWORK  [monitoring keys for HMAC] Unable to 
reach primary for set crs0

現在我的配置伺服器啟動並執行良好,但它的日誌文件顯示它接受來自我的 mongos 伺服器的多個連接,但這些連接幾乎立即關閉。還有一些警告日誌:

W SHARDING [Balancer] Balancer settings could not be loaded and will be 
retried in 10 seconds :: caused by :: ReadConcernMajorityNotAvailableYet: 
Failed to refresh the balancer settings due to 
ReadConcernMajorityNotAvailableYet: Read concern majority reads are currently 
not possible.

W SHARDING [shard registry reload] cant reload ShardRegistry  :: caused by :: 
CallbackCanceled: Callback canceled

mongos for “MongoDB Shard”,是 MongoDB 分片配置的路由服務,它處理來自應用層的查詢,並確定這些數據在分片集群中的位置,以完成這些操作。從應用程序的角度來看,mongos實例的行為與任何其他 MongoDB 實例相同。

正如你在這裡提到的 mongos.conf 文件

net:
     port: xxxxx
     bindIp: 0.0.0.0

  sharding:
     configDB: <configReplSet>/<ip_of_config>:27019

在這裡我想說的是,由於您在 mongos.conf 文件中的 bindIp 為 0.0.0.0 但在分片部分,您正在使用任何副本集的埠號 27019。

注意:在這裡我無法在您的 mongos.conf 文件中看到任何日誌路徑目標。

根據此處的 MongoDB BOL 文件,從 MongoDB 3.6 開始,mongos127.0.0.1預設綁定到 localhost ()。

您是否嘗試過使用此mongos.conf文件配置。

sharding:
 configDB: replicasetname/ipaddress:27019 -- external ip of replica set of any node which port is 27019, as you mention in your code. which must be participate the replication. 
net:
 bindIp: localhost,ipaddress -- external ip address, if you are using  
 port: xxxxx --port number of mongos, it should be different from replica set node port number
systemLog:
 destination: file
 path: -- log destination of mongos file
 logAppend: true
processManagement:
 fork: true             -- if you are using the fork

您沒有告訴您的 mongodb 版本,但我猜您使用的是最新版本之一,因此您也需要設置net.bindIp,因為它的預設值是localhost,並且如您所知,您無法從機器外部連接 localhost。

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