MongoDB爱好者
垂直技术交流平台

mongos崩溃后无法重启的问题

由于近期有不同用户先后遇到SERVER-52654,做一些说明:

影响版本

所有使用MongoDB 4.2.2+,并使用了分片的集群。

问题现象

从上次重启config节点,或者重新选举90或180天后,所有mongos会同时crash,并且无法重新启动。

问题原因

该问题是由于config节点无法正常刷新签名密钥导致。正常情况下存在2个密钥,一个正在使用的,将在90天内过期,一个即将使用的将在180天内过期。SERVER-52654导致config无法正常刷新密钥,所以在现有密钥过期后mongos将崩溃。

修复版本

该问题将在4.2.12修复。4.2.12目前已发布。

规避办法

在90天内将primary节点stepDown一次即可避免该问题发生。如果想知道签名密钥的确切过期时间,可以连接到任意config节点,并执行以下脚本:

db.getSiblingDB("admin").system.keys.find().map(k => { return { _id: k._id, purpose: k.purpose, expiresAt: new Date(k.expiresAt.getTime()*1000) }})

如果存在2个密钥(一个90天内过期,一个180天内过期),则暂时不用操作;如果只有1个密钥,则应该在90天内执行stepDown切换config主节点。

由于system.keys集合需要特殊权限方可访问,如果遇到权限问题,可能需要以下脚本来创建必要的角色(将ADMIN更换为您使用的用户):

use admin;
db.createRole({
  role: "query_keys",
  privileges: [
     { resource: { db: "admin", collection: "system.keys"}, actions: [ "find" ] },
  ],
  roles: [  ]
});
db.grantRolesToUser("ADMIN", ["query_keys"])

config主节点重新选举后将产生新的过期时间,仍可通过上述脚本检查是否已刷新。

 作者介绍:

张耀星,MongoDB亚太区首席技术咨询服务顾问,MongoDB中文社区常委会委员。

2020MongoDB中文社区线上年终大会

扫描上方二维码或点击下方链接即可观看线上会议回放
http://www.itdks.com/Home/Act/apply?id=5533

MongoDB中文手册翻译正在进行中,欢迎更多朋友在自己的空闲时间学习并进行文档翻译,您的翻译将由社区专家进行审阅,并拥有署名权更新到中文用户手册和发布到社区微信内容平台。

更多问题可以添加社区助理小芒果微信(mongoingcom)咨询,进入社区微信交流群请备注“mongo”。

赞(4)
未经允许不得转载:MongoDB中文社区 » mongos崩溃后无法重启的问题

评论 抢沙发

评论前必须登录!