MongoDB连接相关报错

一、maxIncomingConnections

1、参数含义

mongos或mongod接收的最大并发连接数,默认为65536,当该参数设置值操作操作系统最大连接数限制时,取两者之间最小值作为上限。

一般情况下,该参数值的设置需要大于客户端创建连接数与应用池最大连接数,避免客户端连接报错。对于mongos服务来讲,合理设置该参数也可以避免单各shard节点上出现连接尖峰,破坏集群稳定和内存分配。

2、参数达到上限对应报错

1)数据库连接报错

[root@sdw2 logs]# mongo --port=27001
MongoDB shell version v4.0.22
connecting to: mongodb://127.0.0.1:27001/?gssapiServiceName=mongodb
2021-04-19T20:13:56.650+0800 I NETWORK  [js] DBClientConnection failed to receive message from 127.0.0.1:27001 - HostUnreachable: Connection closed by peer
2021-04-19T20:13:56.651+0800 E QUERY    [js] Error: network error while attempting to run command 'isMaster' on host '127.0.0.1:27001'  :
connect@src/mongo/shell/mongo.js:356:17
@(connect):2:6
exception: connect failed

2)数据库错误日志

2021-04-19T20:13:38.609+0800 I NETWORK  [ReplicaSetMonitor-TaskExecutor] DBClientConnection failed to receive message from 172.16.104.13:27001 - HostUnreachable: Connection closed by peer
2021-04-19T20:13:40.530+0800 I NETWORK  [listener] connection refused because too many open connections: 6
2021-04-19T20:13:56.649+0800 I NETWORK  [listener] connection refused because too many open connections: 6

3)解决方法

当出现以上报错时,就表示当前数据库连接数超过了 maxIncomingConnections 参数的设置,可以检查该参数是否设置合理,需要修改该参数并重启数据库实例进行处理。

二、maxSessions

1、参数含义

MongoDB 4.0.1 版本中新增参数,默认为1000000,表示mongos或者mongod服务可缓存的最大会话数,当该参数设置小于 maxIncomingConnections 参数时,客户端可正常创建连接并进行用户认证,但是无法进行正常的查询操作,并返回报错: “errmsg”:“cannot add sessiion into the cache”,“code”:“261”,“codeName”:“TooManyLogicalSessions”

[root@sdw2 logs]# cat /data/mongodb40/shard1/conf/
net:
   maxIncomingConnections: 20000

2、参数达到上限对应报错

[root@sdw2 ~]# mongo --port=27001
MongoDB shell version v4.0.22
connecting to: mongodb://127.0.0.1:27001/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("cea19ae7-4805-48b8-9bc9-81cad423f727") }
MongoDB server version: 4.0.22
shard1:SECONDARY> use admin
switched to db admin
shard1:SECONDARY> db.auth("root","123")
1
shard1:SECONDARY> db.adminCommand( { getParameter: 1, "maxSessions": 1 } )
{
	"operationTime" : Timestamp(1618842001, 1),
	"ok" : 0,
	"errmsg" : "cannot add session into the cache",
	"code" : 261,
	"codeName" : "TooManyLogicalSessions",
	"$gleStats" : {
		"lastOpTime" : Timestamp(0, 0),
		"electionId" : ObjectId("000000000000000000000000")
	},
	"lastCommittedOpTime" : Timestamp(1618842001, 1),
	"$configServerState" : {
		"opTime" : {
			"ts" : Timestamp(1618841990, 1),
			"t" : NumberLong(1)
		}
	},
	"$clusterTime" : {
		"clusterTime" : Timestamp(1618842005, 1),
		"signature" : {
			"hash" : BinData(0,"GovaI39+V0lvGf3px8+0m/IVfhc="),
			"keyId" : NumberLong("6947282400699219974")
		}
	}
}

2)解决办法

当超过 maxSessions 参数限制时,数据库错误日志中并不会记录相关报错信息,仅仅在客户端请求查询时无法正常返回请求结果。若出现以上报错,需要修改配置文件中maxSessions参数,设置该参数时可参考 maxIncomingConnections 的设置。

每个会话都会占用一个alive session cache,超过一定时间后会自动进行释放,若业务并发较高的情况下,cache释放的速度赶不上客户端新增请求速度时,就会频繁出现该报错。

[root@sdw2 logs]# cat /data/mongodb40/shard1/conf/
setParameter:
   maxSessions: 2

3、相关状态查看

db.runCommand( { serverStatus: 1, repl: 1, metrics: 0, locks: 0 } )
	"logicalSessionRecordCache" : {
		"activeSessionsCount" : 2,
		"sessionsCollectionJobCount" : 30,
		"lastSessionsCollectionJobDurationMillis" : 14,
		"lastSessionsCollectionJobTimestamp" : ISODate("2021-04-19T14:43:20.508Z"),
		"lastSessionsCollectionJobEntriesRefreshed" : 0,
		"lastSessionsCollectionJobEntriesEnded" : 0,
		"lastSessionsCollectionJobCursorsClosed" : 0,
		"transactionReaperJobCount" : 30,
		"lastTransactionReaperJobDurationMillis" : 12,
		"lastTransactionReaperJobTimestamp" : ISODate("2021-04-19T14:43:20.509Z"),
		"lastTransactionReaperJobEntriesCleanedUp" : 0,
		"sessionCatalogSize" : 0

相关文档参考:

https://docs.mongodb.com/manual/reference/parameters/

https://docs.mongodb.com/manual/reference/command/serverStatus/
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值