【问题标题】:Mongo using (much) too much spaceMongo 使用(太多)太多空间
【发布时间】:2014-08-25 23:38:11
【问题描述】:

更新

一开始我有一些小型数据库,但后来我放弃了所有数据库以解决这个问题(徒劳无功)。

show dbs 显示

config  0.046875GB

但是find /var/lib/mongo -type f -print0 | sort -z | xargs -0 du -b 显示

134217728   /var/lib/mongo/a1/data/journal/j._3
88  /var/lib/mongo/a1/data/journal/lsn
134217728   /var/lib/mongo/a1/data/journal/prealloc.1
134217728   /var/lib/mongo/a1/data/journal/prealloc.2
536608768   /var/lib/mongo/a1/data/local.0
536608768   /var/lib/mongo/a1/data/local.1
536608768   /var/lib/mongo/a1/data/local.2
536608768   /var/lib/mongo/a1/data/local.3
536608768   /var/lib/mongo/a1/data/local.4
536608768   /var/lib/mongo/a1/data/local.5
536608768   /var/lib/mongo/a1/data/local.6
16777216    /var/lib/mongo/a1/data/local.ns
5   /var/lib/mongo/a1/data/mongod.lock
134217728   /var/lib/mongo/a2/data/journal/j._1
88  /var/lib/mongo/a2/data/journal/lsn
134217728   /var/lib/mongo/a2/data/journal/prealloc.1
134217728   /var/lib/mongo/a2/data/journal/prealloc.2
16777216    /var/lib/mongo/a2/data/local.0
33554432    /var/lib/mongo/a2/data/local.1
536608768   /var/lib/mongo/a2/data/local.2
536608768   /var/lib/mongo/a2/data/local.3
536608768   /var/lib/mongo/a2/data/local.4
536608768   /var/lib/mongo/a2/data/local.5
536608768   /var/lib/mongo/a2/data/local.6
536608768   /var/lib/mongo/a2/data/local.7
536608768   /var/lib/mongo/a2/data/local.8
16777216    /var/lib/mongo/a2/data/local.ns
5   /var/lib/mongo/a2/data/mongod.lock
134217728   /var/lib/mongo/b1/data/journal/j._4
88  /var/lib/mongo/b1/data/journal/lsn
134217728   /var/lib/mongo/b1/data/journal/prealloc.1
134217728   /var/lib/mongo/b1/data/journal/prealloc.2
536608768   /var/lib/mongo/b1/data/local.0
536608768   /var/lib/mongo/b1/data/local.1
536608768   /var/lib/mongo/b1/data/local.2
536608768   /var/lib/mongo/b1/data/local.3
536608768   /var/lib/mongo/b1/data/local.4
536608768   /var/lib/mongo/b1/data/local.5
536608768   /var/lib/mongo/b1/data/local.6
16777216    /var/lib/mongo/b1/data/local.ns
5   /var/lib/mongo/b1/data/mongod.lock
16384   /var/lib/mongo/b2/data/journal/j._1
88  /var/lib/mongo/b2/data/journal/lsn
16777216    /var/lib/mongo/b2/data/local.0
33554432    /var/lib/mongo/b2/data/local.1
536608768   /var/lib/mongo/b2/data/local.2
536608768   /var/lib/mongo/b2/data/local.3
536608768   /var/lib/mongo/b2/data/local.4
536608768   /var/lib/mongo/b2/data/local.5
536608768   /var/lib/mongo/b2/data/local.6
536608768   /var/lib/mongo/b2/data/local.7
536608768   /var/lib/mongo/b2/data/local.8
16777216    /var/lib/mongo/b2/data/local.ns
5   /var/lib/mongo/b2/data/mongod.lock
16777216    /var/lib/mongo/config/data/config.0
33554432    /var/lib/mongo/config/data/config.1
16777216    /var/lib/mongo/config/data/config.ns
134217728   /var/lib/mongo/config/data/journal/j._0
88  /var/lib/mongo/config/data/journal/lsn
134217728   /var/lib/mongo/config/data/journal/prealloc.1
134217728   /var/lib/mongo/config/data/journal/prealloc.2
5   /var/lib/mongo/config/data/mongod.lock

没有数据的情况下超过 17GB! 哎呀。

为什么 Mongo 占用这么多空间,我该如何减少它?

【问题讨论】:

  • 似乎大部分空间都被local 数据库占用了。它是副本集的一部分吗?
  • @SergioTulentsev,我很抱歉,但我不知道这意味着什么。我对 Mongo 知之甚少。
  • 您是否在同一台机器上运行多个 mongo 实例?
  • @FrederickCheung,没有。
  • 那很奇怪——你似乎有所有东西的 4 个副本(a1、a2、b1、b2)——看起来(至少在某些时候)这台机器被设置为一个分片副本集(在开发中,您可以将所有分片放在一台机器上)。本地数据库仅用于复制 afaik:它用于存储 oplog(mongo 相当于 mysql 的 bin 日志),mongo 将为它预分配一大块空间。总而言之,这看起来不像普通的 mongo 安装

标签: mongodb diskspace


【解决方案1】:

这些文件是什么?

看起来在您的环境中进行初始安装的人创建了一个sharded cluster,这可能是两个分片,每个分片由replica set 中的两个数据承载节点支持。他们选择在/var/lib/mongo/ 的公共路径下为每个节点创建子目录。

根据子目录名称,我猜a1a2 是分片a 的副本集,b1b1 是分片b 的副本集的一部分。如果您好奇,您可能可以通过检查仍然存在的config database 来确认之前的配置。

在一种情况下,在副本集中,每个承载数据的节点都有一个预分配的oplog (operation log),用于复制。 oplog 存储在local 数据库的oplog.rs 集合中。

默认情况下,oplog size 是可用磁盘空间的 5%(至少在 64 位 Linux 系统上),这就是为什么尽管有一个“空”数据库,它们仍会占用大量磁盘。

如何安全地清理这个数据目录?

如果您只运行一个 MongoDB 实例,默认情况下它将忽略额外的子目录及其内容。这就是为什么你仍然有额外的磁盘使用 - 你已经删除了你的 mongod 知道的所有数据库。

如果您想“重置”所有数据并重新开始,您应该:

  • 停止正在运行的mongod 实例,例如:sudo service mongod stop
  • 注意:如果您想更加确定之前的分片安装中没有延迟的mongod 进程,您也可以运行:killall mongod; killall mongos
  • 切换到数据目录:cd /var/lib/mongo/
  • 确保您在预期的目录中pwd
  • 删除所有文件:rm -r *
  • 重启mongod,例如:sudo service mongod start

【讨论】:

  • 也许它们曾经是 5% 的可用空间,但现在肯定不是这样了。
  • 确实,oplog 预分配是基于副本节点初始化时的可用空间。一旦分配,oplog 大小就不会改变(除非你手动change the size of the oplog)。
猜你喜欢
  • 2012-05-15
  • 1970-01-01
  • 2011-09-08
  • 1970-01-01
  • 2022-07-13
  • 2018-10-05
  • 2020-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多