mongos崩溃后无法重启问题的解决方法

(编辑:jimmy 日期: 2024/12/24 浏览:2)

前言

官方文档:https://docs.mongodb.com/manual/reference/program/mongos/#bin.mongos

mongos是MongoDB shard的缩写,它是一个为应用层提供查询请求并决定数据在MongoDB分片中位置的路由服务。从应用层的角度来看,mongos的行为和一个MongoDB实例是没有区别的。

详细的配置参数,大概浏览一遍官方文档即可,需要用到的时候再去查就行了。

由于近期有不同用户先后遇到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主节点重新选举后将产生新的过期时间,仍可通过上述脚本检查是否已刷新。

总结

一句话新闻

一文看懂荣耀MagicBook Pro 16
荣耀猎人回归!七大亮点看懂不只是轻薄本,更是游戏本的MagicBook Pro 16.
人们对于笔记本电脑有一个固有印象:要么轻薄但性能一般,要么性能强劲但笨重臃肿。然而,今年荣耀新推出的MagicBook Pro 16刷新了人们的认知——发布会上,荣耀宣布猎人游戏本正式回归,称其继承了荣耀 HUNTER 基因,并自信地为其打出“轻薄本,更是游戏本”的口号。
众所周知,寻求轻薄本的用户普遍更看重便携性、外观造型、静谧性和打字办公等用机体验,而寻求游戏本的用户则普遍更看重硬件配置、性能释放等硬核指标。把两个看似难以相干的产品融合到一起,我们不禁对它产生了强烈的好奇:作为代表荣耀猎人游戏本的跨界新物种,它究竟做了哪些平衡以兼顾不同人群的各类需求呢?