【问题标题】:Unable to start mongod server with default oplog size while trying replication尝试复制时无法使用默认 oplog 大小启动 mongod 服务器
【发布时间】:2017-01-12 19:01:56
【问题描述】:

当 oplog 具有默认值时,我无法创建复制,即 rs.initiate()。 我的服务器有 400+ GB 的可用空间。 在 MongoDB 的官方文档中,MMAP 的 default range 是 990MB 到 50GB 之间可用磁盘空间的 5%,但 Memory Use 下的 here :-

使用 MMAPv1,MongoDB 会自动使用机器上的所有空闲内存作为其缓存。

在没有 oplog 大小选项的情况下启动 mongod 后执行 rs.initiate() 时控制台出错:

mmap 因内存不足而失败

“errmsg”:“无法启动:文件 /data/0/local.7 在 createPrivateMap 中打开/创建失败(查看日志以获取更多信息)”

所以,我只使用 --oplogSize 4096 启动了 mongod,之后我才能够执行 rs.initiate。现在我知道小 oplog 大小的问题,但我想知道后台到底发生了什么。 5% 的可用磁盘空间或 50 GB 上限,无论哪种方式,我的服务器中仍有 300 GB 可用。

【问题讨论】:

    标签: replication mongodb-replica-set mongodb-oplog


    【解决方案1】:

    你的内存用完了!
    是的,mongo 将(最终)使用所有可用的内存。这里的问题是,在 5% 的规则下,创建那些 local.x 数据库文件系统需要更多的内存,而你当时可用的内存是(及时)。

    使用 oplogSize 参数,您将 oplog 限制为较小的大小,此时您有足够的内存来创建这些文件。

    参数--smallfiles (storage.mmapv1.smallFiles) 是你的朋友这种情况。

    【讨论】:

    • 使用 --smallfiles 也没有任何帮助,只有当我提供 --oplog size 时它才有效。您认为正在使用多少内存以及如何检查?如前所述,有 400+GB 可用空间。
    • 您的服务器有多少(小)内存?我从来没有管理过 mongo 服务器,它的内存太少以至于它会“内存不足”。当您测试 --smallfiles 时,您的 datadir 为空?
    • 我的服务器中有近 400GB 的可用空间,但 mongodb 开始时只有 6GB 的 oplog 大小。是的, --smallfiles 与空数据目录一起使用,但没有 oplog 大小。只有当我提供 6GB 或以下的 oplog 大小时,所有配置才有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-18
    • 2014-05-15
    • 2021-08-25
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    相关资源
    最近更新 更多