MongoDB副本集部署失败求助:执行启动命令后无法完成配置
看起来你遇到的核心问题是你手动执行的副本集启动参数没有真正生效,同时还缺少了副本集初始化的关键步骤。让我一步步帮你排查和解决:
1. 先停止当前运行的MongoDB服务
从db.runCommand("getCmdLineOpts")的输出能明显看出:当前运行的mongod是Windows服务模式,加载的是默认配置文件C:\Program Files\MongoDB\Server\4.0\bin\mongod.cfg,完全没用到你手动指定的--replSet等副本集参数。你需要先停止这个冲突的服务:
- 打开管理员权限的命令提示符,执行:
net stop MongoDB - 或者通过
services.msc找到MongoDB服务,右键选择停止。
2. 确保副本集启动参数正确生效
有两种可靠方式让mongod以副本集模式启动:
方式一:修改配置文件(推荐用于长期服务)
编辑C:\Program Files\MongoDB\Server\4.0\bin\mongod.cfg,添加或修改以下配置项(注意Windows路径用双反斜杠):
storage: dbPath: "C:\\SpeQueRS\\rsSpeQue1" # 替换成你实际的数据库目录绝对路径 journal: enabled: true smallFiles: true # 对应你原来的--smallfiles参数 net: bindIp: 127.0.0.1 port: 27017 replication: replSetName: "rsSpeQue" oplogSizeMB: 128 # 对应你原来的--oplogSize参数 systemLog: destination: file logAppend: true path: "C:\\Program Files\\MongoDB\\Server\\4.0\\log\\mongod.log"
保存后,重启服务:net start MongoDB
方式二:命令行直接启动(适合快速测试)
确保服务已经停止,然后执行正确的命令(用绝对路径并包裹双引号,避免路径解析错误):
mongod --replSet rsSpeQue --port 27017 --bind_ip localhost --dbpath "C:\SpeQueRS\rsSpeQue1" --smallfiles --oplogSize 128
注意:如果你的
\SpeQueRS\rsSpeQue1是相对路径,很可能导致mongod找不到数据库目录,务必用绝对路径。
3. 完成副本集初始化
当mongod成功以副本集模式启动后,打开mongo shell(执行mongo命令),执行初始化命令:
rs.initiate( { _id: "rsSpeQue", members: [ { _id: 0, host: "localhost:27017" } ] } )
等待几秒后,执行rs.status()查看副本集状态:如果返回结果中ok: 1且成员状态为PRIMARY,就说明初始化成功了。
关于日志的解释
你看到的Sessions collection is not set up日志是正常现象——因为副本集还未初始化,MongoDB无法创建会话所需的config.system.sessions集合。当你完成副本集初始化后,这个集合会自动创建,相关日志也会消失。
内容的提问来源于stack exchange,提问作者Pranjal Vatsa

