gpt4 book ai didi

mongodb - 将 mongoDB 集群转换为副本集时出错

转载 作者:行者123 更新时间:2023-12-04 17:29:42 25 4
gpt4 key购买 nike

我们按照 instructions 将具有单个分片的集群转换为副本集,但是一旦我们在没有 --shardsvr 选项的情况下重新启动第一个辅助节点(总共 3 个辅助节点 + 1 个主节点),所有数据库客户端(已经直接连接)到 replSet 没有问题,而不是到 mongoS 路由器)在查询数据库时收到以下错误:
Query failed with error code 211 and error message 'Cache Reader No keys found for HMAC that is valid for time: { ts: Timestamp(1585205456, 422) } with id: 6802955028354040016' on server our-db-server.domain.com:27017
因此,我们立即扭转了这一变化。
这个错误使我们无法将单分片集群转换为独立的 replSet。
如何进行?
谢谢!

最佳答案

我认为可能的情况是 vector clock clusterTime副本和/或您的客户端之间不同步。
section specifically处理如何将 clusterTime 用于 HMAC signatures .
clusterTime基本上每次写入 PRIMARY 时都会打勾,因此如果您以某种方式更改集群的配置,则会捕获一个勾号。如果您的客户端没有正确更新其 clusterTime在那个滴答之后,它可能会被发现试图使用 HMAC 的旧 key 。签署其请求。
上面提到的集群和客户端可能有问题 heartbeat不是在校正时钟。
也可能是您的客户端库在按照此票证进行身份验证握手时未更新 clusterTime:https://jira.mongodb.org/browse/GODRIVER-1584 .

我只是要在这里做一些笔记,因为我在从 3.6 升级到 4.0.21 时也看到了这个错误。
我发现这是通过使用 sourcegraph 搜索 repo 从 MongoDB 返回的。 .
错误来自 KeysCollectionManager::getKeysForValidation ,并 Root 于 KeysCollectionCache::getInternalByKeyId方法。
这个特别KeysCollectionManager似乎只为副本集实例化自己。它使用 kKeyManagerPurposeString 实例化,其值始终为“HMAC”。这是目的,我不确定。
globalsign/mgo go 客户端的 fork 有一些测试工具,表明他们以前遇到过这种情况,但不一定知道它来自哪里。他们假设只有当您的副本集使用内部身份验证 key 文件时才会发生这种情况。
我希望这种情况可以通过多次重试来解决,直到成功。我敢打赌,这主要是集群未处于就绪状态的问题。
我的情况与问题大不相同,因为我使用的是没有分片的独立副本集。我希望重试请求会有所帮助,但这可能是需要在 MongoDB 本身上解决的集群成员资格问题。
post in the MongoDB community可能表明这是一个集群内部问题,寻找可疑的 MongoDB 日志将是关键。

关于mongodb - 将 mongoDB 集群转换为副本集时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60876115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com