将 Mongodb 4.4.8 升级到 6.0.4 时出现问题

问题描述 投票:0回答:0

我们在 docker 容器中有一个副本集,三个节点托管在一个 128 GB 文件系统上的三个主机上,支持每个 mongodb 数据节点。

在将 mongodb RS 从 4.4.8 版本升级到 5.0 和 6.0.4 后几分钟后,在 Mongo 6.0.4 中我们遇到了一个问题,我们看到文件系统正在填充由 Mongo 请求引起的临时文件。 在 Mongo 节点 1 上,我们在 mongo 完全填满文件系统后在日志中看到此消息:

{"log":"{\"t\":{\"$date\":\"2023-02-27T16:35:02.652+00:00\"},\"s\":\"W\",  \"c\":\"QUERY\",    \"id\":23798,   \"ctx\":\"conn13376\",\"msg\":\"Plan executor error during find command\",\"attr\":{\"error\":{\"code\":5642403,\"codeName\":\"Location5642403\",\"errmsg\":\"Error writing to file /data/db/_tmp/extsort-sort-executor.480: errno:28 No space left on device\"},\"stats\":{\"stage\":\"SORT\",\"nReturned\":0,\"works\":162854,\"advanced\":0,\"needTime\":162853,\"needYield\":0,\"saveState\":174,\"restoreState\":174,\"failed\":true,\"isEOF\":0,\"sortPattern\":{\"-$natural\":1},\"memLimit\":104857600,\"type\":\"simple\",\"totalDataSizeSorted\":0,\"usedDisk\":false,\"spills\":0,\"inputStage\":{\"stage\":\"COLLSCAN\",\"nReturned\":162853,\"works\":162854,\"advanced\":162853,\"needTime\":1,\"needYield\":0,\"saveState\":174,\"restoreState\":174,\"isEOF\":0,\"direction\":\"forward\",\"docsExamined\":162853}},\"cmd\":{\"find\":\"oplog.rs\",\"filter\":{},\"sort\":{\"-$natural\":1},\"lsid\":{\"id\":{\"$uuid\":\"d77e409f-c760-4a20-9d06-2354573a53aa\"}},\"$clusterTime\":{\"clusterTime\":{\"$timestamp\":{\"t\":1677515699,\"i\":2}},\"signature\":{\"hash\":{\"$binary\":{\"base64\":\"K2Zxssj9aVxFx7AUshry/eug8Os=\",\"subType\":\"0\"}},\"keyId\":7144359882769039361}},\"$db\":\"local\",\"$readPreference\":{\"mode\":\"primaryPreferred\"}}}}\r\n","stream":"stdout","time":"2023-02-27T16:35:02.653055582Z"}
{"log":"{\"t\":{\"$date\":\"2023-02-27T16:35:02.678+00:00\"},\"s\":\"I\",  \"c\":\"COMMAND\",  \"id\":51803,   \"ctx\":\"conn13376\",\"msg\":\"Slow query\",\"attr\":{\"type\":\"command\",\"ns\":\"local.oplog.rs\",\"command\":{\"find\":\"oplog.rs\",\"filter\":{},\"sort\":{\"-$natural\":1},\"lsid\":{\"id\":{\"$uuid\":\"d77e409f-c760-4a20-9d06-2354573a53aa\"}},\"$clusterTime\":{\"clusterTime\":{\"$timestamp\":
{\"t\":1677515699,\"i\":2}},\"signature\":{\"hash\":{\"$binary\":{\"base64\":\"K2Zxssj9aVxFx7AUshry/eug8Os=\",\"subType\":\"0\"}},\"keyId\":7144359882769039361}},\"$db\":\"local\",\"$readPreference\":{\"mode\":\"primaryPreferred\"}},\"planSummary\":\"COLLSCAN\",\"numYields\":174,\"queryHash\":\"35E1175D\",\"planCacheKey\":\"35E1175D\",\"queryFramework\":\"classic\",\"ok\":0,\"errMsg\":\"Executor error during find command :: caused by :: Error writing to file /data/db/_tmp/extsort-sort-executor.480: errno:28 No space left on device\",\"errName\":\"Location5642403\",\"errCode\":5642403,\"reslen\":362,\"locks\":{\"FeatureCompatibilityVersion\":{\"acquireCount\":{\"r\":175}},\"Global\":{\"acquireCount\":{\"r\":175}},\"Mutex\":{\"acquireCount\":{\"r\":1}}},\"readConcern\":{\"level\":\"local\",\"provenance\":\"implicitDefault\"},\"storage\":{\"data\":{\"bytesRead\":42052646,\"timeReadingMicros\":584398}},\"remote\":\"172.18.0.1:49438\",\"protocol\":\"op_msg\",\"durationMillis\":1931}}\r\n","stream":"stdout","time":"2023-02-27T16:35:02.678270963Z"}

此消息是由执行命令的 Mongo 查询引起的:

"cmd\":{\"find\":\"oplog.rs\",\"filter\":{},\"sort\":{\"-$natural\":1}

文件系统也不会立即被填满,因为 mongodb 有时会执行删除这些临时文件的操作,但是谁定义的规则是可配置的?

不明白mongodb为什么要循环执行这条命令,执行这条命令的原因是什么。 是否可以限制 Mongo 写入驱动器的临时文件的大小?

我们重新开始了从 4.4.8 到 6.0.4 的迁移过程,我们总是遇到同样的问题。但是,当我们在副本集中手动执行此命令时,我们遇到了同样的问题,文件系统正在填满。

mongodb docker replicaset
© www.soinside.com 2019 - 2024. All rights reserved.