温馨提示×

centos mongodb配置如何优化

小樊
35
2026-10-23 10:17:18
栏目: 云计算

在 CentOS 上优化 MongoDB 配置,通常从系统层、MongoDB 配置、存储与索引、监控几个方面入手。下面给你一套实用、可落地的优化建议(适用于 CentOS 7/8 + MongoDB 4.x/5.x/6.x)。


一、系统层优化(CentOS)

1. 关闭 Transparent Huge Pages(非常重要)

MongoDB 官方明确要求关闭 THP,否则会导致延迟抖动。

echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

永久生效(systemd):

cat > /etc/systemd/system/disable-thp.service <<EOF
[Unit]
Description=Disable Transparent Huge Pages

[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo never > /sys/kernel/mm/transparent_hugepage/enabled && echo never > /sys/kernel/mm/transparent_hugepage/defrag"

[Install]
WantedBy=multi-user.target
EOF

systemctl enable disable-thp
systemctl start disable-thp

2. 调整系统资源限制

编辑 /etc/security/limits.conf:

mongod soft nofile 64000
mongod hard nofile 64000
mongod soft nproc 32000
mongod hard nproc 32000

如果使用 systemd,还需在: /etc/systemd/system/mongod.service.d/limits.conf

[Service]
LimitNOFILE=64000
LimitNPROC=32000

然后:

systemctl daemon-reexec

3. 磁盘与文件系统

  • 推荐使用 XFS(MongoDB 官方推荐)
  • 挂载选项:
/dev/sdb /data xfs defaults,noatime,nodiratime 0 0
  • 尽量使用 SSD / NVMe
  • 分离:
    • 数据盘
    • 日志盘(可选)

4. 关闭 SELinux(生产谨慎)

开发/测试环境:

setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

生产环境建议配置策略而不是关闭。


二、MongoDB 配置文件优化(mongod.conf)

常见路径:/etc/mongod.conf

1. 基础优化示例

storage:
  dbPath: /data/db
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 8   # 物理内存的 50%~70%
    collectionConfig:
      blockCompressor: snappy

systemLog:
  destination: file
  path: /var/log/mongodb/mongod.log
  logAppend: true

net:
  port: 27017
  bindIp: 0.0.0.0
  maxIncomingConnections: 65536

operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 100

2. WiredTiger 缓存

storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 8

经验值:

  • 内存 16G → cacheSizeGB = 8~10
  • 专机专用,不要超过 70% 内存

3. 写入与日志

  • 开启 journal(默认)
  • 对写入量极大场景:
storage:
  journal:
    commitIntervalMs: 100

三、索引与查询优化

1. 必做

  • 避免全表扫描
  • 使用 explain("executionStats")
  • 复合索引遵循 ESR 原则(等值 → 排序 → 范围)

2. 查看慢查询

db.setProfilingLevel(1, 100)
db.system.profile.find().sort({ts:-1}).limit(10)

四、副本集 & 高可用优化

如果是生产环境:

  • 至少 3 节点副本集
  • 使用 w: "majority"
  • 读请求可分摊到 secondary(视业务一致性要求)
rs.status()
rs.conf()

五、监控与调优工具

1. 内置

db.serverStatus()
db.stats()
mongostat
mongotop

2. 外部

  • Prometheus + Grafana
  • MongoDB Atlas(云)
  • Percona Monitoring

六、常见性能问题速查

问题 原因 解决
CPU 高 缺索引 建索引
磁盘 IO 高 日志/数据同盘 分离
延迟抖动 THP 关闭
内存爆 cacheSize 过大 调小
连接数满 连接未释放 连接池

七、示例:标准生产推荐配置(16G 内存)

storage:
  dbPath: /data/db
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 10
net:
  maxIncomingConnections: 65536
operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 50

如果你愿意,可以告诉我:

  • MongoDB 版本
  • CentOS 版本
  • 单机 / 副本集 / 分片
  • 主要业务(读多 / 写多)

我可以直接帮你定制一份 mongod.conf + 系统参数方案。

0 踩