排查因連接數(shù)耗盡導(dǎo)致的數(shù)據(jù)庫(kù)連接問(wèn)題
當(dāng)MongoDB實(shí)例的連接數(shù)被耗盡后,新發(fā)起的連接請(qǐng)求將無(wú)法被響應(yīng),本文介紹如何排查因連接數(shù)耗盡導(dǎo)致的數(shù)據(jù)庫(kù)連接問(wèn)題。
故障表現(xiàn)
不同的MongoDB實(shí)例規(guī)格支持的最大連接數(shù)有所不同,詳情請(qǐng)參見(jiàn)實(shí)例規(guī)格概述。
部署的應(yīng)用程序突然無(wú)法連接數(shù)據(jù)庫(kù)。
已正確設(shè)置了白名單,通過(guò)Mongo Shell連接數(shù)據(jù)庫(kù)時(shí),提示如下錯(cuò)誤:
2019-07-10T10:30:43.597+0800 E QUERY [js] Error: network error while attempting to run command 'isMaster' on host 'dds-bpxxxxxxxx.mongodb.rds.aliyuncs.com:3717' : connect@src/mongo/shell/mongo.js:328:13 @(connect):1:6 exception: connect failed
已正確設(shè)置了白名單,通過(guò)DMS連接數(shù)據(jù)庫(kù)時(shí),提示如下錯(cuò)誤:
檢查連接數(shù)是否被耗盡
訪問(wèn)MongoDB副本集實(shí)例列表或MongoDB分片集群實(shí)例列表,在上方選擇地域,然后單擊目標(biāo)實(shí)例ID。
在目標(biāo)實(shí)例頁(yè)面的左側(cè)導(dǎo)航欄,單擊監(jiān)控信息。
在監(jiān)控信息頁(yè)面,查看實(shí)例當(dāng)前的連接數(shù)信息。
說(shuō)明實(shí)例為分片集群實(shí)例時(shí),您需要在頁(yè)面右上角選擇業(yè)務(wù)當(dāng)前使用的Mongos節(jié)點(diǎn)。
不同規(guī)格的最大連接數(shù),請(qǐng)參見(jiàn)實(shí)例規(guī)格表。
解決方法
您可以通過(guò)重啟實(shí)例或節(jié)點(diǎn)來(lái)臨時(shí)釋放所有的連接。為避免再次出現(xiàn)該問(wèn)題,重啟后建議您參考下述方法進(jìn)行調(diào)整:
重啟實(shí)例的操作會(huì)將實(shí)例的節(jié)點(diǎn)進(jìn)行輪轉(zhuǎn)重啟,每個(gè)節(jié)點(diǎn)會(huì)有30秒左右的閃斷,如果集合的數(shù)量較多(超過(guò)1萬(wàn)),閃斷時(shí)間也會(huì)隨之變長(zhǎng),重啟前請(qǐng)做好業(yè)務(wù)安排并確保應(yīng)用有重連機(jī)制。
合理地配置連接池,詳情請(qǐng)參見(jiàn)如何限制終端的連接數(shù)。
分析連接的來(lái)源,如果經(jīng)過(guò)分析是業(yè)務(wù)將連接數(shù)耗盡,請(qǐng)通過(guò)升級(jí)實(shí)例的規(guī)格,詳情請(qǐng)參見(jiàn)變更配置方案概覽。