本文介紹如何排查無法連接云數據庫MongoDB實例的問題。

若您已收到客戶端返回的錯誤信息,請查閱連接失敗常見報錯匹配解決方案。

概覽

您可以從以下幾個方面排查無法連接云數據庫MongoDB實例的問題:

檢查白名單設置

您需要將正確的客戶端IP地址添加到云數據庫MongoDB實例的白名單中,才能連接云數據庫MongoDB實例。

排查方法及解決方案如下:
  • 方法一(推薦):使用云數據庫MongoDB的連接診斷功能,檢測IP地址是否連通,如何檢測及檢測失敗后如何解決,請參見連接診斷連接診斷
  • 方法二:請在數據庫的白名單中臨時添加0.0.0.0/0,如果設置后可以正常訪問,說明是白名單設置存在問題。

    解決方案:刪除0.0.0.0/0白名單,將正確的IP地址添加到云數據庫MongoDB實例的白名單中。如何設置白名單,請參見設置白名單。

檢查網絡環境

云數據庫MongoDB支持私網和公網兩種連接方式,不同網絡環境需滿足以下條件才能連接云數據庫MongoDB實例:
  • 私網:確保實例處于同一個地域、實例的網絡類型相同且私網連接地址正確。

    若實例的網絡類型都是專有網絡(VPC),您還需要確保實例在同一個專有網絡中。

  • 公網:確保公網連接地址正確。
您可以參見如下流程圖排查客戶端的網絡環境: 檢查網絡環境

如何解決由網絡環境導致的實例連接失敗問題,請參見如何解決由網絡環境導致的實例連接失敗問題?

檢查實例連接地址

您需要使用正確的實例連接地址,才能連接云數據庫MongoDB實例。

您可以登錄 MongoDB管理控制臺,在 數據庫連接頁面查看云數據庫MongoDB實例的連接地址。 實例連接地址
實例連接地址不正確的常見原因及解決方案如下:
  • 常見原因一:使用了錯誤的網絡環境的連接地址。

    例如計劃通過公網連接云數據庫MongoDB實例卻使用了實例的專有網絡連接地址,導致連接失敗。

    解決方案:請根據網絡環境,使用正確的連接地址。

  • 常見原因二:連接地址中的鑒權數據庫有誤。

    解決方案:請在連接串中填寫正確的鑒權數據庫。

    如果您使用高可用地址連接云數據庫MongoDB實例,連接串中包含數據庫和鑒權數據庫,這兩個數據庫可以相同也可以不同。本文以副本集實例的ConnectionstringURI地址為例進行介紹,連接串格式如下:
    mongodb://<username>:<password>@<host1>:<port1>,<host2>:<port2>,...,<hostN>:<portN>/<database>?replicaSet=<replicaSet_value>[&authSource=<authenticationDatabase>]
    數據庫和鑒權數據庫的參數說明如下:
    • <database>:數據庫,實例連接成功后默認要訪問的數據庫,相當于自動執行命令use <database>。
    • authSource=<authenticationDatabase>(可選):<authenticationDatabase>為鑒權數據庫名稱。如果不配置該參數,<database>會作為鑒權數據庫。

      鑒權數據庫用于存儲數據庫賬號和密碼。數據庫賬號必須在所屬的數據庫下進行鑒權,才能鑒權成功。

    示例:
    • root賬號存儲在admin數據庫中,在admin數據庫鑒權成功后,實例進入admin數據庫。
      mongodb://root:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****
    • test賬號存儲在newDB數據庫中,在newDB數據庫鑒權成功后,實例進入admin數據庫。
      mongodb://test:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-6108****&authSource=newDB
    • test賬號存儲在newDB數據庫中,在newDB數據庫鑒權成功后,實例進入newDB數據庫。
      mongodb://test:****@dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512****.mongodb.rds.aliyuncs.com:3717/newDB?replicaSet=mgset-6108****&authSource=newDB
  • 常見原因三:實際連接的節點不是主節點(Primary節點)。
    此原因僅適用于副本集實例。如果您的業務通過主節點的地址連接副本集實例,主備切換后實際連接的節點角色變成了從節點(Secondary節點),所以寫入失敗。
    說明 導致實例發生主備切換的原因有很多種,具體請參見 為什么實例會發生主備切換。
    解決方案:
    • 手動切換實例的節點角色,將業務實際連接的單節點地址對應節點切換為主節點。如何切換節點角色,請參見切換節點角色。
    • 推薦生產環境的應用程序通過ConnectionStringURI地址連接數據庫。當某個節點出現故障時,不會因為主備切換而影響應用的讀寫操作,更多信息,請參見副本集實例連接說明
    • 請為業務設計重連機制和異常處理能力,連接閃斷后可自動重連,保障業務穩定運行。
  • 常見原因四:連接地址中的賬號密碼包含特殊字符!@#$%^&*()_+=。

    通過Mongo Shell或程序代碼連接云數據庫MongoDB實例時,如果連接串中的賬號密碼包含特殊字符!@#$%^&*()_+=,這些特殊字符在連接時無法被識別,會導致實例連接失敗。

    解決方案:您需要對賬號密碼中的特殊字符進行轉義處理,詳情請參見如何解決連接串中賬號密碼包含特殊字符導致連接失敗的問題

檢查域名解析情況

域名解析正確,才能連接云數據庫MongoDB實例。

排查方案:通過ping <域名>telnet <域名> <端口號>命令測試網絡的連通性。

解決方案:請參見Linux系統的ECS實例內部無法正常解析域名。

檢查實例狀態

實例的狀態為運行中,才能連接云數據庫MongoDB實例。

登錄 MongoDB管理控制臺,在目標實例的 基本信息頁面查看實例狀態,確保實例狀態為 運行中,排除實例狀態異?;蛘弑绘i定等問題。 實例狀態(中國站)
實例被鎖定的常見原因及解決方案如下:

檢查第三方工具

當第三方工具(如Navicat、Compass等工具)無法連接云數據庫MongoDB實例時,有可能是實例的設置或者第三方工具的設置不正確等原因造成的。您需要確保實例和第三方工具的設置都正確,才能通過第三方工具連接云數據庫MongoDB實例。

建議您先通過Mongo Shell工具連接實例的高可用連接串(ConnectionstringURI地址)做測試,測試結果及對應的解決方案如下:
  • 連接成功:第三方工具的設置不正確。請根據您實際使用的工具,具體排查工具的各種設置。
  • 連接失敗:實例的設置不正確。請參照本文排查白名單設置、網絡環境、實例連接地址、域名解析情況和實例狀態。

相關文檔

連接失敗常見報錯