关于最近优雅草卓伊凡发布关于MongoDB的内容是由于我们的甲方上线了一个很老的产品,但是他的用户量极大,并且还有各种人搞事情,不断的来GJ,上线刚开始还能勉强撑着,但是随着用户量急剧上升,包括他们的收入订单各方面,以及请求次数的规模及上升,老古董即便是java +spring +redis 配 cdn 加灵活带宽都抗不住问题,而且上线后出问题后都很复杂,这核心有一点就是数据库,MongoDB 我们的版本是3.4.0 而云数据库也就是腾讯云买900多元一月 基础的云MongoDB数据库都是需要最低4.4版本的,这个可就难了,我们版本太老 ,升级的复杂度不亚于重构,于是在这个环境下我们测试环境已经安排在重构,但是生产环境顶着压力做优化,既然是做优化那么在这么老版本的情况下就有很多挑战,很庆幸在我们技术同事以及技术总监卓伊凡的带领下在7月23日终于得到了突破进展,中途有特别多的问题,由卓伊凡拆分一一记录和学习,让我们对数据的深度理解也非常有帮助,在过程中我们积累了很多知识可以逐步细化消化。
其实本篇讲解的是基础 安装systemd 以及MongoDB 的关系
但是 我们的报错 是 检查 服务状态,提示 sudo systemctl status mongod ● mongod.service - MongoDB Database Server Loaded: loaded (/etc/systemd/system/mongod.service; enabled; preset: disabled) Active: activating (auto-restart) (Result: exit-code) since Wed 2025-07-23 21:58:59 CST; 2s ago Docs: https://docs.mongodb.org/manual Process: 245870 ExecStart=/opt/mongodb-3.4.0/bin/mongod —config /opt/mongodb-3.4.0/mongo.conf (code=exited, status=100) Main PID: 245870 (code=exited, status=100) Tasks: 62 (limit: 403159) Memory: 86.3M CPU: 27ms CGroup: /system.slice/mongod.service └─245321 /opt/mongodb-3.4.0/bin/mongod —config /opt/mongodb-3.4.0/mongo.conf 是否成功
这个反应的 是更多的问题,当然下篇讲
根据最新的状态输出,MongoDB 服务 仍然未能成功启动。状态显示为 activating (auto-restart)
且退出码为 status=100
,表明 MongoDB 在启动过程中遇到了 存储引擎初始化失败 或 数据文件损坏 的问题。
Systemd 是现代 Linux 系统的初始化系统和服务管理器,它取代了传统的 SysV init 系统,具有以下核心特性:
journalctl
集中查看日志典型的 MongoDB systemd 单元文件(/lib/systemd/system/mongod.service
):
[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target
[Service]
User=mongodb
Group=mongodb
Environment="OPTIONS=--quiet -f /etc/mongod.conf"
ExecStart=/usr/bin/mongod $OPTIONS
ExecStartPre=/usr/bin/mkdir -p /var/lib/mongodb
ExecStartPre=/usr/bin/chown mongodb:mongodb /var/lib/mongodb
ExecStartPre=/usr/bin/chmod 0755 /var/lib/mongodb
PermissionsStartOnly=true
PIDFile=/var/run/mongodb/mongod.pid
# 文件描述符限制
LimitNOFILE=64000
LimitNPROC=64000
# 核心转储配置
LimitCORE=infinity
# 进程特性
PrivateTmp=true
# 重启策略
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
sudo systemctl start mongod
底层原理:
ExecStartPre
指令ExecStart
sudo systemctl stop mongod
底层过程:
sudo systemctl restart mongod
等效于:
sudo systemctl stop mongod
sudo systemctl start mongod
由于我已经全部处理好了 因此 现在 我可以直接执行查看
sudo systemctl reload mongod
sudo systemctl status mongod
典型输出解析:
● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2025-07-25 16:00:00 CST; 2h ago
Docs: https://docs.mongodb.org/manual
Main PID: 1234 (mongod)
Tasks: 28 (limit: 4915)
Memory: 1.2G
CGroup: /system.slice/mongod.service
└─1234 /usr/bin/mongod --quiet --config /etc/mongod.conf
sudo systemctl enable mongod
sudo systemctl disable mongod
journalctl -u mongod -f # 实时日志
journalctl -u mongod --since "2025-07-25 16:00:00" # 时间范围查询
sudo systemctl edit mongod
添加:
[Service]
LimitNOFILE=128000
sudo systemctl stop mongod
sudo /usr/bin/mongod --config /etc/mongod.conf --verbose
[Service]
ProtectSystem=full
PrivateDevices=true
NoNewPrivileges=true
特性 | Systemd | SysV init |
---|---|---|
启动速度 | 快(并行启动) | 慢(顺序启动) |
服务依赖 | 精确控制 | 简单排序 |
资源管理 | cgroups 集成 | 无 |
日志系统 | 结构化日志(journald) | 文本日志 |
状态监控 | 实时状态查询 | 仅运行/停止状态 |
配置复杂度 | 集中配置(.service) | 分散的init脚本 |
sudo systemctl status mongod
journalctl -xe
sudo netstat -tulnp | grep 27017
sudo mongod --config /etc/mongod.conf --fork --logpath /var/log/mongodb/validate.log
复制sudo chown -R mongodb:mongodb /var/lib/mongodb
systemd 管理 MongoDB 提供了现代 Linux 系统下的标准化、可靠的服务管理方案
以前的 启动命令 方式 为 sh stop sh start 是错的 至少是不严谨的 至少 在我们本次商业实战中是不行的
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。