如何應對因實例連接數達到最大限制而引發的連接失敗問題
更新時間 2023-11-29 21:21:15
最近更新時間: 2023-11-29 21:21:15
分享文章
本頁介紹了文檔數據庫服務實例的連接數滿導致實例連接失敗,如何處理。
問題現象
- Python連接文檔數據庫服務時的錯誤 :
- pymongo.errors.ServerSelectionTimeoutError:表示Python的MongoDB驅動(pymongo)無法選擇可用的文檔數據庫服務服務器,連接超時。
- Java連接文檔數據庫服務時的錯誤 :
- com.mongodb.MongoTimeoutException:表示Java的MongoDB驅動無法在規定的時間內連接到文檔數據庫服務實例,連接超時。
可能原因
- 分片集群(Sharded Cluster):
- 讀寫請求過多,超過了分片集群的連接數上限。
- 部分分片服務器負載過高,無法處理更多的連接請求。
- 分片鍵設計不合理,導致部分分片集群負載不均衡。
- 副本集(Replica Set):
- 讀寫請求過多,超過了副本集的連接數上限。
- 副本集中的主節點(Primary)負載過高,無法處理更多的連接請求。
- 單節點實例:
- 讀寫請求過多,超過了單節點實例的連接數上限。
處理思路
- 請及時排查業務側連接是否有效,優化實例連接,釋放不必要的連接。
- 排查“net.maxIncomingConnections”參數的值及實例規格,修改參數值或對數據庫進行規格擴容。
- 通過文檔數據庫服務控制臺,基本信息頁查看監控信息、CPU、內存、磁盤、連接數等指標,通過控制臺的告警中心設置告警策略,出現告警時可以提前識別風險。
處理方法
優化實例連接,釋放不必要的連接。
- 您可以通過重啟實例來臨時釋放所有的連接。
- 您可以查詢節點當前連接數,以及當前連接來源,分析各個終端和文檔數據庫服務實例分別建立了多少連接,并作出相應調整。
db.serverStatus().connections
{ "current" : 7, "available" : 398, "totalCreated" : 818364 }
#您需要關注以下參數及對應的值:
current:當前已經建立的連接數。
available:當前可用的連接數。
修改參數值或對數據庫進行規格擴容。
- 通過文檔數據庫服務參數設置頁面connPoolMaxConnsPerHost 的值進行調整,修改后重啟實例生效。
- 如果調整連接數過大,可能導致服務崩潰,這時只能通過變更實例規格增加承載的連接數的數量。