怎么在同一个服务器设置三个mongodb,如何配置

同一个服务器设置三个mongodb,核心思路是让每个实例拥有独立的数据目录、独立的端口和独立的配置文件,再通过systemd或手动脚本分别启动管理。

很多朋友在刚开始接触mongodb多实例部署时,第一反应是”装三遍mongodb”,其实没必要,一套mongodb二进制文件就够用,我们需要做的只是复制三份配置,让它们各自”分家过日子”。

608-MongoDB 配置启动
加载中
608-MongoDB 配置启动

同一台服务器部署多个mongodb前的端口规划

端口是三个mongodb实例之间最直观的区分标志,默认情况下,mongodb监听27017端口,你如果直接启动三个实例,第二个和第三个必然报”端口已被占用”的错。

三个mongodb实例的端口分配与mongodb端口配置要点

行业共识认为,多实例部署时端口规划要遵循”主实例用默认,从实例用增量”的原则,常见的分配方案如下:

实例名称 监听端口 用途
mongodb-primary 27017 承接主要业务读写
mongodb-secondary 27018 数据分析或备份
mongodb-archive 27019 归档存储或测试环境

端口分配只是第一步,还要注意绑定IP地址,如果三个实例都在同一台服务器上,建议将bind_ip设为127.0.0.1或者内网IP,避免暴露到公网,对于需要远程访问的场景,可以在防火墙层面单独放行对应端口,而不是直接把所有端口暴露在公网上。

mongodb多实例部署的核心:三步编写独立配置

端口规划好之后,剩下的工作就是让每个实例拥有独立的”身份档案”,这一步是整个mongodb多实例部署的核心。

第一步:创建三个独立数据目录

mongodb不允许两个实例共用同一个dbPath,强行共用会导致数据文件互相覆盖,甚至直接崩溃,所以先创建三个目录:

mkdir -p /data/mongodb/{primary,secondary,archive}/data
mkdir -p /data/mongodb/{primary,secondary,archive}/log

顺便把属主改成mongod用户:

chown -R mongod:mongod /data/mongodb

第二步:编写各自的mongodb配置文件

每个实例的配置文件要包含

怎么在同一个服务器设置三个mongodb,如何配置

独立的端口、数据目录、日志路径和进程ID文件,以primary实例为例,配置文件 /etc/mongod-primary.conf 内容大致如下:

systemLog:
  destination: file
  path: /data/mongodb/primary/log/mongod.log
  logAppend: true
storage:
  dbPath: /data/mongodb/primary/data
  journal:
    enabled: true
processManagement:
  fork: true
  pidFilePath: /data/mongodb/primary/mongod.pid
net:
  bindIp: 127.0.0.1
  port: 27017

secondary和archive的配置文件除了端口、路径不同,其余结构完全一致,这里有一个细节容易被忽略:每个配置文件的pidFilePath必须唯一,否则mongod进程在退出时可能误删其他实例的PID文件。

第三步:准备启动脚本

配置写好后,用如下命令分别启动:

mongod -f /etc/mongod-primary.conf
mongod -f /etc/mongod-secondary.conf
mongod -f /etc/mongod-archive.conf

启动后用 ps -ef | grep mongod 查看,应该能看到三个独立的mongod进程。

用systemd管理三个mongodb服务

手动启动虽然方便,但服务器一重启,三个实例还得手动拉起,更稳妥的做法是给每个实例写一个systemd服务单元。

创建三个独立的service单元文件

以primary为例,/usr/lib/systemd/system/mongodb-primary.service 的内容如下:

[Unit]
Description=MongoDB Primary Instance
After=network.target
[Service]
User=mongod
Group=mongod
ExecStart=/usr/bin/mongod --config /etc/mongod-primary.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
[Install]
WantedBy=multi-user.target

注意,因为配置里已经写了 fork: true,systemd的Type要设置为forking,否则systemd会认为服务启动失败,这里建议把配置里的fork改为false,让mongod以前台方式运行,systemd的Type设为simple,管理起来更省心。

Secondary和archive的service文件照葫芦画瓢,改一下路径和名字就行。

启动顺序与开机自启设置

三个实例彼此独立,没有严格的启动顺序要求,挨个执行:

systemctl daemon-reload
systemctl start mongodb-primary
systemctl start mongodb-secondary
systemctl start mongodb-archive
systemctl enable mongodb-primary mongodb-secondary mongodb-archive

怎么在同一个服务器设置三个mongodb,如何配置

这样服务器重启后,三个mongodb实例会自动拉起。

验证三个mongodb实例正常运行的四个方法

服务部署完不能光看进程在不在,得验证它们真的能正常服务。

检查端口监听状态

netstat -tlnp | grep mongod

正常输出应该能看到27017、27018、27019三个端口分别由不同的mongod进程监听。

使用mongo shell连接测试

mongo --port 27017 --eval "db.runCommand({ping:1})"
mongo --port 27018 --eval "db.runCommand({ping:1})"
mongo --port 27019 --eval "db.runCommand({ping:1})"

三个实例都应返回 ok: 1。

查看日志文件

每个实例的日志文件里都有各自的启动记录,没有报错说明启动顺利,如果日志里出现 Address already in use,多半是端口冲突。

使用mongostat监控

mongostat --port 27017 --port 27018 --port 27019

这个命令可以同时查看三个实例的读写压力、连接数和内存占用情况。

一台服务器部署多个mongodb的资源分配与性能调优

三个mongodb实例跑在同一台机器上,资源竞争是绕不开的话题,如果服务器内存只有16GB,三个实例默认的缓存配置可能直接把内存吃满。

限制内存使用与最大连接数

mongodb的缓存由系统Page Cache接管,不像Java那样有固定的堆内存设置,但可以通过限制连接数和wiredTiger缓存大小来控制资源占用,在配置文件中可以加:

storage:
  wiredTiger:
    engineConfig:
      cacheSizeGB: 2
net:
  maxIncomingConnections: 500

把每个实例的缓存限制在2GB左右,三个实例合计6GB,给操作系统和业务应用留出余量。

日志轮转与磁盘空间管理

三个实例每天产生的日志量不容小觑,建议开启日志轮转:

mongod --port 27017 --logpath /data/mongodb/primary/log/mongod.log --logRotate reopen --logAppend

同时定期检查数据目录的磁盘占用,避免某个实例的数据把磁盘写满,拖垮其他实例。

mongodb多实例部署常见问题排查

即使照着上述步骤操作,依然可能踩坑,下面几个问题出现频率最高。

怎么在同一个服务器设置三个mongodb,如何配置

端口占用导致启动失败

如果启动secondary实例时报地址冲突,先查看谁占了27018端口:

lsof -i :27018

确认是残留进程后 kill 掉,再重新启动。

数据目录权限错误

mongod以mongod用户身份运行,如果数据目录的属主是root,启动时会报权限错误,直接执行:

chown -R mongod:mongod /data/mongodb

顺手解决三个目录的权限问题。

配置文件格式错误

YAML格式对缩进非常敏感,稍微多一个空格或少一个冒号,mongod就会报 YAML-cpp: error at line,尽量用空格缩进而非Tab,写完配置后可以用 mongod --config xxx --configsvr 这种方式做语法校验。

Q&A:mongodb多实例部署的常见疑问

同一个服务器上运行三个mongodb会互相影响吗?

会,但影响可控,三个实例共享CPU、内存和磁盘I/O,高并发场景下可能出现资源争抢,建议通过限制wiredTiger缓存、连接数以及使用独立磁盘分区来降低相互干扰,对于生产环境,业内专家指出,一台服务器运行三个mongodb实例适用于开发测试或中小业务量场景,核心生产库仍建议独立部署。

mongodb多实例部署时如何实现数据隔离?

三个实例的数据目录完全独立,天然实现了物理层面的数据隔离,但要注意,如果服务器磁盘损坏,三个实例的数据会同时丢失,可以在配置文件中设置不同的dbPath到不同磁盘挂载点,降低单点风险。

一台服务器部署多个mongodb适合什么场景?

适合以下场景:开发环境需要同时模拟多个业务库、测试环境需要验证主从复制或分片集群、预算有限时用一台高配服务器跑多个小体量实例,如果业务数据量增长迅速,建议评估迁移到云数据库的成本,毕竟一台服务器部署多个mongodb节省的硬件成本,可能被运维复杂度抵消。

同一个服务器设置三个mongodb,说到底就是端口、数据目录、配置文件各归各,服务管理用systemd统一管,照着这个思路,再多的实例也能轻松部署,关键是规划好资源上限,避免三个实例互相”打架”。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/%e6%80%8e%e4%b9%88%e5%9c%a8%e5%90%8c%e4%b8%80%e4%b8%aa%e6%9c%8d%e5%8a%a1%e5%99%a8%e8%ae%be%e7%bd%ae%e4%b8%89%e4%b8%aamongodb%ef%bc%8c%e5%a6%82%e4%bd%95%e9%85%8d%e7%bd%ae/

赞 (0)
服务器ip和端口号怎么写在一起,有哪些方法?
上一篇 2026年8月12日 14:34
Ubuntu怎么看桌面版和服务器版,有什么区别?
下一篇 2026年8月12日 14:35

相关推荐

  • 我的世界手机板2b2t服务器怎么进,进不去怎么办?

    我的世界手机版进入2b2t服务器的核心方法是用手机版启动器添加服务器IP地址,但你需要先准备好正版账号和基础生存物资,因为这是一个极度残酷的原始生存服务器,如果你玩过电脑版《我的世界》,一定听说过2b2t——这个从2010年运行至今、从未重置过地图的服务器,号称“史上最混乱的服务器”,很多玩家在手机端也想挑战这……

    2026年8月9日
    1500
  • n2n小黄鸭怎么连接别人服务器?,连接失败怎么办

    要连上别人的n2n小黄鸭服务器,核心就是拿到对方的Supernode地址、端口、社区名和密钥,在自己的客户端里填好这些参数并点击连接,跑通一次之后你会发现,整个过程和你连一个WiFi没有本质区别,只是把“网络名”换成了“社区名”,把“WiFi密码”换成了“密钥”而已,n2n小黄鸭连接别人服务器完整操作步骤小黄鸭……

    2026年10月6日
    000
  • t1显示连接服务器失败怎么回事,连接服务器失败怎么解决?

    t1显示连接服务器失败,绝大多数情况下不是设备坏了,而是网络链路、时间同步或服务器状态出了问题,按步骤排查基本都能解决,这里的t1,通常指儿童手表、智能手环或部分物联网设备,遇到这个提示,先别急着找售后,花几分钟做一轮自查,往往比返厂维修更快,先分清你手里是哪一种t1设备t1这个型号在智能硬件圈比较常见,儿童电……

    2026年9月24日
    100
  • 我的世界手机版2b2t服务器怎么去?,进不去什么原因?

    2b2t没有官方手机版,但安卓手机通过PojavLauncher启动器可以直接连接2b2t.org,苹果手机因系统限制基本无法实现, 如果你手头是安卓设备,备好正版Java账号,按照下文步骤操作就能进入这个著名无政府服务器,2b2t手机版怎么进:先解决启动器与版本问题2b2t是Minecraft Java版服务……

    2026年9月16日
    100
  • DNS老是服务器未响应怎么办,怎么解决网络问题

    DNS服务器未响应,核心解决思路是先区分是单个设备还是全网络故障,然后依次更换公用DNS、清除本地缓存、重启网络设备,最后重置网络协议或扫描系统,绝大多数问题都能在这几步内解决,很多朋友一看到“DNS服务器未响应”就慌了,觉得宽带坏了,或者电脑彻底罢工了,其实这个提示就像快递员找不到你家楼栋号,网线没断,宽带也……

    程序编程 2026年10月22日
    000
  • Excel检索表怎么做最简单,VLOOKUP函数怎么用?

    Excel 检索表全攻略:从入门到精通在 Excel 数据处理中,检索表(Lookup Table) 是通过一个“关键字”从一组数据中提取相关信息的核心工具,无论是查询员工信息、产品单价还是成绩等级,掌握高效的检索方法都能极大提升工作效率,三大核心检索函数对比根据 Excel 版本和使用场景的不同,通常有三种主……

    2026年7月14日
    700
  • CF服务器炸了扣豆了怎么办,穿越火线服务器崩溃扣豆怎么申诉

    CF服务器波动导致游戏豆被扣,核心最快的解决路径是:优先通过腾讯游戏客服提交工单申诉,同时保留对局异常截图和掉线时间记录,只要证据指向服务器端问题,系统核查后会在规定工作日内返还豆子,CF服务器异常扣豆的判定标准很多玩家遇到扣豆第一反应是“服务器背锅”,但实际操作中官方有一套相对明确的划分逻辑,理解这套标准,你……

    2026年10月16日
    100
  • CS2无法连接服务器是怎么回事,网络连接失败如何修复?

    CS2无法连接服务器,绝大多数原因出在你的网络链路、游戏文件或Steam平台状态,真正服务器宕机的概率反而没那么高,如果你现在突然进不去游戏,先别急着重装系统,按下面顺序排查,最快一分钟就能解决,cs2连不上服务器,网络问题占多大比重在进入CS2之前,你的电脑需要同时和Steam服务器、CS2游戏服务器完成多次……

    2026年10月6日
    700
  • 用友T3登录不了服务器如何解决,用友T3连不上服务器什么原因

    用友T3不能登录到服务器,多数情况下不是软件损坏,而是网络没通、SQL服务没启动或服务器名称解析错误,按“先网络、再服务、后配置”的顺序排查,比直接重装更省时间,用友t3无法登录服务器怎么解决?先圈定故障范围遇到登录失败,第一件事不是去重装客户端,而是判断问题出在哪一端,你可以做一个小测试:直接坐到服务器电脑前……

    程序编程 2026年9月17日
    000
  • 服务器系统怎么在pe安装win7系统安装

    服务器系统在PE下安装Win7,核心思路是绕开光驱和原版安装器的限制,通过PE环境手动加载服务器RAID驱动、注入USB3.0/NVMe驱动,再调用Win7镜像安装程序完成部署,这个过程里,驱动注入是成败关键,因为绝大多数服务器在PE下识别不到硬盘,或是装完系统后卡在logo界面死机,下文按完整的实操顺序拆解……

    2026年8月30日
    900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注