MongoDB数据库高并发商业实践优化·运行优化之不可使用root账户进行MongoDB运行-优雅草卓伊凡

MongoDB数据库高并发商业实践优化·运行优化之不可使用root账户进行MongoDB运行-优雅草卓伊凡

引言

关于最近优雅草卓伊凡发布关于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: What is MongoDB? - Database Manual - MongoDB Docs
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 是一项重要的安全最佳实践。以下从安全风险、权限管理、故障排查和性能影响四个方面详细阐述原因:

一、安全风险:为什么不能用 root 运行 MongoDB?

1. 权限提升攻击风险
  • 任意文件读写:若 MongoDB 被攻击(如通过注入漏洞),root 权限的进程可直接访问/修改系统文件(如 /etc/passwd、SSH 密钥)。
  • 持久化后门:攻击者可利用 root 权限在系统启动脚本中植入后门,实现持久控制。
2. 最小权限原则失效
  • MongoDB 仅需读写数据目录和日志文件的权限,root 权限远超实际需求。
  • 遵循 最小权限原则(Least Privilege)可降低单点故障的影响范围。
3. 防御纵深缺失
  • 若 MongoDB 被攻破,普通用户权限的进程最多只能影响数据目录,而 root 权限将导致整个系统沦陷。

二、权限管理:为什么需要专用用户?

1. 文件所有权隔离
  • 专用用户(如 mongodb)确保数据文件(/data/mongodb)和配置文件(/opt/mongodb-3.4.0)的所有权清晰。
  • 避免与其他服务(如 MySQL、Nginx)的文件权限冲突。
2. 进程隔离
  • systemd 可基于用户限制资源使用(如 LimitNOFILEMemoryMax):
[Service]
User=mongodb
Group=mongodb
LimitNOFILE=64000
MemoryMax=8G  # 限制 MongoDB 最大内存使用
3. 审计追踪
  • 专用用户便于日志审计:
# 查看 mongodb 用户的所有操作
sudo ausearch -ua mongodb

三、故障排查:为什么 root 会掩盖问题?

1. 权限错误被隐藏
  • root 用户可绕过文件权限检查,导致配置错误(如错误的目录权限)在测试阶段不暴露,上线后普通用户无法启动服务。
2. 系统资源竞争
  • root 进程可能无限制占用系统资源(如内存、文件描述符),导致其他服务崩溃。
  • 专用用户可通过 ulimit 限制资源使用:
# 编辑 /etc/security/limits.conf
mongodb hard nofile 64000
mongodb soft nofile 64000

其实这里 也存在一个文件描述 频繁导致掉线也解决的一个问题,我们单独一篇来讲。

我们这个地方 也是修改了

四、性能影响:使用专用用户会变慢吗?

1. 无直接性能损耗
  • 进程权限本身不影响 MongoDB 性能,但错误的权限配置可能间接导致问题:
    • 例如,root 用户创建的文件可能被 MongoDB 用户(如 mongodb)拒绝访问,触发频繁的权限检查。
2. 资源限制优化性能
  • 通过 systemd 限制 MongoDB 内存使用可避免系统 OOM(Out of Memory):
[Service]
MemoryMax=32G  # 适用于 64GB 系统,防止 MongoDB 耗尽内存
3. 权限与磁盘 I/O
  • 专用用户确保文件权限一致性,避免因权限问题导致的磁盘 I/O 性能下降。

五、最佳实践:如何正确配置专用用户?

1. 创建专用用户和组
sudo groupadd -r mongodb
sudo useradd -r -g mongodb -d /data/mongodb -s /bin/false mongodb
2. 设置正确的文件权限
sudo chown -R mongodb:mongodb /data/mongodb
sudo chown -R mongodb:mongodb /opt/mongodb-3.4.0
3. 配置 systemd 服务文件
[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 vs 专用用户的差异

指标

root 用户

专用用户

文件权限冲突

高(可能覆盖系统文件)

低(仅访问数据目录)

系统安全风险

极高(权限提升攻击)

低(最小权限原则)

故障排查复杂度

高(权限错误被掩盖)

低(权限问题直接暴露)

资源隔离能力

无(可能耗尽系统资源)

有(可通过 systemd 限制)

审计追踪可行性

困难(与系统操作混淆)

容易(专用用户日志清晰)

七、总结:为什么必须使用专用用户?

  1. 安全层面:降低权限提升攻击风险,遵循最小权限原则。
  2. 管理层面:实现进程隔离、文件权限清晰和审计追踪。
  3. 故障排查:避免权限错误被隐藏,提高问题定位效率。
  4. 性能影响:正确配置下无负面影响,反而可通过资源限制优化性能。

建议:立即将 MongoDB 服务从 root 用户迁移至专用用户,并通过 systemd 确保服务以正确用户身份运行。

我们做到了最终 是以MongoDB 运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916370.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916370.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

戴尔电脑 Linux 安装与配置指南_导入mysql共享文件夹

本指南将详细介绍在戴尔电脑上安装 Linux 操作系统的步骤,以及后续的重要配置,包括系统选择、安装流程、MySQL 数据恢复、网络配置、文件共享和远程维护等。步骤清晰且配有命令行示例和配置文件示例,适合初中级用户参考。1、Linux 系统选择与…

昇思学习营-DeepSeek-R1-Distill-Qwen-1.5B 模型LoRA微调学习心得

LoRA微调:加入参数式微调冻结原始网络参数,对Attention层中QKV等添加旁支,包含两个低维度的矩阵A和矩阵B,微调过程中仅更新A、B 矩阵效果:训练参数被大幅降低,资源消耗较低。对attention的参数加入如下图所…

彩色转灰度的核心逻辑:三种经典方法及原理对比

灰度实验将彩色图像转换为灰度图像的过程称为灰度化,这种做法在图像处理和计算机视觉领域非常常见。灰度图与彩色图最大的不同就是:彩色图是由R、G、B三个通道组成,而灰度图只有一个通道,也称为单通道图像,所以彩色图转…

Spring Boot 项目启动自动执行逻辑的最佳实践:掌握 CommandLineRunner

前言 Spring Boot 启动阶段,总有些操作迫不及待冲在前线:配置要加载,数据要准备,日志要抢首发,仿佛个个争当“启动 MVP”。如果你也想让项目一启动就自动开工,少写点手动触发的“苦力逻辑”,那 CommandLineRunner 就是你的得力助手。它像那个永远第一个打卡的同事,不喝…

高可用集群KEEPALIVED的详细部署

一.高可用集群 1.1 集群类型 LB:Load Balance 负载均衡 LVS/HAProxy/nginx(http/upstream, stream/upstream) HA:High Availability 高可用集群 数据库、Redis SPoF: Single Point of Failure,解决单点故障 HPC&#x…

[论文阅读] 人工智能 + 软件工程 | NoCode-bench:评估LLM无代码功能添加能力的新基准

NoCode-bench:评估LLM无代码功能添加能力的新基准 论文:NoCode-bench: A Benchmark for Evaluating Natural Language-Driven Feature Addition 研究背景:当AI尝试给软件"加新功能",我们需要一张靠谱的"考卷"…

【Git知识】Git 常用知识集合之基础--分支系统与 Tag 标签机制

🧰 Git 常用知识集合Git 是程序员的“时间机器”。这份手册帮你从入门到精通,把 Git 玩明白。1️⃣ Git 基础操作流程 📌 三步走流程:添加 → 提交 → 推送 git add . # 把所有修改加入暂存区 git commit -m …

深入解析 Spark:关键问题与答案汇总

在大数据处理领域,Spark 凭借其高效的计算能力和丰富的功能,成为了众多开发者和企业的首选框架。然而,在使用 Spark 的过程中,我们会遇到各种各样的问题,从性能优化到算子使用等。本文将围绕 Spark 的一些核心问题进行…

Python-初学openCV——对openCV的简单使用

一、概述1、简单介绍OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,旨在为实时图像处理提供强大的功能。它由Intel开发,现由开源社区维护。OpenCV 提供了跨平台的解决方案,支持 Windows、Linu…

去中心化时代的通信革命:briefing与cpolar技术融合带来的安全范式革新

文章目录前言1.关于briefing2.本地部署briefing3.使用briefing4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定briefing公网地址前言 数字协作本该是提升效率的过程,却被这些数据管理问题不断困扰:平台条款中的监控声明、跨网络环境的接入障碍、…

GitHub新手生存指南:AI项目版本控制与协作实战

点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 代码仓库创建 分支管理 PR提交 开源项目复现 读者收获:掌握团队开发必备技能…

Axios封装以及添加拦截器

在前端开发中,http请求层的封装可以极大提升代码的复用性和可维护性,本文将完整的用axios封装接口请求,配置请求与响应拦截器,封装统一的请求方法全过程。封装的目的和思路在项目直接用axios发送请求当然没问题,但是如…

C语言中奇技淫巧04-仅对指定函数启用编译优化

相信很多人使用GCC编译代码时,都会接触到gcc -O0/1/2/3/s,知道它可以对工程进行全局优化。 事实上,除了全局优化外,使用GCC扩展方式,我们还可以仅对部分关键函数实施差异化编译优化。 在GCC编译器中,attrib…

HTML Style 对象深度解析:从基础到高级应用

一、Style 对象的核心概念定义与作用 Style 对象是 HTML DOM 中用于操作元素内联样式的接口,通过 element.style 访问。它允许动态修改元素的 CSS 属性,但仅能直接影响内联样式(即通过 style 属性直接写在标签中的样式)。与外部样…

【C++】定义常量

在 C 中&#xff0c;有两种简单的定义常量的方式&#xff1a; 使用 #define 预处理器。使用 const 关键字。 #define 预处理器 #include <iostream> using namespace std;#define LENGTH 10 #define WIDTH 5 #define NEWLINE \nint main() {int area; area LENGTH …

基于遗传算法的多无人车协同侦察与安全保护策略优化

基于遗传算法的多无人车协同侦察与安全保护策略优化 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff0c;觉得好请收藏。点击跳转到网站。 1. 引言 1.1 研究背景与意义 随着无人系统技术的快速发…

python面向对象编程详解

面向对象编程&#xff08;OOP&#xff09;是一种以对象为核心的编程范式。Python全面支持OOP&#xff0c;主要包含以下核心概念&#xff1a;一、类与对象1.类(Class)类是创建对象的模板或蓝图&#xff0c;它定义了对象的属性和方法。class Dog:# 类属性&#xff08;所有实例共享…

快速入门Socket编程——封装一套便捷的Socket编程——导论

快速入门Socket编程——封装一套便捷的Socket编程——导论 前言 ​ 这里是笔者打算做的Socket编程的第二部分&#xff0c;也就是核心的讨论我们Socket编程本身。 导论 ​ 我们知道&#xff0c;一个经典的服务器套接字的处理流程是如下的&#xff1a; 创建一个指定传输层和网络层…

【Mermaid 离线工具】Mermaid 流程图生成器 - 高清PNG输出,一键生成专业级流程图!

文章目录 Mermaid 流程图生成器(离线版本):高效绘图,离线也能玩转专业可视化 一、Mermaid:文本绘图的 “魔法语法” 二、离线版生成器:功能与优势解析 (一)离线可用,场景更灵活 (二)操作流程:简单五步,产出专业图表 (三)界面设计:简洁直观,降低使用门槛 三、应…

haproxy原理及实战部署

一、负载均衡 负载均衡是网络架构和分布式系统中至关重要的技术&#xff0c;其核心作用是将大量的并发请求或数据流量合理分配到多个服务器&#xff08;或其他资源节点&#xff09;上&#xff0c;从而解决单节点压力过大、资源利用率低、系统稳定性差等问题。 作用1. 提高系统吞…