温馨提示×

linux mongodb配置如何限流

小樊
38
2026-10-13 05:01:49
栏目: 云计算

在 Linux 上部署 MongoDB 时,“限流”通常可以从 网络层、系统资源层、MongoDB 自身配置层 三个层面来做。下面按常见场景给你一个实操清单。


一、MongoDB 自身层面(最推荐)

1️⃣ 限制连接数(防止连接打爆)

在 mongod.conf 中:

net:
  maxIncomingConnections: 1000

默认一般是 65536,生产环境建议按业务压测结果设置。

重启生效:

systemctl restart mongod

查看当前连接数:

db.serverStatus().connections

2️⃣ 慢查询限流(间接限流)

operationProfiling:
  mode: slowOp
  slowOpThresholdMs: 100

结合索引优化,避免慢查询占满资源。


3️⃣ 只读副本做读限流(读写分离)

  • 写只走 Primary
  • 读走 Secondary

连接字符串示例:

mongodb://host1,host2,host3/?readPreference=secondary

二、Linux 系统层限流(通用方案)

4️⃣ 使用 tc 限制 MongoDB 端口带宽(网络限流)

例如限制 27017 端口为 10Mbps:

tc qdisc add dev eth0 root tbf rate 10mbit burst 32kbit latency 400ms

或按端口(需要 iptables + tc 配合,较复杂)。


5️⃣ 使用 systemd 限制资源(CPU / 内存)

编辑:

systemctl edit mongod

加入:

[Service]
MemoryMax=4G
CPUQuota=200%

生效:

systemctl daemon-reload
systemctl restart mongod

6️⃣ 使用 ulimit 限制文件句柄

MongoDB 很吃 fd:

ulimit -n 64000

写入 /etc/security/limits.conf:

mongod soft nofile 64000
mongod hard nofile 64000

三、应用层限流(最可控)

7️⃣ 连接池限制(非常重要)

以 Node.js 为例:

mongoose.connect(uri, {
  maxPoolSize: 50
});

Java:

spring.data.mongodb.connection-pool.max-size=50

8️⃣ 业务层限流(令牌桶 / 哨兵)

  • Nginx 限流
  • Redis 计数器
  • Sentinel / Hystrix

四、常见误区

❌ MongoDB 没有内置 QPS 限流 ❌ maxIncomingConnections 不等于 QPS 限制 ❌ 只靠 Linux 限流容易误杀正常请求


五、推荐组合方案(生产实践)

✅ MongoDB:

  • maxIncomingConnections
  • 慢查询监控

✅ 系统:

  • systemd 资源限制
  • ulimit

✅ 应用:

  • 连接池
  • 接口级限流

如果你能补充说明:

  • MongoDB 版本
  • 单机 / 集群
  • 想限 连接数 / QPS / 带宽 / CPU
  • 是否容器(Docker / K8s)

我可以直接给你可复制的配置模板。

0 踩