MongoDB配置文件与命令行启动配置服务器行为差异求助
MongoDB配置服务器启动:配置文件与命令行的行为差异解析
我找到问题所在了——你的配置文件缺少了一个关键设置,而--configsvr命令行参数会自动帮你配置这个项!下面来详细拆解:
核心差异:配置服务器的标识缺失
当你使用--configsvr启动mongod时,这个参数会做两件关键的事:
- 自动将节点标识为配置服务器(设置
sharding.configsvr: true) - 默认使用端口27019(你手动指定了端口,所以这部分和配置文件一致)
但你的配置文件里完全没有sharding相关的配置,这就导致MongoDB把这个节点当成了普通的副本集节点,而非配置服务器。而配置服务器副本集的初始化规则和普通副本集不同,这就是你执行rs.initiate()时出现以下错误的原因:
> rs.initiate() { "info2" : "no configuration specified. Using a default configuration for the set", "me" : "HORUS:27019", "ok" : 0, "errmsg" : "No host described in new configuration 1 for replica set rsConfSvr maps to this node", "code" : 93, "codeName" : "InvalidReplicaSetConfig" }
修正后的配置文件
只需要在你的配置文件中添加sharding配置块,启用configsvr选项,就能和命令行启动效果一致:
systemLog: destination: file path: "G:/data/replicas/server2/logs/server1.log" logAppend: true storage: dbPath: "G:/data/replicas/server2/db" engine: wiredTiger journal: enabled: true #security: # authorization: enabled replication: oplogSizeMB: 128 replSetName: rsData # 注意:和命令行的rsConfigSvr不一致,建议统一名称避免混淆 #processManagement: # fork: true net: bindIp: 127.0.0.1 port: 27018 # 新增:标识该节点为配置服务器 sharding: configsvr: true
验证步骤
- 用修改后的配置文件重启mongod节点
- 连接节点后执行
rs.initiate(),此时应该能成功初始化,返回"ok": 1 - 执行
rs.status(),你会看到configsvr: true的标识,和命令行启动的结果一致
额外提示
另外注意你的配置文件中副本集名称是rsData,而命令行里是rsConfigSvr,虽然这不是本次报错的直接原因,但建议统一副本集名称,避免后续管理时出现混淆。
内容的提问来源于stack exchange,提问作者Tarek EZZAT
相关产品推荐
相关产品推荐

