- 首页 >
- 问答 >
-
云计算 >
- MongoDB在CentOS中的磁盘空间管理
MongoDB在CentOS中的磁盘空间管理
小樊
51
2025-11-23 19:32:06
MongoDB在CentOS中的磁盘空间管理
一 监控与定位
- 系统层监控:使用df -h查看挂载点使用率,配合du -sh /var/lib/mongodb /var/log/mongodb定位大目录与文件;持续观察增长趋势。
- 数据库层监控:在 mongo shell 中查看实例与库表占用,例如db.stats()、db.collection.stats(),识别异常大的集合与索引。
- 运行期指标:使用mongostat、mongotop观察插入/更新速率、锁、I/O 与热点集合,辅助判断空间增长来源。
- 容量阈值预警:当数据目录或日志所在分区使用率超过**80%**应介入排查与扩容,避免写入失败与性能劣化。
二 日志空间治理
- 启用滚动策略:在**/etc/mongod.conf**中配置
- systemLog.logRotate: 设为rename(重命名旧日志并新建同名日志)或reopen(关闭后重新打开,配合外部重命名/清理)。
- systemLog.destination: 设为file并配置systemLog.path。
- 手动轮转:
- 在 mongo shell 切换到admin执行:db.adminCommand({logRotate: 1});
- 或向 mongod 进程发送信号:kill -SIGUSR1 <mongod_pid>。
- 自动化:通过cron定时执行 logRotate(如每日/每周),避免日志无限增长。
- 清理旧日志:轮转后对旧文件进行压缩归档或删除,保留满足审计/排障需求的历史周期。
三 数据空间回收与碎片整理
- 安全删除:优先删除不再需要的集合/数据库(如 db.collection.drop()、db.runCommand({dropDatabase:1})),避免用 remove({}) 逐条删除导致碎片与回滚段膨胀。
- 碎片整理:
- 使用 WiredTiger 时,对集合执行compact可回收未使用空间并整理碎片:use ; db.runCommand({compact: “”});
- 对数据库执行:use ; db.runCommand({compact: “”});
- 注意:compact 会阻塞写入,建议在低峰期于副本集从节点先演练并安排维护窗口。
- 压缩存储:WiredTiger 默认启用压缩(如snappy),可在配置中显式设置以进一步降低磁盘占用(权衡 CPU)。
- 谨慎使用 smallfiles:仅在空间极度紧张时临时启用,数据/索引文件更小但数量更多,可能影响大库性能。
四 扩容与架构优化
- 垂直扩容:为数据盘或日志盘扩容;虚拟机/云盘先在管理平台扩容,系统识别后扩展分区与文件系统(如 LVM/resize2fs/xfs_growfs)。
- 数据目录迁移:将dbPath迁移至更大磁盘(先停库、拷贝数据、更新配置、校验权限后启动),确保mongod对目录有读写权限。
- 多盘与目录隔离:启用directoryPerDB=true将不同数据库目录拆分到不同磁盘/分区,缓解单盘容量与 I/O 瓶颈(变更前需完整备份并按规则迁移数据文件)。
- 水平扩展:对超大数据集采用分片(sharding),将数据分布到多台服务器,从根本上分摊磁盘压力。
- 高可用与维护:在副本集中先对从节点执行维护(如 compact),再切换主从,降低业务影响。
五 配置与运维要点
- 存储引擎与缓存:默认使用WiredTiger,根据内存合理设置storage.wiredTiger.engineConfig.cacheSizeGB(常见为物理内存的50%–75%,需兼顾操作系统与其他服务)。
- 持久化与性能:保持journal.enabled: true确保崩溃可恢复;仅在明确风险且可承受数据丢失的场景下才考虑关闭。
- 系统层优化:在 CentOS 上建议禁用透明大页(THP)、优化 I/O 调度与文件句柄限制,以提升 MongoDB 的磁盘与并发表现。
- 变更流程:涉及配置变更、迁移、compact 等高风险操作,务必先备份,在测试环境验证,并在维护窗口执行,变更后做数据一致性校验。