MongoDB 4.2 版本引入了流量控制特性,用于保持副本集多数提交延迟不超过指定的最大值,从而确保数据的一致性和可靠性。
如果复制延迟达到"flowControlTargetLagSeconds" : 10(秒),流量控制机制就会开始限制主节点上的写入操作。
可通过以下命令查看
代码语言:javascript复制db.adminCommand( { getParameter : 1, "flowControlTargetLagSeconds" : 1 } )
这个原理跟MySQL MGR的流控相似。
默认情况下,MongoDB 启动后会自动开启流量控制,生产环境应将其关闭,以防止高并发期间自动触发限流,造成主库不可写,引起生产事故。
1)动态关闭:
代码语言:javascript复制db.adminCommand( { setParameter: 1,enableFlowControl: false } )
2)写死在mongod.cnf配置文件里:
INI格式:
代码语言:javascript复制setParameter = enableFlowControl = false
YAML格式:
代码语言:javascript复制setParameter:
enableFlowControl: false
3) 查看:
代码语言:javascript复制db.adminCommand( { getParameter : 1, "enableFlowControl" : 1 } )
m5_rs1:PRIMARY> db.adminCommand( { getParameter : 1, "enableFlowControl" : 1 } )
{
"enableFlowControl" : false,
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1697178044, 1),
"signature" : {
"hash" : BinData(0,"xfDl3MZO Xh dX/NoLa7Z1XYFps="),
"keyId" : NumberLong("7259236166149341189")
}
},
"operationTime" : Timestamp(1697178044, 1)
}
或执行:
代码语言:javascript复制db.serverStatus().flowControl
m5_rs1:PRIMARY> db.serverStatus().flowControl
{
"enabled" : false,
"targetRateLimit" : 1000000000,
"timeAcquiringMicros" : NumberLong(186),
"locksPerKiloOp" : 0,
"sustainerRate" : 0,
"isLagged" : false,
"isLaggedCount" : 0,
"isLaggedTimeMicros" : NumberLong(0)
}
参考: https://mydbops.wordpress.com/2023/05/29/understanding-flow-control-in-mongodb-manage-replication-lag-and-enhance-performance/
https://www.mongodb.com/docs/v4.2/reference/parameters/#param.enableFlowControl