当前位置: 首页 > news >正文

Ubuntu 18.04 安装 MongoDB 实战指南:系统兼容性与底层依赖修复

1. 项目概述:为什么在 Ubuntu 18.04 上装 MongoDB 还值得专门讲?

MongoDB 是我过去十年里搭过最多次的数据库——从早期的 3.2 版本到现在的 6.x,几乎每个微服务、内容聚合系统、日志分析平台都绕不开它。但很多人一提“Ubuntu 18.04 安装 MongoDB”,第一反应是:“这系统不是 2018 年发布的吗?早该淘汰了?”——恰恰相反,我在金融后台、工业网关、教育私有云等真实场景中,仍频繁遇到 Ubuntu 18.04 的稳定部署需求:它被固化在某款国产工控机固件里,被嵌入某套已停更但仍在运行的教务系统镜像中,或是客户明确要求“不升级内核、不变更基础环境”的合规审计场景。这种“老系统+新需求”的组合,才是运维和开发最常踩坑的地方。

你搜到的那些热词——systemd has not been booted as init systemsudo: apt: command not foundufw allow samba command not found——根本不是 MongoDB 自身的问题,而是 Ubuntu 18.04 环境本身存在三重隐性断层:包管理器状态异常、init 系统被替换、防火墙工具缺失或误配。这些错误提示背后,往往藏着一个被忽略的事实:这台机器可能不是标准安装的 Ubuntu 18.04,而是从某个精简版 Docker 镜像拉起的容器,或是用debootstrap手动构建的最小化 rootfs,甚至是从旧服务器克隆过来、中途被手动删过systemd的残缺系统。我亲手处理过 7 台报systemd workingdir错误的机器,其中 5 台根本没装systemd,而是用sysvinitrunit启动的;还有 2 台是因为/etc/systemd/system/multi-user.target.wants/目录权限被误设为root:root700,导致systemctl enable失败却只报模糊路径错误。

所以这篇不是“照着官网抄一遍”的安装指南,而是以 Ubuntu 18.04 为切口,带你穿透表层命令,直击 Linux 系统底层依赖链:apt怎么依赖dpkg/var/lib/dpkg/status的完整性,systemd如何通过PID 1绑定整个进程树,ufw又为何必须基于iptables内核模块才能生效。你会看到,装一个 MongoDB,实际是在校准整套系统的可信基线。如果你正面对一台报错command 'nvidia-smi' not found却又莫名其妙出现在 MongoDB 安装日志里的服务器——别慌,那只是apt update时顺带刷出的显卡驱动建议,和数据库毫无关系,但它暴露了系统源配置混乱这个更深层问题。本文所有步骤,均经我在 VMware Workstation 16 + Ubuntu 18.04.6 Server(minimal install)实测验证,拒绝任何“理论上可行”的假设。

2. 环境诊断与前置修复:先让系统自己“说真话”

很多安装失败,根本不是 MongoDB 的锅,而是系统连基本健康状态都没达标。我习惯在敲第一个apt命令前,强制执行一套“三问诊断法”:问包管理器是否在线、问 init 系统是否就位、问网络策略是否可控。这三步耗时不到 90 秒,却能避开 80% 的后续故障。

2.1 包管理器状态自检:apt不是命令,而是一套精密齿轮

当你看到sudo: apt: command not found,第一反应不该是重装apt,而是检查/usr/bin/apt是否真的缺失,还是PATH被污染。执行:

which apt echo $PATH ls -l /usr/bin/apt*

如果which apt无输出,但ls -l /usr/bin/apt*显示apt-getapt-cache存在,说明apt命令本身被删了——这是 Ubuntu 18.04 minimal 安装的常见现象,aptapt包提供的符号链接,而 minimal 镜像默认不装它。此时执行:

sudo apt-get update && sudo apt-get install -y apt

但注意:如果apt-get也报错,比如Could not open lock fileUnable to locate package apt,那就进入更深层诊断。先查锁文件:

ls -l /var/lib/dpkg/lock* /var/cache/apt/archives/lock

若存在lock-frontend,说明上次apt操作被强制中断。安全清理方式是:

sudo rm -f /var/lib/dpkg/lock* /var/cache/apt/archives/lock sudo dpkg --configure -a

提示:dpkg --configure -a是修复apt依赖链断裂的终极手段,它会重新执行所有未完成的包配置脚本。我曾用它救活一台因断电导致libc6升级中断的服务器,比重装系统快 3 小时。

如果apt-get updateFailed to fetch,立刻检查/etc/apt/sources.list。Ubuntu 18.04 默认源在 2023 年 4 月已归档,官方推荐切换至archive.ubuntu.com的旧版镜像。编辑文件:

sudo sed -i 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list sudo sed -i 's/security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list

然后执行sudo apt-get update。若仍失败,用curl -I http://old-releases.ubuntu.com/ubuntu/dists/bionic/测试网络连通性——这里暴露了另一个高频问题:某些企业内网禁用了http,只允许https。此时需手动添加https源:

echo "deb https://old-releases.ubuntu.com/ubuntu/ bionic main restricted universe multiverse" | sudo tee /etc/apt/sources.list.d/bionic-old.list echo "deb https://old-releases.ubuntu.com/ubuntu/ bionic-updates main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list.d/bionic-old.list echo "deb https://old-releases.ubuntu.com/ubuntu/ bionic-security main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list.d/bionic-old.list sudo apt-get update

2.2 Init 系统真实性验证:systemd不是可选插件,而是操作系统骨架

System has not been booted with systemd as init system (pid 1)这个错误,90% 的人会直接去装systemd,但这是危险操作。先确认事实:

ps -p 1 -o comm= cat /proc/1/cmdline | tr '\0' '\n'

如果输出是initrunit,说明这台机器压根没用systemd启动——强行安装systemd可能导致系统无法启动。Ubuntu 18.04 官方 ISO 默认使用systemd,但以下情况会导致 PID 1 不是systemd

  • 使用docker run --init启动的容器(PID 1 是tini
  • debootstrap构建的 chroot 环境(PID 1 是bash
  • 手动修改 GRUB 启动参数,添加init=/bin/bash

此时正确做法是:接受当前 init 系统,改用兼容方案。MongoDB 官方.deb包强制依赖systemd,但你可以绕过它,用tar.gz方式安装:

# 下载 MongoDB 4.0.28(Ubuntu 18.04 兼容的最后稳定版) wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1804-4.0.28.tgz tar -zxvf mongodb-linux-x86_64-ubuntu1804-4.0.28.tgz sudo mv mongodb-linux-x86_64-ubuntu1804-4.0.28 /opt/mongodb sudo useradd -r -u 1001 -d /opt/mongodb -s /bin/false mongodb sudo chown -R mongodb:mongodb /opt/mongodb

然后创建简易启动脚本/opt/mongodb/start.sh

#!/bin/bash # /opt/mongodb/start.sh export PATH="/opt/mongodb/bin:$PATH" mongod --config /etc/mongod.conf --fork

赋予执行权限并手动启动:

sudo chmod +x /opt/mongodb/start.sh sudo /opt/mongodb/start.sh

注意:此方案放弃systemd的进程守护、日志集成、依赖管理能力,但换来的是 100% 的 init 系统兼容性。我在某电力 SCADA 系统中用此法稳定运行 MongoDB 3 年,从未因重启失效。

2.3 防火墙策略探针:ufw不是开关,而是 iptables 的翻译器

sudo ufw allow samba command not found这类错误,本质是ufw工具未安装或iptables内核模块缺失。先验证:

ufw status verbose lsmod | grep ip_tables

如果ufw命令不存在,安装它:

sudo apt-get install -y ufw

如果lsmod | grep ip_tables无输出,说明内核未加载防火墙模块(常见于容器或精简内核)。此时ufw无法工作,但iptables命令可能仍可用:

sudo iptables -L -n

iptables可用,则直接放行 MongoDB 端口(默认 27017):

sudo iptables -A INPUT -p tcp --dport 27017 -j ACCEPT sudo iptables-save | sudo tee /etc/iptables/rules.v4

实操心得:在 Ubuntu 18.04 上,ufw的规则最终编译为iptables规则。我见过太多人反复执行sudo ufw allow 27017却发现端口不通,最后发现是ufw状态为inactive,而iptables规则被其他安全软件清空。因此,我的黄金法则:永远用iptables -L -n查看实时生效规则,而不是依赖ufw status

3. MongoDB 安装与配置:从二进制到生产就绪的四层加固

Ubuntu 18.04 的 MongoDB 安装有两条主路径:官方 APT 仓库(推荐用于标准系统)和手动二进制部署(推荐用于受限环境)。无论哪种,核心目标不是“跑起来”,而是“跑得稳、管得住、防得住”。我将整个过程拆解为四层加固:基础安装层 → 配置定制层 → 权限控制层 → 启动治理层

3.1 APT 仓库安装:用官方源避免版本幻觉

MongoDB 官方不再为 Ubuntu 18.04 提供新包,但 4.0.x 系列仍受支持。关键在于导入正确的 GPG 密钥和仓库地址:

# 导入公钥(注意:Ubuntu 18.04 需用 legacy key) wget -qO - https://www.mongodb.org/static/pgp/server-4.0.asc | sudo apt-key add - # 添加仓库(必须用 bionic,不能用 focal) echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-4.0.list sudo apt-get update sudo apt-get install -y mongodb-org=4.0.28 mongodb-org-server=4.0.28 mongodb-org-shell=4.0.28 mongodb-org-mongos=4.0.28 mongodb-org-tools=4.0.28

为什么锁死4.0.28?因为apt install mongodb-org默认会装最新版(如 4.4),而 4.4 不支持 Ubuntu 18.04 的 glibc 版本,安装后mongod启动直接报GLIBC_2.28 not found。我曾因此在凌晨三点重装整套监控系统——教训是:永远显式指定版本号,用apt-cache policy mongodb-org查看可用版本

安装后,systemd服务已注册,但默认未启用。此时不要急着start,先做配置审计。

3.2 配置文件深度定制:/etc/mongod.conf不是模板,而是安全契约

Ubuntu 18.04 的默认配置/etc/mongod.conf存在三个高危默认值,必须修改:

  1. 绑定地址(bindIp):默认127.0.0.1,看似安全,实则阻碍集群通信。生产环境必须显式声明:

    net: port: 27017 bindIp: 127.0.0.1,192.168.1.100 # 替换为服务器内网IP
  2. 存储引擎(storage.engine):默认wiredTiger正确,但需强化缓存:

    storage: engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 2 # 设为物理内存的 50%,避免 OOM
  3. 日志与审计:默认不开启审计日志,无法追溯敏感操作:

    systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log auditLog: destination: file format: JSON path: /var/log/mongodb/audit.log

创建日志目录并授权:

sudo mkdir -p /var/log/mongodb sudo chown -R mongodb:mongodb /var/log/mongodb

实操心得:cacheSizeGB设置不当是 Ubuntu 18.04 上 MongoDB OOM Killer 的头号原因。我监控过 12 台同配置服务器,当cacheSizeGB设为4(物理内存 8GB)时,3 台在高并发写入时被oom_reaper杀死。解决方案是:free -h查总内存,取total * 0.4作为cacheSizeGB,向下取整

3.3 权限体系构建:从db.createUser()到 RBAC 的最小权限实践

MongoDB 4.0 默认关闭认证,但生产环境必须开启。关键陷阱在于:认证开启后,localhost 异常访问权限自动失效。这意味着你不能先mongod启动再连上去建用户,必须分两步:

第一步:临时关闭认证,创建管理员

# 编辑 /etc/mongod.conf,注释掉 security.authorization # security: # authorization: enabled sudo systemctl restart mongod mongo --eval "db.runCommand({createUser: 'admin', pwd: 'StrongPass123!', roles: [{role: 'root', db: 'admin'}]})"

第二步:启用认证,重启服务

# 取消注释,保存 /etc/mongod.conf security: authorization: enabled sudo systemctl restart mongod

此时用管理员连接:

mongo -u admin -p StrongPass123! --authenticationDatabase admin

注意:--authenticationDatabase admin是强制参数,漏掉会报Authentication failed。我见过最典型的错误是:用户在test库建用户,却用admin库认证——MongoDB 的角色是跨库的,但认证必须指向用户所在的库。

为应用创建最小权限用户(以订单库为例):

use orderdb db.createUser({ user: "orderapp", pwd: "AppPass456!", roles: [ { role: "readWrite", db: "orderdb" }, { role: "read", db: "productdb" } // 只读商品库 ] })

3.4 启动治理与服务注册:systemd不是启动器,而是生命周期管家

APT 安装后,mongod服务由systemd管理,但默认配置缺少关键防护。编辑服务文件:

sudo systemctl edit mongod

输入以下内容(覆盖默认设置):

[Service] # 防止内存溢出被 kill MemoryLimit=4G # 限制 CPU 使用率(避免拖垮整机) CPUQuota=75% # 设置工作目录,解决 workingdir 错误 WorkingDirectory=/var/lib/mongodb # 重启策略:失败 5 次后停止,避免无限循环 Restart=on-failure RestartSec=30 StartLimitIntervalSec=600 StartLimitBurst=5

重载配置并启用服务:

sudo systemctl daemon-reload sudo systemctl enable mongod sudo systemctl start mongod

验证状态:

sudo systemctl status mongod -l sudo journalctl -u mongod -n 50 --no-pager

提示:journalctl -u mongod -n 50是排查启动失败的黄金命令。我处理过一次mongod启动超时,日志显示Failed to create directory /data/db,根源是/data分区磁盘满——systemdTimeoutStartSec默认 90 秒,超时后直接标记为failed,而真实错误被淹没。因此,永远用-n 50查最近 50 行,而非依赖status的摘要

4. 核心功能验证与生产就绪检查:用真实场景压力测试

安装完成不等于可用。我坚持用一套“五维验证法”:连通性 → 基础操作 → 权限隔离 → 故障恢复 → 性能基线。每一步都模拟真实业务场景,拒绝“Hello World”式测试。

4.1 连通性验证:不只是telnet,而是全链路握手

在客户端机器(非 MongoDB 服务器)执行:

# 测试 TCP 连通性 nc -zv 192.168.1.100 27017 # 测试 MongoDB 协议握手(比 telnet 更精准) echo -e "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" | nc 192.168.1.100 27017 2>/dev/null | head -c 20 | xxd

如果返回类似00000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................,说明协议层已通。否则检查ufwiptables规则。

4.2 基础操作验证:用mongoshell 执行原子事务

连接后,执行一组不可分割的操作,验证数据一致性:

// 创建测试库和集合 use testdb db.testcol.insertOne({name: "test", ts: new Date()}) // 查询并更新,验证读写能力 db.testcol.findOneAndUpdate( {name: "test"}, {$set: {updated: true, ts: new Date()}}, {returnNewDocument: true} ) // 删除并确认 db.testcol.deleteMany({}) db.testcol.countDocuments({}) // 应返回 0

注意:findOneAndUpdate{returnNewDocument: true}参数在 4.0 中必须显式指定,否则返回旧文档。这是新手常踩的坑。

4.3 权限隔离验证:用不同用户角色交叉测试

开两个终端,分别用管理员和应用用户连接:

# 终端1:管理员 mongo -u admin -p StrongPass123! --authenticationDatabase admin # 终端2:应用用户 mongo -u orderapp -p AppPass456! --authenticationDatabase orderdb

在应用用户终端执行:

// 应成功 use orderdb db.orders.insertOne({id: 1, status: "pending"}) // 应失败:无权访问 admin 库 use admin db.system.users.find() // 应失败:无权写 productdb use productdb db.products.insertOne({name: "test"})

实操心得:权限验证必须用find()而非show collections,因为后者在无权限库会静默返回空。我曾因此误判权限配置成功,结果上线后应用因Unauthorized错误大面积崩溃。

4.4 故障恢复验证:模拟进程崩溃与磁盘故障

进程崩溃测试

# 获取 mongod 进程 PID ps aux | grep mongod | grep -v grep | awk '{print $2}' # 强制杀死(模拟 OOM) sudo kill -9 <PID> # 等待 30 秒,systemd 应自动重启 sudo systemctl status mongod

磁盘空间耗尽测试(谨慎!仅在测试环境):

# 创建大文件占满磁盘 sudo dd if=/dev/zero of=/var/lib/mongodb/fill.disk bs=1G count=5 # 观察 mongod 日志是否记录 "Not enough space" 并优雅降级 sudo tail -f /var/log/mongodb/mongod.log

4.5 性能基线测试:用mongostat建立黄金指标

启动服务后,立即运行性能监控:

# 在服务器本地执行,持续 60 秒 mongostat --host 127.0.0.1:27017 -u admin -p StrongPass123! --authenticationDatabase admin 1 60 > /tmp/mongostat-baseline.log

关注关键指标:

  • net列:in/out值应稳定,突增说明网络瓶颈
  • conn列:连接数不应持续 > 80% 最大连接数(默认 65536)
  • faults列:每秒页错误应 < 10,过高说明内存不足

我的黄金阈值:在 4 核 8GB 的 Ubuntu 18.04 服务器上,insert+query合计 QPS > 1200 且faults< 5 时,系统处于健康区间。超过此值需调优cacheSizeGB或加索引。

5. 常见问题与实战排障:从报错日志到根因定位的完整路径

在 Ubuntu 18.04 上部署 MongoDB,90% 的问题集中在五个日志文件里:/var/log/mongodb/mongod.log/var/log/syslogjournalctl -u mongod/var/log/apt/history.logdmesg。我整理了一份“错误代码-日志特征-根因-修复”速查表,覆盖所有热搜词相关问题。

5.1systemd workingdir类错误:路径权限的隐形杀手

错误现象

Failed to start mongod.service: Unit mongod.service has a setting which is not allowed for units without a valid working directory.

日志特征

  • journalctl -u mongod中出现WorkingDirectory=空值
  • /etc/systemd/system/mongod.serviceWorkingDirectory未设置或为空

根因分析: Ubuntu 18.04 的systemd版本(237)对WorkingDirectory参数校验更严格。当服务文件中该字段缺失或为空时,systemd拒绝启动。

修复步骤

# 查看当前服务文件 sudo systemctl cat mongod # 如果 WorkingDirectory 未定义,创建覆盖配置 sudo systemctl edit mongod # 输入: [Service] WorkingDirectory=/var/lib/mongodb # 保存退出 sudo systemctl daemon-reload sudo systemctl restart mongod

注意:/var/lib/mongodb目录必须存在且属主为mongodb用户,否则systemd启动时会因权限不足失败。

5.2ufw allow samba command not found:防火墙工具链断裂

错误现象: 执行sudo ufw allow 27017command not found,但ufw已安装。

日志特征

  • which ufw返回空
  • dpkg -l | grep ufw显示ii状态(已安装),但/usr/sbin/ufw文件缺失

根因分析ufw包被部分卸载,或PATH环境变量未包含/usr/sbin(Ubuntu 18.04 默认包含,但某些 minimal 安装会删掉)。

修复步骤

# 检查 PATH echo $PATH | grep sbin # 若无 /usr/sbin,临时添加 export PATH="/usr/sbin:$PATH" # 永久添加(写入 /etc/environment) echo "PATH=\"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\"" | sudo tee /etc/environment # 重装 ufw 确保文件完整 sudo apt-get install --reinstall -y ufw sudo ufw allow 27017 sudo ufw enable

5.3command 'nvidia-smi' not found:APT 源污染的副产品

错误现象sudo apt update输出中夹杂command 'nvidia-smi' not found提示,但 MongoDB 安装似乎正常。

日志特征

  • apt update日志末尾出现nvidia-340nvidia-utils-390建议
  • /var/log/apt/history.log中记录nvidia-*相关包尝试安装

根因分析: APT 源中混入了第三方显卡驱动仓库(如ppa:graphics-drivers/ppa),apt update时扫描所有源,即使未安装相关包也会触发依赖检查,从而报出nvidia-smi不存在的警告。

修复步骤

# 列出所有源 ls /etc/apt/sources.list.d/ # 检查是否有 nvidia 相关文件 grep -r "nvidia\|graphics" /etc/apt/sources.list.d/ # 删除可疑源(如 graphics-drivers-ubuntu-ppa-bionic.list) sudo rm /etc/apt/sources.list.d/graphics-drivers-ubuntu-ppa-bionic.list # 更新并清理 sudo apt-get update sudo apt-get autoremove -y

提示:此错误不影响 MongoDB 功能,但暴露了系统源管理混乱。我建议所有生产服务器只保留mainuniversemultiverse三个官方源,禁用所有 PPA。

5.4mongodb 命令 db.createuser权限失败:认证上下文错位

错误现象: 执行db.createUser({user:"root",pwd:"123",roles:[{role:"root",db:"admin"}]})not authorized on admin to execute command

日志特征

  • mongod.log中记录Failed to authenticateno auth mechanism specified
  • mongoshell 提示connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb

根因分析: 连接时未指定认证数据库。mongo默认连接test库,而用户建在admin库,导致认证上下文不匹配。

修复步骤

# 正确连接方式:显式指定认证库 mongo -u admin -p StrongPass123! --authenticationDatabase admin # 或在 shell 内切换 use admin db.createUser(...)

5.5sudo apt updateHash Sum mismatch:源镜像同步延迟

错误现象apt update卡在Downloading Packages,最后报Hash Sum mismatchFailed to fetch

日志特征

  • journalctl -u apt-daily显示apt-daily.timer触发失败
  • /var/log/apt/history.log记录Update失败

根因分析old-releases.ubuntu.com镜像同步有延迟,InRelease文件哈希与Packages文件不一致。

修复步骤

# 清理 apt 缓存 sudo rm -rf /var/lib/apt/lists/* # 强制更新(跳过哈希检查,仅临时) sudo apt-get update --fix-missing # 或更换更稳定的镜像(如清华源) sudo sed -i 's/old-releases.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list sudo apt-get update

实操心得:apt-get update --fix-missing是应急手段,长期应确保源地址正确。我在 32 台 Ubuntu 18.04 服务器上统一部署清华源,apt update平均耗时从 120 秒降至 18 秒。

6. 后续维护与升级路径:让 MongoDB 在 Ubuntu 18.04 上“活”得更久

Ubuntu 18.04 的生命周期到 2028 年 4 月才结束,但 MongoDB 4.0 的官方支持已在 2022 年终止。如何让这套组合在安全、稳定、可维护的前提下延续生命?我的策略是:不升级 MongoDB 主版本,但通过补丁、加固、监控三层防御延长服役期

6.1 安全补丁策略:用apt机制打关键 CVE 补丁

虽然 MongoDB 4.0.28 不再接收新功能,但 Ubuntu 安全团队仍为其打包关键漏洞修复。检查可用更新:

# 查看安全更新列表 apt list --upgradable | grep mongodb # 仅安装安全更新(避免意外升级主版本) sudo apt-get install -y $(apt list --upgradable | grep mongodb | awk -F'/' '{print $1}' | xargs)

重点关注 CVE-2021-20329(身份验证绕过)、CVE-2022-25541(拒绝服务)等高危漏洞。我订阅了 Ubuntu 安全公告邮件,每当有 MongoDB 相关 CVE 发布,立即在测试环境验证补丁效果。

6.2 配置加固演进:从静态文件到动态注入

随着业务增长,/etc/mongod.conf会变得臃肿。我采用“配置分层”策略:

  • /etc/mongod.conf:只保留netstoragesecurity等核心项
  • /etc/mongod/conf.d/logging.conf:日志、审计配置
  • /etc/mongod/conf.d/replication.conf:副本集配置(如启用)

这样便于按需启用/禁用功能,且systemd支持自动加载conf.d目录下的所有.conf文件。

6.3 监控告警体系:用 Prometheus + Grafana 构建可视化防线

在 Ubuntu 18.04 上部署轻量级监控:

# 安装 node_exporter(系统指标) wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz tar -xzf node_exporter-1.3.1.linux-amd64.tar.gz sudo cp node_exporter-1.3.1.linux-amd64/node_exporter /usr/local/bin/ sudo useradd -rs /bin/false node_exporter sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter # 安装 mongodb_exporter(MongoDB 指标) wget https://github.com/percona/mongodb_exporter/releases/download/v0.30.0/mongodb_exporter-0.30.0.linux-amd64.tar.gz tar -xzf mongodb_exporter-0.30.0.linux-amd64.tar.gz sudo cp mongodb_exporter-0.30.0.linux-amd64/mongodb_exporter /usr/local/bin/

配置systemd服务后,Prometheus 抓取http://localhost:9216/metrics,即可在 Grafana 中监控mongodb_mongod_asserts_totalmongodb_mongod_metrics_document_deleted_total等关键指标。

我的告警阈值:当mongodb_mongod_asserts_total1 小时内增长 > 100,或mongodb_mongod_metrics_document_inserted_totalQPS 突降 80%,立即触发 Slack 告警。这套系统在过去两年帮我提前 47 分钟发现 3 次磁盘 I/O 瓶颈。

6.4 终极迁移路径:平滑过渡到 Ubuntu 20.04/22.04

当业务发展到必须升级时,我设计了零停机迁移方案:

  1. 在新 Ubuntu 22.04 服务器部署 MongoDB 6.0,启用featureCompatibilityVersion: "4.0"
  2. 配置副本集,将旧 1
http://www.jsqmd.com/news/1061018/

相关文章:

  • 终极窗口分辨率自定义工具:SRWE 3步实现游戏画面自由调整
  • 打磨机器人核心技术深度解析:去毛刺工艺与柔性力控系统完整指南 - 资讯报道
  • 抖音内容永久保存指南:douyin-downloader 全面解析
  • 做视频评选选哪个平台?2026免费投票工具横向测评 - 微信投票小程序
  • Navicat无限试用终极指南:macOS版14天限制完整破解方案
  • 999+份市民问卷评选:深圳靠谱黄金回收商家人气榜单! - 开心测评
  • 2026 年 6 月苏州金凯威再生资源:全品类空调回收业务详解 上门免费拆除当场结算 - GrowthUME
  • 2026:蒲江县甲醛检测治理公司专业度测评|资质、产品、售后三重硬核指标对比,优选成都肃醛环保 - 专注室内空气检测治理
  • 2026 年 6 月浪琴售后实地考察报告,覆盖全国 60 余家门店 - 浪琴中国服务中心
  • 构建全栈Web安全扫描器:从JS分析到漏洞检测的自动化实践
  • 杭州上城区汽车音响老店实测首推杭州风火轮汽车音响 - GrowthUME
  • AI手办生成:从文本到可商用3D角色的全流程解析
  • 计算机毕业设计之旅游信息管理系统
  • 宝安全屋定制品牌梯队盘点 本土商家选购干货指南 - 百航
  • 长沙黄金回收资质哪家正规?2026全城SABD分级出炉,收的顶稳居第一 - 奢侈品回收测评
  • 2026手机拍证件照保姆级教程:详细拍摄步骤+免费小程序APP推荐,一次过审 - 办公小帮手
  • 终极网盘下载助手:一键获取9大网盘直链的完整指南 [特殊字符]
  • Apache POI实战指南:Excel/Word自动化避坑与性能优化
  • 嘴嘴熊七彩花生哪里能买到正品?官方渠道、证据地图与选购指南 - 资讯报道
  • Trae BaseURL 开放:构建可控可审计的本地AI编程基础设施
  • 【信息科学与工程学】【制造工程】 第一篇 制造工程基础 1.5 制造控制01
  • 高效开发利器:SpringBoot与JPA整合实战
  • ImageGlass:为什么这款免费图片查看器能让Windows用户告别自带工具?
  • 2026 年 6 月成都房屋装修装饰公司参考:家装设计、旧房翻新、全案整装本地参考指南 - 海棠依旧大
  • 【深度解析】智能电动阀门:原理、应用与电动阀门厂家选型指南 - 热点速览
  • 【Springboot毕设全套源码+文档】基于Java+springboot汉服文化平台(丰富项目+远程调试+讲解+定制)
  • 2026渭南空调维修公司排名|本地口碑好的正规上门平台推荐 - 邻家快修
  • 2026年天津吉利银河汽车销售与维保服务深度横评指南 - 年度推荐企业名录
  • 拒绝压价套路!2026 南京钻石回收正规门店 TOP5 甄选攻略 - 讯息早知道
  • 长沙不坑人的道路故障搭电服务避坑指南 - 资讯速览