本地配置MongoDB replication关闭CMD后 节点无法启动连接报错
故障原因
问题本质是两点:一是没有将MongoDB节点注册为系统服务,直接通过CMD启动的进程会随CMD关闭被终止,不会后台驻留或开机自启;二是手动重启节点时启动参数配置错误,导致节点无法读取之前的复制集元数据,以单机模式运行,自然无法识别复制集配置。
修复步骤
- 先终止所有正在运行的MongoDB进程,避免端口、文件占用冲突。
- 启动节点时必须携带和初始配置完全一致的参数,参考格式如下(路径、复制集名称替换为你自己的配置):
注意启动顺序优先启主节点27017,再启两个从节点,否则从节点会因找不到主节点无法正常加入集群。# 主节点启动命令 mongod --port 27017 --dbpath C:\your\path\db27017 --replSet rs0 # 从节点1启动命令 mongod --port 27020 --dbpath C:\your\path\db27020 --replSet rs0 # 从节点2启动命令 mongod --port 27021 --dbpath C:\your\path\db27021 --replSet rs0 - 主节点启动成功后进入Mongo Shell,若执行
rs.status()仍提示不存在复制集,重新执行初始化命令即可恢复:
等待1-2分钟后再次执行rs.initiate( { _id: "rs0", members: [ { _id: 0, host: "localhost:27017" }, { _id: 1, host: "localhost:27020" }, { _id: 2, host: "localhost:27021" } ] } )rs.status(),即可看到所有节点的正常状态。
永久解决自动启动问题
将每个MongoDB节点注册为Windows系统服务,配置开机自启,无需每次手动通过CMD启动:
# 注册主节点服务,路径、服务名替换为自己的配置 mongod --port 27017 --dbpath C:\your\path\db27017 --replSet rs0 --install --serviceName "MongoDB27017" --serviceDisplayName "MongoDB实例27017" # 注册从节点服务 mongod --port 27020 --dbpath C:\your\path\db27020 --replSet rs0 --install --serviceName "MongoDB27020" --serviceDisplayName "MongoDB实例27020" mongod --port 27021 --dbpath C:\your\path\db27021 --replSet rs0 --install --serviceName "MongoDB27021" --serviceDisplayName "MongoDB实例27021"
注册完成后在Windows服务列表中找到对应服务,设置启动类型为「自动」即可。
报错截图参考


内容的提问来源于stack exchange,提问作者Waqar
相关产品推荐
相关产品推荐

