关于最近优雅草卓伊凡发布关于MongoDB的内容是由于我们的甲方上线了一个很老的产品,但是他的用户量极大,并且还有各种人搞事情,不断的来GJ,上线刚开始还能勉强撑着,但是随着用户量急剧上升,包括他们的收入订单各方面,以及请求次数的规模及上升,老古董即便是java +spring +redis 配 cdn 加灵活带宽都抗不住问题,而且上线后出问题后都很复杂,这核心有一点就是数据库,MongoDB 我们的版本是3.4.0 而云数据库也就是腾讯云买900多元一月 基础的云MongoDB数据库都是需要最低4.4版本的,这个可就难了,我们版本太老 ,升级的复杂度不亚于重构,于是在这个环境下我们测试环境已经安排在重构,但是生产环境顶着压力做优化,既然是做优化那么在这么老版本的情况下就有很多挑战,很庆幸在我们技术同事以及技术总监卓伊凡的带领下在7月23日终于得到了突破进展,中途有特别多的问题,由卓伊凡拆分一一记录和学习,让我们对数据的深度理解也非常有帮助,在过程中我们积累了很多知识可以逐步细化消化。
Loaded: loaded (/etc/systemd/system/mongod.service; enabled; preset: disabled) Active: activating (auto-restart) (Result: exit-code) since Wed 2025-07-23 21:38:10 CST; 1s ago Docs: https://docs.mongodb.org/manual Process: 238158 ExecStart=/opt/mongodb-3.4.0/bin/mongod —config /opt/mongodb-3.4.0/mongo.conf (code=exited, status=217/USER) Main PID: 238158 (code=exited, status=217/USER) CPU: 690us
在那天我们发现有不正常运行,检查了MongoDB 的运行状态。
由于在教科书中有写到我们不能用root帐号运行也会造成频繁掉线的问题,这就不得详细讲了
在生产环境中,禁止使用 root 用户运行 MongoDB 是一项重要的安全最佳实践。以下从安全风险、权限管理、故障排查和性能影响四个方面详细阐述原因:
/etc/passwd
、SSH 密钥)。mongodb
)确保数据文件(/data/mongodb
)和配置文件(/opt/mongodb-3.4.0
)的所有权清晰。LimitNOFILE
、MemoryMax
):[Service]
User=mongodb
Group=mongodb
LimitNOFILE=64000
MemoryMax=8G # 限制 MongoDB 最大内存使用
# 查看 mongodb 用户的所有操作
sudo ausearch -ua mongodb
ulimit
限制资源使用:# 编辑 /etc/security/limits.conf
mongodb hard nofile 64000
mongodb soft nofile 64000
其实这里 也存在一个文件描述 频繁导致掉线也解决的一个问题,我们单独一篇来讲。
我们这个地方 也是修改了
mongodb
)拒绝访问,触发频繁的权限检查。systemd
限制 MongoDB 内存使用可避免系统 OOM(Out of Memory):[Service]
MemoryMax=32G # 适用于 64GB 系统,防止 MongoDB 耗尽内存
sudo groupadd -r mongodb
sudo useradd -r -g mongodb -d /data/mongodb -s /bin/false mongodb
sudo chown -R mongodb:mongodb /data/mongodb
sudo chown -R mongodb:mongodb /opt/mongodb-3.4.0
[Service]
User=mongodb
Group=mongodb
WorkingDirectory=/data/mongodb
ExecStart=/opt/mongodb-3.4.0/bin/mongod --config /opt/mongodb-3.4.0/mongo.conf
这就不得不提到我之前写的蜻蜓I即时通讯 水银版搭建方法中有关于数据库的启动,因此这里非常不严谨
这个就非常的不对,
指标 | root 用户 | 专用用户 |
---|---|---|
文件权限冲突 | 高(可能覆盖系统文件) | 低(仅访问数据目录) |
系统安全风险 | 极高(权限提升攻击) | 低(最小权限原则) |
故障排查复杂度 | 高(权限错误被掩盖) | 低(权限问题直接暴露) |
资源隔离能力 | 无(可能耗尽系统资源) | 有(可通过 systemd 限制) |
审计追踪可行性 | 困难(与系统操作混淆) | 容易(专用用户日志清晰) |
建议:立即将 MongoDB 服务从 root 用户迁移至专用用户,并通过 systemd
确保服务以正确用户身份运行。
我们做到了最终 是以MongoDB 运行。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。