如何在 Windows Server 上部署 MongoDB 副本集?

来源:JS脚本作者:甜甜圈头衔:草根站长
导读:本期聚焦于甜甜圈创作的《如何在 Windows Server 上部署 MongoDB 副本集?》,敬请观看详情。MongoDB 副本集依赖节点间心跳与选举机制维持高可用,但 Windows Server 环境下服务注册、路径转义和防火墙配置的细节往往容易被忽略。本文从副本集架构与端口规划入手,介绍三节点在 C:\MongoDB 目录下的数据、日志和配置存放方式,包括 mongod.cfg 中 replication.replSetName 的设置、使用 mongod.exe 注册为 Windows 服务的过程,以及通过 mongo shell 执行 rs.initiate 与 rs.add 完成副本集初始化。还会说明如何用 rs.status 判断主从状态、模拟主节点故障观察自动选举,并补充 Windows 防火墙放行规则与认证启用顺序,帮助运维人员在 Windows Server 上稳定搭建可用的 MongoDB 副本集。

在 Windows Server 上部署 MongoDB 副本集,与 Linux 环境最大的区别在于服务注册、路径书写和防火墙管理。很多教程默认使用正斜杠路径或者直接命令行启动,导致节点重启后无法自动恢复。本文使用三台 Windows Server 主机,IP 分别规划为 192.168.10.11、192.168.10.12、192.168.10.13,端口统一为 27017,数据目录固定为 C:\MongoDB\data,日志目录固定为 C:\MongoDB\log,配置文件放在 C:\MongoDB\config\mongod.cfg,然后逐步完成从环境准备到副本集选举验证的全过程。

如何在 Windows Server 上部署 MongoDB 副本集?

副本集架构与目录规划

MongoDB 副本集由多个 mongod 节点组成,其中一个节点为主节点负责写入,其余为从节点异步复制主节点的 oplog。副本集依靠心跳检测成员存活状态,当主节点失联时会在剩余节点中发起选举,得到大多数投票的从节点会升级为新的主节点。正因为选举机制要求“大多数”存活,所以生产环境通常采用三个节点,这样即使一个节点宕机,另外两个节点仍然可以形成多数派完成选举。

在 Windows Server 上搭建副本集前,需要先在三台主机上完成相同的目录结构。建议使用管理员权限在每台机器上执行以下命令创建目录:

mkdir C:\MongoDB\data
mkdir C:\MongoDB\log
mkdir C:\MongoDB\config
mkdir C:\MongoDB\bin

将 MongoDB 企业版或社区版压缩包解压后,把 bin 目录下的所有可执行文件复制到 C:\MongoDB\bin 中。接下来编写统一的配置文件 C:\MongoDB\config\mongod.cfg,内容如下:

systemLog:
  destination: file
  path: C:\MongoDB\log\mongod.log
  logAppend: true
storage:
  dbPath: C:\MongoDB\data
  journal:
    enabled: true
net:
  port: 27017
  bindIp: 0.0.0.0
replication:
  replSetName: rs0

这里注意 replication.replSetName 的值必须三台机器完全一致,否则后续初始化时会因为副本集名称不匹配而报错。bindIp 设置为 0.0.0.0 是为了让其他节点可以访问,但在生产环境如果服务器有多个网卡,建议改成实际内网 IP 或专用网段,同时配合防火墙规则限制访问来源。

注册 Windows 服务并启动节点

Windows 下不建议直接用命令行启动 mongod,因为控制台关闭后进程会退出。正确做法是把 mongod 注册为 Windows 服务,这样系统重启后服务可以自动拉起。进入 C:\MongoDB\bin 目录,在管理员 PowerShell 中执行安装命令:

cd C:\MongoDB\bin
.\mongod.exe --config "C:\MongoDB\config\mongod.cfg" --install --serviceName "MongoDB" --serviceDisplayName "MongoDB Replica Set"

执行成功后,可以通过服务管理控制台找到名为 MongoDB Replica Set 的服务。接着启动服务并设置自动启动类型:

net start MongoDB
sc.exe config MongoDB start= auto

需要注意,sc config 命令中 start= 后面的空格不能省略,否则会提示参数错误。启动完成后,可以打开 C:\MongoDB\log\mongod.log 查看日志,确认没有报错并且能看到 waiting for connections on port 27017。三台主机执行同样的步骤,全部启动成功后即可进入副本集初始化阶段。

如果安装服务时使用了带空格的路径,例如 C:\Program Files\MongoDB\Server\7.0\bin\mongod.exe,则必须用引号把整个路径包起来,否则 sc create 会解析失败。本文统一使用 C:\MongoDB\bin,就是为了避免这类路径问题。

初始化副本集与验证选举

副本集第一次启动时不会自动产生主节点,需要连接到任意一个节点执行 rs.initiate。由于三个节点目前都是无认证状态,直接使用 mongo shell 连接第一个节点:

mongo --host 192.168.10.11 --port 27017

进入 shell 后执行以下初始化命令,将所有成员一次性加入副本集:

rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "192.168.10.11:27017", priority: 2 },
    { _id: 1, host: "192.168.10.12:27017", priority: 1 },
    { _id: 2, host: "192.168.10.13:27017", priority: 1 }
  ]
})

priority 值较高的节点更容易成为主节点,这里把 192.168.10.11 设置为 2,让它在正常情况下承担写入。初始化成功后,执行 rs.status() 可以查看每个节点的 stateStr,正常情况下应该显示 PRIMARY 和 SECONDARY。需要注意的是,从节点默认不可读,需要在从节点的 shell 中执行 rs.secondaryOk() 才能进行查询测试。

为了验证写入和复制是否正常,可以连接到主节点插入一条测试数据:

use appdb
db.records.insertOne({ name: "replica-test", server: "192.168.10.11" })

然后切换到从节点执行 rs.secondaryOk() 后再执行 db.records.find(),如果能看到相同文档,说明复制链路正常。最后模拟主节点故障:在主节点上执行 net stop MongoDB,等待几秒后在另一个节点执行 rs.status(),会发现新的主节点被自动选出。再次启动原节点后,它会作为从节点重新加入,整个高可用过程验证完成。

开启认证与防火墙收尾

生产环境不能长期以无认证状态运行。建议先在无认证状态下创建管理员用户,再启用认证。使用 mongo shell 连接到主节点,执行以下命令创建 root 用户:

use admin
db.createUser({
  user: "replicaAdmin",
  pwd: "yourStrongPassword",
  roles: [ { role: "root", db: "admin" } ]
})

创建用户后,修改三个节点的 mongod.cfg,在文件末尾添加如下内容:

security:
  authorization: enabled

保存后重启所有 mongod 服务,之后的连接就必须携带账号密码,例如:

mongo --host 192.168.10.11 --port 27017 -u replicaAdmin -p yourStrongPassword --authenticationDatabase admin

Windows 防火墙同样需要放行 27017 端口,否则其他节点无法建立心跳连接。管理员 PowerShell 中执行:

New-NetFirewallRule -DisplayName "MongoDB 27017" -Direction Inbound -Protocol TCP -LocalPort 27017 -Action Allow

放行规则可以进一步限制远程地址为本机网段,例如 -RemoteAddress 192.168.10.0/24,这样只有副本集成员之间可以穿透防火墙,提高安全性。完成以上步骤后,Windows Server 上的 MongoDB 副本集就具备自动故障转移、数据冗余和基础访问控制能力,可以投入业务使用。

MongoDB副本集Windows Server副本集搭建修改时间:2026-10-03 18:45:22

免责声明:已尽一切努力确保本网站所含信息的准确性。网站作品多为原创整理与精心创作,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们进行处理Email:chomcom@qq.com。
引用或转载本作品时,请注明当前出处:https://www.ipipp.com/html/1003/65220.html,基于非商业用途的前提下,欢迎转载或二创本作品。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。