温馨提示×

centos mongodb怎样优化配置

小樊
41
2026-09-18 00:53:17
栏目: 云计算

在 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

永久生效(CentOS 7):

cat > /etc/rc.d/rc.local <<EOF
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
EOF
chmod +x /etc/rc.d/rc.local

2. 调整 ulimit(文件描述符 & 进程数)

编辑 /etc/security/limits.conf

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

3. 磁盘 I/O 调度

如果是 SSD:

echo noop > /sys/block/sda/queue/scheduler

(CentOS 8 多为 none


4. 关闭 swap(或降低 swappiness)

sysctl -w vm.swappiness=1

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

1. 绑定 IP & 安全

net:
  bindIp: 0.0.0.0   # 生产建议只绑内网IP
  port: 27017

2. 存储引擎(WiredTiger)

storage:
  dbPath: /data/mongodb
  journal:
    enabled: true
  wiredTiger:
    engineConfig:
      cacheSizeGB: 8   # 建议 = 内存的 50%~70%
    collectionConfig:
      blockCompressor: snappy

⚠️ cacheSizeGB 不要超过物理内存的 80%


3. 写关注 & 日志

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

4. 连接数限制

net:
  maxIncomingConnections: 65536

三、索引与查询优化(最关键)

1. 必须建索引

db.orders.createIndex({ user_id: 1 })
db.orders.createIndex({ created_at: -1 })

2. 避免全表扫描

explain 检查:

db.orders.find({user_id: 123}).explain("executionStats")

3. 使用复合索引(最左前缀)

db.orders.createIndex({ user_id: 1, status: 1 })

四、副本集 / 集群优化(如适用)

  • 至少 3 节点副本集
  • 写关注:
writeConcern: { w: "majority", j: true }
  • 读偏好:
readPreference: secondaryPreferred

五、监控与调优工具

1. 自带命令

db.serverStatus()
db.currentOp()

2. 慢查询

operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 100

3. 监控工具

  • mongostat
  • mongotop
  • Prometheus + Grafana
  • Atlas(云)

六、常见性能问题速查

问题 原因 解决
CPU 高 全表扫描 加索引
磁盘 IO 高 journal / 写放大 SSD + 缓存
内存爆 cacheSize 过大 调小
连接满 连接未释放 连接池

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

  • CentOS 版本
  • MongoDB 版本
  • 单机 / 副本集 / 分片
  • 数据量 & 主要业务场景

我可以给你更针对性的配置示例

0