MongoDB创建副本集进程卡住且报Failed to refresh key cache错误如何解决
问题原因说明
该NotYetInitialized报错不属于服务启动失败的致命错误,是副本集模式启动后的正常提示:MongoDB以副本集模式启动后,必须完成副本集初始化配置才会正常对外提供服务,未初始化前会周期性打印该日志等待配置操作,看起来就像启动卡住。
解决步骤
- 保持当前启动的mongod进程不动,新开一个终端窗口,执行对应版本的客户端命令连接本地27017实例:
高版本MongoDB用mongosh --port 27017,低版本用mongo --port 27017 - 在Mongo Shell中执行副本集初始化命令,单节点副本集直接执行以下代码即可:
rs.initiate({ _id: "myReplicaSet", members: [ { _id: 0, host: "localhost:27017" } ] })
注意:配置中的_id值必须和启动命令里--replSet后面的副本集名称完全一致,以上代码已经和你使用的启动参数匹配,无需修改
- 等待10秒左右,执行
rs.status()查看副本集状态,返回结果中stateStr字段为PRIMARY或者SECONDARY就说明初始化完成,原启动进程的日志也不会再刷新key cache相关报错。
常见异常排查
- 执行rs.initiate报错提示端口不通:先检查本地hosts配置,确保localhost能正常解析到127.0.0.1,也可以直接把初始化配置里的host改成
127.0.0.1:27017重试 - 初始化后还是报错:先停止当前mongod进程,备份好需要的旧数据后删除dbpath目录下的所有文件,再重新执行启动命令和初始化操作,避免旧数据冲突
- 多节点副本集配置:初始化时要把所有节点的host都写到members数组里,且确保各节点之间网络互通、对应端口没有被防火墙拦截
内容的提问来源于stack exchange,提问作者Mubashir 'Mobi' Ayub
相关产品推荐
相关产品推荐

