温馨提示×

centos mongodb性能调优实战

小樊
38
2025-11-17 19:41:41
栏目: 云计算

CentOS 上 MongoDB 性能调优实战

一 环境与硬件基线

  • 存储与文件系统:优先使用 SSD/NVMe,数据盘挂载选项加入 noatime,降低元数据写放大;如为机械盘,可评估合适的 I/O 调度策略(如 deadline/noop)。
  • 内存与 CPU:为 WiredTiger 缓存预留充足内存,结合业务并发选择 多核 CPU
  • 架构:读写分离与扩展优先采用 副本集;超大数据量或高并发写入再考虑 分片,并设计高基数、低更新频率的分片键以避免热点。
  • 基础检查:确认数据盘剩余空间充足、文件系统无错误、时钟同步(NTP)正常。

二 操作系统与内核参数

  • 资源限制:提升文件描述符与进程数上限,建议设置为 100000 以上(示例为 64000,可按需上调)。
  • 透明大页 THP:禁用 Transparent Huge Pages,减少内存管理抖动与延迟。
  • 磁盘与挂载:数据盘使用 noatime 挂载选项,减少不必要的访问时间更新。
  • 示例操作(需重启或重新登录生效):
    • 资源限制(/etc/security/limits.conf 或 /etc/security/limits.d/99-mongodb.conf)
      • mongodb soft nofile 100000
      • mongodb hard nofile 100000
      • mongodb soft nproc 100000
      • mongodb hard nproc 100000
    • 禁用 THP(/usr/lib/systemd/systemd-hugepages.service 或 grub 内核参数)
      • echo never > /sys/kernel/mm/transparent_hugepage/enabled
      • echo never > /sys/kernel/mm/transparent_hugepage/defrag
    • 挂载选项(/etc/fstab)
      • /dev/xvdb /data ext4 defaults,noatime 0 0
  • 说明:上述为通用起点,生产环境请结合监控逐步微调。

三 MongoDB 配置优化

  • 关键配置(/etc/mongod.conf,示例为 YAML):
    • 存储与缓存:WiredTiger 为默认引擎;将 storage.wiredTiger.engineConfig.cacheSizeGB 设为物理内存的约 50%–75%(需为实例独占内存);开启压缩(如 snappy)以节省空间、适度增加 CPU 使用。
    • 日志:启用 journal(生产建议保持开启);可按需调整 storage.wiredTiger.journal.commitIntervalMs(如 100 ms)以在吞吐与持久性间平衡。
    • 网络与访问:仅绑定内网地址(如 net.bindIp: 127.0.0.1,<内网IP>),端口 27017;开启鉴权(security.authorization: enabled)。
    • 复制与分片:副本集设置 replication.replSetName;分片设置 sharding.clusterRole
    • 示例片段:
      • storage:
        • engine: wiredTiger
        • wiredTiger:
          • engineConfig:
            • cacheSizeGB: 24
            • collectionConfig:
              • blockCompressor: snappy
          • journal:
            • enabled: true
            • commitIntervalMs: 100
      • net:
        • bindIp: 127.0.0.1,10.0.1.10
        • port: 27017
      • replication:
        • replSetName: rs0
      • sharding:
        • clusterRole: shardsvr
      • security:
        • authorization: enabled
  • 副本集与分片:合理设置 oplog 大小(常见为可用磁盘空间的约 5%,写入密集或窗口期长的业务可适当增大);分片键选择高基数、低更新频率、利于范围/均衡查询的字段。

四 索引与查询优化

  • 索引策略:为高频查询条件建立 单字段/复合索引;优先设计 覆盖索引 以减少回表;避免冗余与重复索引;定期审查与清理无用索引。
  • 查询写法:使用 投影 仅返回必要字段;避免 $or 导致索引失效;大数据集分页建议使用 limit/skip 或基于游标的方案,控制单次返回量。
  • 执行计划与诊断:使用 explain(“executionStats”) 分析扫描方式、索引命中与执行时间;结合 profiling 定位慢查询并迭代优化。

五 监控 维护与压测

  • 监控与告警:使用 mongostatmongotop 观察吞吐、连接、锁、页错误与读写耗时;结合 Prometheus + Grafana 搭建可视化与阈值告警。
  • 日志与维护:启用并轮转日志,防止日志无限增长;对高写入/更新频繁的集合,按需执行 reIndex 或重建碎片化严重的索引;定期清理无用数据,控制集合与索引规模。
  • 变更与压测:任何参数调整先在 测试环境验证,评估对延迟、吞吐与稳定性的影响,再灰度上线;上线后持续回归关键查询与基线压测。

0