如何获取mongoDB分片集群中当前使用的分片服务器的大小

如何获取mongoDB分片集群中当前使用的分片服务器的大小,mongodb,sharding,Mongodb,Sharding,我已经建立了一个分片集群,因为我的数据正在无缝增长,我需要不断监控数据的大小,并向集群添加新的分片 是否有一个命令,我可以使用它来知道在任何时候每个分片服务器中使用了多少大小 例如。假设我有一个数据库,来自mongos控制台的show dbs命令如下所示 mongos> show dbs company 0.375GB config 0.046875GB test 0.0625GB 我想知道每个分片服务器中使用了多少数据。用于公司数据库 我实现的架构如下 我有一个单独的数据库切分

我已经建立了一个分片集群,因为我的数据正在无缝增长,我需要不断监控数据的大小,并向集群添加新的分片

是否有一个命令,我可以使用它来知道在任何时候每个分片服务器中使用了多少大小

例如。假设我有一个数据库,来自mongos控制台的show dbs命令如下所示

mongos> show dbs
company 0.375GB
config  0.046875GB
test    0.0625GB
我想知道每个分片服务器中使用了多少数据。用于公司数据库

我实现的架构如下

我有一个单独的数据库切分,其中每个集合都是切分的。 3个运行mongod实例的分片服务器 1台运行mongos的服务器 1服务器正在运行配置实例

我的整个应用层都在直接与mongos对话

我需要知道这一点,因为我正计划构建一个cron来检查碎片服务器的可用大小,如果它超过某个数量,它将向管理员发送通知以表示注意


提前感谢您回复本帖

有通用的监控解决方案(nagios、zabbix等)。它们监视机器的许多参数,可以设置为在某些情况下发送警报。你不需要重新发明轮子


这种通用解决方案还可以在应用程序服务器上的空间不足时向您发出警告(因为其日志占用了所有空间)。您专门的mongodb cron作业将无法做到这一点。

在mongodb用户组中发布后,我得到了解决方案,说明了我们需要如何做到这一点以及可以使用哪些命令

命令

要了解每个分片服务器中特定数据库的空间利用率,我们必须使用

db.stats() 
db.<collectionname>.stats()
要了解每个分片服务器中特定集合的空间利用率,我们必须使用

db.stats() 
db.<collectionname>.stats()
$stats=$con->dbName->command(数组('collStats'=>'collection\u name')

尽管如此,我仍然无法从Zend shanty mongo中找到任何执行此类命令的方法,但我可以使用默认的PHP pecl mongo db驱动程序来实现这一点


谢谢大家回复这篇文章

谢谢大家分享Sergio的观点,但我的问题是,如果我采用这种解决方案,我必须在每个运行在不同amazon实例中的分片服务器中使用nagios或zabbix。因此,我计划通过与mongos对话来充分利用分片,我需要一个能够与mongos对话的应用程序,让共享集群中的每个参与者都能使用正确的数据空间(而不是剩余的),记住这是一个集群,每个成员都在一个单独的amazon实例中运行。好的,那没关系:)也许我以后会想出别的办法。在查阅mongo文档之后,我可以得到一个命令,可以从mongos控制台运行该命令来了解碎片的大小分布。它是“db.collection_name.stats()”,但我希望在我的cron中运行它并从php中获取它。请让我知道,如果有人从php中这样做了,我正在使用zend shanty library for the Cron在挖掘mongo文档后,我可以从mongos控制台获得一个命令,以了解碎片的大小分布。它是db.collection_name.stats(),但我希望在我的cron中运行并从php中获取相同的数据。请告诉我,如果有人从php中执行过此操作,我正在使用zend shanty库,因为在cron中还有一个概述:
sh.status()