MongoDB PSSSA集群PSA状态下HMAC密钥刷新失败致查询异常问询
问题:MongoDB PSSSA架构缩为PSA后主节点重启后查询失败异常
场景描述
- 部署环境:Kubernetes下的MongoDB 8.0.6社区版,初始架构为PSSSA(1主节点、3从节点、1仲裁节点)
- 触发条件:2个从节点宕机,集群仅剩PSA(主、从、仲裁)架构;多次重启主节点后出现异常
异常现象
- 所有数据库查询均失败,应用统一报错
Failed to refresh key cache - 主节点日志输出以下错误:
"ctx":"monitoring-keys-for-HMAC","msg":"setting timestamp read source","attr":{"readSource":"kMajorityCommitted","provided":"none"
"ctx":"monitoring-keys-for-HMAC","msg":"setting timestamp read source","attr":{"readSource":"kNoTimestamp","provided":"none"
"ctx":"monitoring-keys-for-HMAC","msg":"Failed to refresh key cache","attr":{"error":"ReadConcernMajorityNotAvailableYet: Read concern majority reads are currently not possible.
- 集群全局读关注已配置为
local,但密钥刷新流程强制使用majority读关注 - 仅恢复一个从节点、集群回到支持
majority读的状态后,服务自动自愈,异常消失
疑问
该现象是否为预期行为?是否存在遗漏的配置项?
分析结论
这是预期行为,核心原因如下:
- MongoDB的HMAC密钥刷新逻辑(对应
keys_collection_manager.cpp中的相关实现)默认使用majority读关注读取system.keys集合,该逻辑不受全局读关注配置的影响 - PSA架构下,仲裁节点不存储数据,仅主节点+单个从节点无法满足
majority读的仲裁条件(无法确认多数节点已提交数据),因此密钥刷新流程失败 - 密钥刷新失败会导致所有依赖密钥的数据库操作(查询、写入等)无法执行,直到集群恢复足够节点以支持
majority读
目前没有配置项可以修改密钥刷新流程的读关注级别,只能通过保证集群节点数量满足majority读要求来避免该问题。
内容的提问来源于stack exchange,提问作者sakthivel C
相关产品推荐
相关产品推荐

