Windows10环境下MongoDB副本集配置异常求助
解决Windows 10下MongoDB 3.4副本集节点无法连接、主节点降级问题
先梳理下你操作里的几个关键问题,然后一步步解决:
一、核心错误点排查
- 服务与端口冲突:你先创建了不带
--replSet参数的默认MongoDB服务并启动,之后又用命令行启动端口27017的mongod进程,大概率导致端口占用,副本集节点启动异常。 - 日志路径配置错误:启动第二个节点时,日志路径指向
\data\rs1\2.log但数据目录是\data\rs2,日志与数据目录不匹配;同时路径未使用完整的C:\前缀,可能导致MongoDB找不到日志目录报错。 - 强制重配置的副作用:在其他节点未正常启动的情况下使用
rs.reconfig(config,{"force":true}),会直接让当前节点降级为SECONDARY,且因无健康节点无法选举出PRIMARY。
二、分步解决方案
1. 彻底清理现有MongoDB进程与服务
先停止并删除默认服务,避免干扰:
net stop MongoDB sc delete MongoDB
打开任务管理器,找到所有mongod.exe进程并结束,确保27017/27018/27019端口完全释放。
2. 修复节点目录与权限
- 确认
C:\data\rs1、C:\data\rs2、C:\data\rs3目录存在,删除目录内的mongod.lock文件(如果有)。 - 用管理员身份打开命令提示符(CMD),避免MongoDB读写目录时出现权限问题。
3. 正确启动每个副本集节点
使用完整路径启动节点,确保日志与数据目录一一对应:
# 启动节点1(27017) start mongod --replSet udd --logpath "C:\data\rs1\mongod.log" --dbpath "C:\data\rs1" --port 27017 --smallfiles --oplogSize 64 --bind_ip 127.0.0.1 # 启动节点2(27018) start mongod --replSet udd --logpath "C:\data\rs2\mongod.log" --dbpath "C:\data\rs2" --port 27018 --smallfiles --oplogSize 64 --bind_ip 127.0.0.1 # 启动节点3(27019) start mongod --replSet udd --logpath "C:\data\rs3\mongod.log" --dbpath "C:\data\rs3" --port 27019 --smallfiles --oplogSize 64 --bind_ip 127.0.0.1
每个命令执行后会弹出单独的CMD窗口,请勿关闭,它们是节点的运行进程。
4. 初始化副本集(禁用force参数)
连接到27017节点:
mongo --port 27017
在Mongo Shell中初始化副本集:
rs.initiate( { _id: "udd", members: [ { _id: 0, host: "127.0.0.1:27017" }, { _id: 1, host: "127.0.0.1:27018" }, { _id: 2, host: "127.0.0.1:27019" } ] } )
等待10-20秒后执行rs.status(),正常情况下27017节点会变为PRIMARY,另外两个节点状态为SECONDARY。
5. 验证副本集功能
在PRIMARY节点插入测试数据:
use testdb db.testcol.insert({name: "test"})
连接到27018节点,开启从节点查询权限后验证数据同步:
mongo --port 27018 rs.slaveOk() use testdb db.testcol.find()
三、节点仍无法连接的排查方向
- 查看对应节点的日志文件(如
C:\data\rs2\mongod.log),搜索error关键词,排查是否存在目录不存在、权限不足、端口被占用等问题。 - 用
netstat -ano | findstr :27018检查端口是否被其他进程占用,若有则杀掉对应PID的进程。 - 暂时关闭Windows防火墙测试,确认是否是防火墙阻挡了节点间的通信。
内容的提问来源于stack exchange,提问作者Ankit
相关产品推荐
相关产品推荐

