全部产品

MongoDB中磁盘空间耗尽导致无法写入问题

KB: 125897

 · 

更新时间:2020-11-13 11:10

问题描述

当MongoDB实例的磁盘空间被耗尽后,实例的状态将转变为锁定中,处于该状态的实例将无法写入或删除数据。具体问题场景的描述符合以下几点:

  • 部署的应用程序无法将数据写入数据库,但是可以正常读取数据。
  • 通过Mongo Shell连接数据库进行排查时,测试写入一条数据后,返回以下错误信息。
    not authorized on xxxx to execute command
  • 通过MongoDB控制台,查看到实例的状态处于锁定中
    说明:由于分片集群架构的特殊性,当分片集群实例磁盘空间被占满后,实例不会显示为 锁定中

问题原因

磁盘空间耗尽。

解决方案

阿里云提醒您:

  • 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
  • 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
  • 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。

当您遇到MongoDB实例中无法写入磁盘时,请参考以下内容进行排查和处理。

排查

  1. 登录MongoDB管理控制台
  2. 在页面左上角,选择实例所在的地域。
  3. 根据实例类型,在左侧导航栏单击副本集实例列表分片集群实例列表
  4. 定位目标实例,单击实例ID。
  5. 根据实例类型,参考以下内容进行操作:
    说明:磁盘空间使用率的数据采集粒度为5分钟。
    • 单节点或副本集实例
      在实例的基本信息页面,检查实例状态及磁盘空间的使用率信息。确认实例状态为锁定中,同时确认实例的磁盘空间使用率超过了100%。
    • 分片集群实例
      1. 单击左侧导航栏的监控信息
      2. 监控信息页面顶部,筛选所需查看的Shard节点。
        说明:以d开头的节点ID为Shard节点,以s开头的节点ID为Mongos节点。
      3. 检查磁盘空间使用率,确认Shard节点的磁盘空间的使用率超过了100%。

处理问题

可参考以下两种方法解决磁盘空间被占满的问题:

  1. 通过变更配置方案概览来提升实例的磁盘空间,具体操作请参见变更配置方案概览
    说明:不同的实例规格对应的最大磁盘空间有所不同,详情请参见 实例规格表
  2. 副本集实例的最高规格中,可配置的最大磁盘空间为3,000GB。如果您的业务预期会超过此限制,建议使用分片集群实例,通过扩展Shard节点的方式横向扩展磁盘空间,最高可扩展至96,000GB,具体请参见分片集群实例
    说明:源实例的数据可通过DTS迁移至新的分片集群实例,详情请参见 从MongoDB副本集实例迁移至分片集群实例

更多信息

如果您的实例使用db.collection.remove命令删除了大量数据或没有整理过碎片,详情请参见整理物理空间碎片以提升磁盘利用率

适用于

  • 云数据库MongoDB

如果您的问题仍未解决,您可以在阿里云社区免费咨询,或提交工单联系阿里云技术支持。