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

Ubuntu 20.04 安装 MongoDB 6.x 生产部署指南

1. 项目概述:为什么在 Ubuntu 20.04 上装 MongoDB 不是“点下一步”那么简单

MongoDB 是我过去八年里搭过最多次的数据库——从早期的 3.6 版本到现在的 6.x,每次重装都像重新考驾照:表面流程熟得能背下来,但真到/var/lib/mongodb权限报错、systemctl status mongod显示failed to start、或者mongo命令直接提示command not found的时候,还是得翻日志、查 SELinux(虽然 Ubuntu 默认没开)、甚至怀疑是不是自己手抖删错了某个配置项。这次标题里明确指向Ubuntu 20.04,这个 LTS 版本看似稳定,实则暗藏三处关键断点:第一,它默认使用systemd 245,对服务单元文件的语法校验比 18.04 更严格;第二,它的APT 源策略收紧,官方 MongoDB 仓库必须手动添加,否则apt install mongodb安装的是系统自带的、早已停止维护的 3.6 分支;第三,AppArmor 配置默认启用,而 MongoDB 的数据目录/var/lib/mongodb和日志路径/var/log/mongodb若未被正确纳入策略白名单,服务会静默失败——你看到的只是active (exited),实际进程根本没起来。

我见过太多人卡在“安装完成却连不上”的环节,最后发现不是密码错了,而是/etc/mongod.confbindIp还写着127.0.0.1,而他们想用 Robo 3T 从 Windows 主机连这台 Ubuntu 虚拟机;也有人执行sudo systemctl start mongod后立刻sudo systemctl status mongod,看到Active: inactive (dead)就慌了,其实真正该看的是journalctl -u mongod -n 50 --no-pager里的最后一行错误。这不是 Ubuntu 的问题,也不是 MongoDB 的缺陷,而是两个成熟系统在权限模型、服务生命周期管理和网络策略上的一次真实碰撞。所以这篇内容不叫“Ubuntu 20.04 安装 MongoDB 教程”,它是一份面向生产环境准备的部署手册:每一步操作背后都有对应的风险点、验证方式和 fallback 方案。如果你只是想本地跑个 demo 学聚合查询,那按官方文档走就行;但如果你要把它放进一个需要 7×24 小时运行的 IoT 数据采集后台,或者作为微服务架构中的用户中心数据库,那么接下来的每一个chmod、每一行systemctl enable、每一次mongod --config /etc/mongod.conf --fork的手动测试,都是在给系统加一道保险。核心关键词 MongoDB、Ubuntu 20.04、instalar 其实指向同一个本质需求:如何让一个 NoSQL 数据库,在一个以安全和稳定性为设计哲学的 Linux 发行版上,真正活下来、跑起来、扛得住

2. 安装方案深度拆解:为什么不用 snap、不走源码编译、也不推荐 apt install mongodb

在 Ubuntu 20.04 上装 MongoDB,表面上有至少四种路径:apt install mongodb(系统源)、snap install mongodb(Snap 商店)、curl -O https://fastdl.mongodb.org/... && tar -xzf(二进制包)、wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add - && echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list(官方 APT 仓库)。但真正经得起推敲、适合中长期维护的,只有最后一种。下面逐条拆解其他方案为何被排除:

2.1 系统源apt install mongodb:版本太老,功能缺失严重

Ubuntu 20.04 官方仓库里的mongodb包,版本号固定为1:3.6.9+really3.6.8+dfsg-3ubuntu2。这个版本发布于 2019 年,早已停止所有支持(EOL)。最致命的是它缺少三个现代应用必备能力:一是不支持$facet聚合阶段,这意味着你无法在一个查询里同时做分组统计和分页计数;二是没有change streams,实时监听集合变更的功能直接不可用;三是认证机制仅支持 SCRAM-SHA-1,而现代客户端(如 Node.js 的mongodb驱动 4.x)默认要求 SCRAM-SHA-256。我曾帮一个客户迁移旧系统,他们用的就是这个包,结果前端调用db.collection.watch()直接抛出CommandNotSupportedOnServer错误,查了三天才发现是数据库版本太低。这不是 bug,是时代鸿沟。

2.2 Snap 安装:隔离太强,调试成本高

sudo snap install mongodb看似一键,但它把整个 MongoDB 进程运行在 strict confinement 模式下。这意味着/var/lib/mongodb实际映射到/var/snap/mongodb/common/data,而 AppArmor 策略会阻止它访问任何外部路径。当你想把备份脚本放在/opt/scripts/backup.sh并通过 cron 调用mongodump --out /mnt/backup时,会收到Permission denied——不是磁盘满了,是 snap 的安全沙箱把你拦住了。更麻烦的是日志:journalctl -u snap.mongodb.mongod输出的全是snapd的通用封装日志,真正的 MongoDB 启动错误被埋在几十行无关信息里。我在一台测试机上试过,光是定位Failed to set up listener: SocketException: Address already in use这个错误,就花了 40 分钟翻 snap 的 debug 日志,而用 APT 方式安装,journalctl -u mongod第一行就是ERROR: listen(): bind() failed errno:98 Address already in use,清晰明了。

2.3 源码编译:纯属自找麻烦

MongoDB 官方明确不推荐在生产环境编译安装。它的构建依赖超过 200 个 C++ 库(包括boostsnappyzstd),Ubuntu 20.04 的build-essential包只提供基础工具链,libboost-all-dev版本又和 MongoDB 6.0 要求的boost 1.71+不匹配。我试过一次完整编译:scons --release --64 --prefix=/usr/local/mongodb install跑了 3 小时 27 分钟,最后在 linking 阶段报错undefined reference to 'SSL_CTX_set_alpn_select_cb',原因是系统 OpenSSL 版本(1.1.1f)太新,而 MongoDB 构建脚本硬编码了旧版符号。修复这个要打 patch,而 patch 又可能引入内存泄漏——这已经超出运维范畴,进入底层开发领域了。除非你在做 MongoDB 内核研究,否则这条路径应该直接划掉。

2.4 官方 APT 仓库:唯一兼顾版本、安全与可维护性的选择

这才是正解。它提供三个核心优势:第一,版本可控,你可以精确指定mongodb-org=6.0.15mongodb-org-server=6.0.15,避免apt upgrade时意外升级到不兼容的大版本;第二,服务集成原生,安装后自动生成/lib/systemd/system/mongod.service,且systemctl的所有子命令(start/stop/restart/enable)都能直接生效;第三,配置标准化,默认配置文件/etc/mongod.conf采用 YAML 格式,结构清晰,注释详尽,storage.dbPathnet.portsecurity.authorization等关键参数一目了然。更重要的是,它和 Ubuntu 的 AppArmor 策略天然兼容——官方仓库包在安装时会自动向/etc/apparmor.d/local/usr.bin.mongod写入白名单规则,允许其读写/var/lib/mongodb/**/var/log/mongodb/**。这省去了手动编辑 AppArmor 策略的繁琐步骤,也避免了因策略错误导致服务启动失败的黑盒问题。所以,接下来的所有操作,都将基于官方 APT 仓库展开。这不是偷懒,而是把精力聚焦在真正重要的事情上:数据模型设计、索引优化、备份策略——而不是和包管理器打架。

3. 完整实操流程:从密钥导入到首次连接,每一步都附带验证命令

现在进入实操环节。以下所有命令均在纯净的 Ubuntu 20.04(minimal install,无桌面环境)上实测通过,每一步后面都标注了必须执行的验证命令预期输出特征。请严格按顺序执行,跳步可能导致后续步骤失败。

3.1 导入 MongoDB 官方 GPG 密钥:解决 “NO_PUBKEY” 报错的根本方法

wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -

提示:Ubuntu 20.04 的apt-key已被标记为 deprecated,但这是目前最稳妥的方式。wget -qO -表示静默下载并直接输出到管道,-代表标准输入,apt-key add -从标准输入读取密钥。如果遇到gpg: no valid OpenPGP data found.错误,请检查网络是否能访问mongodb.org(可先ping www.mongodb.org测试)。

验证命令:

apt-key list | grep -A 1 "MongoDB"

预期输出:

pub rsa4096 2020-03-10 [SC] [expires: 2025-03-09] 2069 1EEC 3521 5172 D6BE 97F6 BC7E 2ECF 2D5A 2B2A uid [ unknown] MongoDB 6.0 Release Signing Key <packaging@mongodb.com>

如果输出为空或报错Command 'apt-key' not found,说明密钥导入失败,需重试或检查网络代理设置(注意:此处不涉及任何敏感网络配置,仅普通 HTTP 请求)。

3.2 创建官方软件源列表:精准匹配 Ubuntu 20.04(focal)代号

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

注意:focal是 Ubuntu 20.04 的官方代号,不能写成bionic(18.04)或jammy(22.04)。arch=amd64,arm64指定支持的 CPU 架构,如果你的机器是树莓派 4(ARM64),这条命令依然有效;如果是老旧的 i386 机器,则需额外添加i386,但 MongoDB 官方已停止对 32 位系统的支持,不建议使用。

验证命令:

cat /etc/apt/sources.list.d/mongodb-org-6.0.list

预期输出:

deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse

如果输出中包含https://以外的协议(如http://),或focal拼写错误,必须立即修正,否则apt update会报403 Forbidden

3.3 更新 APT 缓存并安装核心组件:理解mongodb-org元包的作用

sudo apt-get update sudo apt-get install -y mongodb-org

mongodb-org是一个元包(metapackage),它本身不包含任何二进制文件,只负责拉取四个关键子包:mongodb-org-server(核心服务进程mongod)、mongodb-org-mongos(分片路由服务)、mongodb-org-shell(交互式客户端mongosh)、mongodb-org-toolsmongodump/mongorestore等工具)。-y参数自动确认安装,避免交互式提示中断脚本执行。

验证命令:

dpkg -l | grep mongodb-org

预期输出(应显示四行):

ii mongodb-org 6.0.15 amd64 MongoDB open source document-oriented database system (metapackage) ii mongodb-org-mongos 6.0.15 amd64 MongoDB sharding router ii mongodb-org-server 6.0.15 amd64 MongoDB database server ii mongodb-org-shell 6.0.15 amd64 MongoDB shell client

如果只有mongodb-org一行,或版本号不是6.0.15(当前最新稳定版),说明apt-get install未成功拉取全部依赖,需运行sudo apt-get install -f修复。

3.4 初始化数据目录与权限:绕过 90% 的启动失败根源

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

这是最关键的一步。mongod进程默认以mongodb用户身份运行(由/lib/systemd/system/mongod.service中的User=mongodb指定)。如果/var/lib/mongodb目录不存在,mongod启动时会尝试创建,但因权限不足而失败;如果目录存在但属主不是mongodb,则进程无法写入数据文件,日志里会显示Failed to create directory /var/lib/mongodb: Permission deniedchown -R-R参数确保递归修改所有子目录和文件的属主,这是很多教程忽略的细节。

验证命令:

ls -ld /var/lib/mongodb /var/log/mongodb

预期输出:

drwxr-xr-x 2 mongodb mongodb 4096 Jun 15 10:23 /var/lib/mongodb drwxr-xr-x 2 mongodb mongodb 4096 Jun 15 10:23 /var/log/mongodb

注意两列:第三列(属主)必须是mongodb,第四列(属组)也必须是mongodb。如果显示root:root,说明chown未生效,需检查是否漏掉了-R参数或拼写错误。

3.5 启动并启用服务:理解systemctl的状态机逻辑

sudo systemctl start mongod sudo systemctl enable mongod

start命令触发服务启动,enable命令将服务设为开机自启(在/etc/systemd/system/multi-user.target.wants/下创建软链接)。但请注意:start成功不代表服务真正运行。systemctl的状态分为active (running)(健康)、active (exited)(已退出,可能是正常结束也可能是异常)、failed(启动失败)。我们必须用status命令确认真实状态。

验证命令:

sudo systemctl status mongod --no-pager

预期输出(关键字段):

● mongod.service - MongoDB Database Server Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2023-06-15 10:25:33 CST; 1min 23s ago Docs: https://docs.mongodb.org/manual Process: 1234 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=0/SUCCESS) Main PID: 1245 (mongod) Tasks: 23 (limit: 9432) Memory: 124.5M CGroup: /system.slice/mongod.service └─1245 /usr/bin/mongod --config /etc/mongod.conf

重点看Active:行,必须是active (running)。如果显示failed,立即执行sudo journalctl -u mongod -n 50 --no-pager查看最后 50 行日志,90% 的问题都能在这里定位。

3.6 首次连接与基础操作:用mongosh替代已废弃的mongo

mongosh

MongoDB 6.0 开始,官方正式弃用mongoshell,全面转向mongosh(MongoDB Shell),它基于 Node.js,支持现代 JavaScript 语法、自动补全、语法高亮。如果你输入mongo提示command not found,不要慌,这是正常现象,说明你安装的是新版。

验证命令(在mongosh交互界面内执行):

db.runCommand({ connectionStatus: 1 })

预期输出(精简):

{ "authInfo": { "authenticatedUsers": [], "authenticatedUserRoles": [] }, "ok": 1 }

"ok": 1表示连接成功,"authenticatedUsers": []表示当前未启用认证(我们稍后会配置)。接着可以测试写入:

use testdb db.testcol.insertOne({ name: "test", timestamp: new Date() }) db.testcol.find().toArray()

应返回类似[ { _id: ObjectId("..."), name: "test", timestamp: ISODate("...") } ]的结果。这证明数据库可读可写,安装闭环完成。

4. 生产环境加固:从禁用默认端口到创建管理员账户的完整链条

装好只是起点,让 MongoDB 在生产环境安全、稳定、可运维,才是真正的挑战。Ubuntu 20.04 的默认配置(/etc/mongod.conf)是为开发环境设计的,直接暴露在公网等于敞开大门。以下加固步骤,每一步都对应一个真实攻击面。

4.1 修改绑定地址:防止未授权远程访问

打开/etc/mongod.conf

sudo nano /etc/mongod.conf

找到net部分,将:

net: port: 27017 bindIp: 127.0.0.1

改为:

net: port: 27017 bindIp: 127.0.0.1,192.168.1.100

bindIp指定mongod监听的 IP 地址。127.0.0.1是本地回环,必须保留;192.168.1.100是你的服务器在局域网内的真实 IP(用ip a命令查看eth0ens33接口的inet地址)。这样配置后,只有本机和同局域网的设备能访问,外网(如互联网)请求会被系统防火墙直接丢弃。绝对不要设为0.0.0.0(监听所有接口),这是最危险的配置,黑客扫描到 27017 端口后,几秒钟就能拖走你的全部数据。

验证命令:

sudo netstat -tuln | grep :27017

预期输出:

tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN tcp 0 0 192.168.1.100:27017 0.0.0.0:* LISTEN

如果出现0.0.0.0:27017,说明bindIp配置错误,必须修正并重启服务。

4.2 启用访问控制:强制所有操作必须认证

/etc/mongod.conf中取消security部分的注释:

security: authorization: enabled

这是 MongoDB 安全的基石。启用后,任何客户端(包括本地mongosh)连接时都必须提供用户名和密码,否则db.getCollectionNames()会返回空数组,db.testcol.find()会报not authorized on testdb to execute command { find: "testcol", ... }。注意:此配置必须在创建第一个用户之后才能启用,否则你会把自己锁在外面。

验证命令(重启服务后):

sudo systemctl restart mongod mongosh

mongosh中执行:

show dbs

预期输出:

unauthorized: not authorized on admin to execute command { listDatabases: 1.0, ...

这表示认证已生效。此时你还无法操作,因为还没创建用户。

4.3 创建管理员账户:使用admin数据库和root角色

重启服务后,先用无认证模式临时连接(需修改mongod.conf注释掉authorization: enabled,重启服务,再执行以下命令):

mongosh

mongosh中:

use admin db.createUser({ user: "admin", pwd: "StrongPassw0rd!2023", // 密码必须含大小写字母、数字、特殊字符 roles: [ { role: "root", db: "admin" } ] })

root角色是最高权限,可管理所有数据库、用户和角色。pwd字段的密码强度要求是硬性规定,如果密码太弱(如123456),MongoDB 会报错Password must contain at least one uppercase letter, one lowercase letter, one digit, and one special character.。创建成功后,再次编辑/etc/mongod.conf,取消authorization: enabled的注释,重启服务。

验证命令(启用认证后):

mongosh -u admin -p "StrongPassw0rd!2023" --authenticationDatabase admin

成功连接后执行:

db.runCommand({ connectionStatus: 1 }).authInfo.authenticatedUsers

预期输出:

[ { "user": "admin", "db": "admin" } ]

这证明管理员账户已激活,且认证流程正确。

4.4 配置防火墙:用ufw精确控制端口出入

Ubuntu 20.04 默认安装ufw(Uncomplicated Firewall),它是iptables的易用前端。执行:

sudo ufw allow from 192.168.1.50 to any port 27017 sudo ufw enable

from 192.168.1.50指定只允许来自这台 IP 的设备访问27017端口。如果你的应用服务器 IP 是192.168.1.50,这条规则就放行了它;其他所有 IP(包括本机127.0.0.1)都被拒绝。ufw enable会激活防火墙,此后所有未明确允许的连接都会被丢弃。这是比bindIp更底层的防护,即使mongod.conf配置错误,防火墙也能兜底。

验证命令:

sudo ufw status verbose

预期输出:

Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 27017 ALLOW IN 192.168.1.50

如果Status显示inactive,说明防火墙未启用,必须执行sudo ufw enable

5. 常见问题与排查技巧实录:那些官方文档不会写的“血泪经验”

在 Ubuntu 20.04 上部署 MongoDB,90% 的问题都集中在五个高频场景。以下是我在上百次部署中总结的“问题-现象-根因-速查命令-解决方案”速查表,每一条都来自真实踩坑现场。

问题现象根本原因速查命令解决方案
systemctl status mongod显示active (exited),但进程未运行mongod启动后立即退出,通常是配置文件语法错误或路径不存在sudo journalctl -u mongod -n 100 --no-pager | grep -E "(error|Error|ERROR)"检查/etc/mongod.conf是否有 YAML 语法错误(如缩进不一致、冒号后少空格);确认storage.dbPath指向的目录存在且权限正确
mongosh连接时报connect ECONNREFUSED 127.0.0.1:27017mongod进程未启动,或net.port被修改但客户端未指定端口sudo ss -tuln | grep :27017如果无输出,说明mongod未监听;执行sudo systemctl start mongod并检查status;如果端口是27018,则连接时加--port 27018
启用authorization: enabled后,mongosh无法登录,提示Authentication failed密码中包含特殊字符(如$\)未被 shell 正确转义echo "your_password_here" | hexdump -C在命令行中用单引号包裹密码:mongosh -u admin -p 'My$Pass\word' --authenticationDatabase admin;或改用配置文件方式连接
mongodump备份时报Failed: error writing data for collection备份目标路径/backup所在磁盘空间不足,或mongodb用户无写入权限df -h /backupls -ld /backup清理磁盘空间;执行sudo chown mongodb:mongodb /backup;确保路径不在noexec挂载选项的分区上
mongosh中执行db.testcol.find()返回空结果,但db.testcol.countDocuments({})显示 1000集合名大小写敏感,testcolTestCol是不同集合db.getCollectionNames()MongoDB 集合名区分大小写,确认代码中使用的集合名与getCollectionNames()输出完全一致;建议统一用小写命名

5.1 一个经典案例:AppArmor 静默拦截导致服务启动失败

某次为客户部署时,systemctl status mongod显示active (running),但mongosh死活连不上。journalctl里没有任何错误,只有Starting MongoDB Database Server... Started MongoDB Database Server.。我花了 2 小时排查,最后执行:

sudo aa-status \| grep mongod

输出:

/usr/bin/mongod (1234)

这表示mongod进程正在 AppArmor 策略下运行。再查:

sudo dmesg \| grep -i avc \| tail -20

输出:

[ 1234.567890] audit: type=1400 audit(1686800000.123:456): apparmor="DENIED" operation="open" profile="/usr/bin/mongod" name="/var/lib/mongodb/mongod.lock" pid=1234 comm="mongod" requested_mask="wr" denied_mask="wr" fsuid=115 ouid=115

原来 AppArmor 策略禁止mongod写入.lock文件!解决方案是:

echo "/var/lib/mongodb/** rwk," | sudo tee -a /etc/apparmor.d/local/usr.bin.mongod sudo systemctl reload apparmor sudo systemctl restart mongod

这个案例说明:Ubuntu 20.04 的安全机制是层层嵌套的,systemctl的状态只是表象,真正的瓶颈可能在内核级的 AppArmor。永远不要相信active (running),要用ssdmesgjournalctl三者交叉验证。

5.2 实操心得:备份与恢复的黄金组合

很多人以为mongodump+mongorestore就是万能备份,但在 Ubuntu 20.04 上,必须配合systemd的定时任务和logrotate才算完整。我的标准做法是:

  1. 创建备份脚本/opt/scripts/mongo-backup.sh
#!/bin/bash DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/backup/mongodb/$DATE" mkdir -p $BACKUP_DIR mongodump --host 127.0.0.1:27017 --username admin --password 'StrongPassw0rd!2023' --authenticationDatabase admin --out $BACKUP_DIR # 压缩并删除原始目录 tar -czf $BACKUP_DIR.tar.gz -C /backup/mongodb $DATE rm -rf $BACKUP_DIR # 保留最近 7 天 find /backup/mongodb -name "*.tar.gz" -mtime +7 -delete
  1. 设为定时任务:
sudo crontab -e # 添加:0 2 * * * /opt/scripts/mongo-backup.sh
  1. 配置logrotate管理日志:
echo "/var/log/mongodb/mongod.log { daily missingok rotate 30 compress delaycompress notifempty create 644 mongodb mongodb }" | sudo tee /etc/logrotate.d/mongodb

这套组合拳保证了备份可追溯、日志不爆炸、磁盘不告急。记住:备份不是“做一次就完事”,而是“每天自动做,每周人工检,每月灾难演”。

6. 后续扩展建议:从单机部署到高可用集群的平滑演进路径

完成 Ubuntu 20.04 上的 MongoDB 单机部署,只是万里长征第一步。根据业务增长,你可能会面临三个典型演进阶段,每个阶段都有明确的技术选型和 Ubuntu 适配要点。

6.1 阶段一:读写分离(Replica Set)

当应用读请求远大于写请求(如报表系统、数据分析平台),单机mongod的 CPU 和 I/O 会成为瓶颈。此时应构建副本集(Replica Set),它由一个主节点(Primary)和多个从节点(Secondary)组成,所有写操作只能在 Primary 上执行,读操作可路由到 Secondary。在 Ubuntu 20.04 上实现的关键是:

  • 配置一致性:所有节点的/etc/mongod.conf必须启用replication.replSetName: rs0,且net.bindIp要包含所有节点的 IP(如127.0.0.1,192.168.1.100,192.168.1.101);
  • 初始化命令:在 Primary 节点的mongosh中执行:
rs.initiate({ _id: "rs0", members: [ { _id: 0, host: "192.168.1.100:27017" }, { _id: 1, host: "192.168.1.101:27017" } ] })
  • Ubuntu 适配点:确保所有节点时间同步(sudo timedatectl set-ntp true),因为副本集心跳超时依赖精确时间;关闭ufw或为27017端口添加跨节点规则(sudo ufw allow from 192.168.1.101 to any port 27017)。

6.2 阶段二:水平扩展(Sharding)

当单个集合数据量超过 1TB,或写吞吐量持续超过 10,000 ops/sec,就需要分片(Sharding)。它将数据按片键(shard key)切分成块(chunk),分布到多个分片(shard)上。Ubuntu 20.04 上的最小可行分片集群需 5 个服务:

  • 1 个 Config Server(存储集群元数据,必须是副本集);
  • 2 个 Mongos Router(接收客户端请求,路由到对应分片);
  • 2 个 Shard Server(实际存储数据的mongod实例)。
    关键 Ubuntu 适配点是:每个服务必须用独立的 systemd 单元文件,不能共用/lib/systemd/system/mongod.service。例如,为 Config Server 创建/etc/systemd/system/mongod-config.service,并在ExecStart中指定--configsvr --replSet configReplSet参数。

6.3 阶段三:云原生集成(Kubernetes Operator)

当你的基础设施迁移到 Kubernetes,MongoDB 官方提供了MongoDB Kubernetes Operator,它用 CRD(Custom Resource Definition)声明式管理 MongoDB

http://www.jsqmd.com/news/1059921/

相关文章:

  • Three.js 3D 渲染与赛博朋克风格 UI 实现:从着色器到霓虹矩阵
  • 英雄联盟智能辅助工具:免费提升游戏胜率的终极指南
  • 西安商业计划书代写公司怎么选?哪家好?——为“AI时代还需要代写BP吗”专访文胆刘晖之7连问 - GrowthUME
  • 2026 广东汕头全域彩钢瓦修缮 TOP4 权威推荐|滨海盐雾厂房除锈防水喷漆企业对比 + 汕头专属避坑指南 - 本地便民网
  • 藏器于身,厚积薄发|狼山石承载的狼性风骨与人生修行
  • TRAE智能体四支柱深度解析:Rules、Memory、MCP与Skills协同机制
  • 武当山正统道家功夫的武校哪家靠谱 - GrowthUME
  • 毕业季必看:6款AI论文工具,覆盖毕业期刊职称一键极速生成 - 麟书学长
  • Frida实战:深入解析Android SSL Pinning绕过原理与Hook脚本编写
  • 2026韶关全市复读择校综合测评|跨县通勤全覆盖,始兴风度高复适配全市各类复读生实测 - 泓动
  • 双层腔磁子学:磁振子-光子强耦合机制与应用
  • 通达信缠论分析插件:让技术分析从复杂到简单的革命性工具
  • 微信小程序逆向实战:抓包失效后如何提取与反编译源码
  • 高性能Java开发:优化技巧与最佳实践
  • 浈江复读择校避坑实录|3 位本地学子涨分 80+,赣韶高速 1 小时直达高复实测 - 泓动
  • 2026 广东湛江全域彩钢瓦修缮 TOP4 权威推荐|雷州半岛滨海高盐雾厂房除锈防水喷漆企业对比 + 湛江专属避坑指南 - 本地便民网
  • 2026 韶关浈江区高考复读机构全面评测:始兴风度高复学校适配性、教学成果与往届学子案例解析 - 泓动
  • Linux raw_sendmsg原始套接字与IP_HDRINCL控制
  • 2026 广东江门全域彩钢瓦修缮 TOP4 权威推荐|滨海盐雾厂房除锈防水喷漆企业对比 + 江门专属避坑指南 - 本地便民网
  • Ubuntu安装PostgreSQL生产级配置指南:版本锁定、数据目录迁移与安全认证
  • 千万不能错过!揭秘当前最火爆的5家淘宝代运营企业 - GrowthUME
  • SQL注入实战:利用OR、AND与引号绕过身份验证的攻防解析
  • Transformer架构深度解析:从原理到工业级实现避坑指南
  • 首次新车提车不懂验车?可以找专业机构全程代办验车 - GrowthUME
  • 2026年黄岛全屋定制价格参考,本土设计团队打造高性价比家居 - GrowthUME
  • 2026 广东佛山全域彩钢瓦修缮 TOP4 权威推荐|高温高湿制造业厂房除锈防水喷漆企业对比 + 佛山专属避坑指南 - 本地便民网
  • 硅基流动接入百度ERNIE-Image的四层桥接架构
  • 北京专精特新2026推荐,合规申报策略 - GrowthUME
  • Frida动态插桩技术:逆向分析Android广告SDK的原理与实践
  • 星野来信:苏州宣传片拍摄制作专业团队的全流程解决方案,宣传片拍摄制作哪家好 - 品牌推荐师