MongoDB 分片集群 – mongos 启动失败

问题现象

mongos 服务异常终止,所有日志查看正常,重启 mongos 直接挂掉。

影响版本

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

问题原因

# 由于config节点无法正常刷新签名密钥导致。
- 正常情况下存在 2 个密钥
	- 正在使用的 -- 将在 90 天内过期
	- 即将使用的 -- 将在 180 天内过期

- SERVER-52654 导致 config 无法正常刷新密钥,导致现有密钥过期后 mongos 将崩溃。

基本信息检查

  • 内存是否充足
free -mh
  • mongos 日志查看
tail -200 mongos.log | less

config 过期检查

  • 登录 mongo config 实例
mongo mongo_ip:mongo_config_port/admin -u'mongo_user' -p'monog_pass'
  • 创建 Roles
use admin;
db.createRole({
  role: "query_keys",
  privileges: [
     { resource: { db: "admin", collection: "system.keys"}, actions: [ "find" ] },
  ],
  roles: [  ]
});
  • 授权 Roles
db.grantRolesToUser("mongo_user", ["query_keys"])
  • 查看 mongos 过期时间
config:PRIMARY> db.getSiblingDB("admin").system.keys.find().map(k => { return { _id: k._id, purpose: k.purpose, expiresAt: new Date(k.expiresAt.getTime()*1000) }})
[
	{
		"_id" : NumberLong("7040385209933496335"),
		"purpose" : "HMAC",
		"expiresAt" : ISODate("2022-05-27T09:24:56Z")
	},
	{
		"_id" : NumberLong("7071440297384738820"),
		"purpose" : "HMAC",
		"expiresAt" : ISODate("2022-08-25T09:24:56Z")
	}
]

解决办法

4.2.12 后解决

参考

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐