启动mongos服务时触发invariant()失败中止问题求助
解决mongos启动时出现的Invariant failure globalInShutdownDeprecated()错误
我看到你启动mongos服务器时遇到了这个致命的断言错误,而且已经尝试过修复所有MongoDB节点的数据库但问题依然存在。结合你提供的日志,这个错误出现在用户权限缓存初始化的环节,咱们可以从以下几个方向排查解决:
关键错误信息回顾
2020-03-30T13:52:23.241Z F - [mongosMain] Invariant failure globalInShutdownDeprecated() src/mongo/db/auth/user_cache_invalidator_job.cpp 120 2020-03-30T13:52:23.241Z F - [mongosMain] ***aborting after invariant() failure 2020-03-30T13:52:23.254Z F - [mongosMain] Got signal: 6 (Aborted).
解决方案步骤
确保所有MongoDB组件版本完全一致
MongoDB的mongos、配置服务器mongod、分片mongod必须保持主版本号一致(比如都是4.2.x),版本不匹配很容易导致初始化时的断言错误。你可以在每个节点上执行mongod --version和mongos --version确认版本,如果有差异,把所有组件升级到同一个稳定版本后再重启mongos。清理mongos的本地缓存目录
mongos会在指定的--dbpath目录下存储路由信息、权限缓存等临时数据,这些文件损坏可能导致启动失败:- 先停止所有运行的mongos进程
- 删除mongos数据目录下的所有文件(比如你日志里的
/data/router1db/,注意别删配置服务器或分片的数据) - 重新用正确的参数启动mongos
检查mongos启动参数中的配置服务器连接字符串
确认--configdb参数的格式和地址是否正确:- 如果配置服务器是副本集模式,连接字符串必须包含副本集名称,格式为
副本集名称/节点1:端口,节点2:端口,... - 示例正确启动命令:
mongos --configdb configRS/127.0.0.1:27011,127.0.0.1:27012 --port 27017 --dbpath /data/router1db
- 如果配置服务器是副本集模式,连接字符串必须包含副本集名称,格式为
排查权限认证相关配置
这个错误和用户权限缓存初始化直接相关,如果集群启用了认证:- 确认mongos启动时加上了
--auth参数(和集群的认证配置保持一致) - 确保mongos用来连接配置服务器的用户拥有
clusterAdmin或root级别的权限 - 可以登录到配置服务器的主节点,执行
db.getSiblingDB("admin").runCommand({ flushRouterConfig: 1 })来强制刷新路由和权限缓存
- 确认mongos启动时加上了
检查系统资源与依赖库
有时候系统资源不足或依赖库损坏也会触发这类错误:- 检查服务器内存使用情况,确保mongos有足够的内存启动(可以用
free -h命令查看) - 确认MongoDB依赖的系统库(比如libssl、libcrypto)版本符合要求,没有损坏或缺失
- 检查服务器内存使用情况,确保mongos有足够的内存启动(可以用
内容的提问来源于stack exchange,提问作者Debashish Kumar
相关产品推荐
相关产品推荐

