MongoDB 4.2 需关闭FlowControl流控机制

2023-10-13 14:33:31 浏览数 (1)

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

0 人点赞