Atlas Search $vectorSearch因服务账号密钥过期触发认证失败求助
解决MongoDB Atlas M10集群$vectorSearch认证失败问题
问题背景
在GCP平台的MongoDB Atlas M10集群(MongoDB 8.0.23)中,所有用户执行$vectorSearch查询时均返回如下错误:
PlanExecutor error during aggregation :: caused by :: Authentication failed. {'code': 8, 'codeName': 'UnknownError'}
但相同凭据下,以下操作可正常执行:
client[db].embedded_movies.estimated_document_count() # → 3483 OK list(client[db].embedded_movies.list_search_indexes()) # → vectorPlotIndex, READY, queryable=true client.admin.command('connectionStatus') # → roles: atlasAdmin, readWriteAnyDatabase, ...
时间线显示问题与组织服务账号密钥过期强相关:
21:34Z (SA secret expires) 23:27Z Atlas发送"Organization Service Account Secrets have expired"告警 23:32Z CLUSTER_UPDATE_STARTED 23:34Z HOST_MONGOT_RESTARTED (shard 0) 23:36Z HOST_MONGOT_RESTARTED (shard 1) 23:37Z HOST_MONGOT_RESTARTED (shard 2) 23:37Z CLUSTER_UPDATE_COMPLETED 23:38Z+ $vectorSearch开始失败
已尝试的无效操作:
- 通过Atlas Admin API删除并重建索引
- 使用不同权限用户测试
- 更换客户端机器/pymongo版本
- 依赖Atlas自动触发的mongot重启
原因分析
从时间线和现象判断,mongot(Atlas Search进程)未正确刷新内部缓存的服务账号密钥,导致执行$vectorSearch时,mongot与MongoDB节点间的内部认证失败。常规的mongot自动重启未清除该缓存。
解决方案
1. 强制刷新mongot认证缓存
- Atlas UI操作:进入集群的「Search」标签页,找到目标vector索引,点击「重新构建」(Rebuild)。此操作会触发mongot重新加载认证凭据与索引配置。
- Atlas Admin API操作:调用
POST /groups/{groupId}/clusters/{clusterName}/mongot/restart接口,指定所有分片的mongot进程重启(需拥有clusterAdmin或更高权限)。
2. 验证服务账号密钥状态
- 登录MongoDB Atlas组织控制台,确认已生成并激活新的服务账号密钥。
- 检查集群所属项目是否关联了有效的组织服务账号,确保权限配置正确。
3. 临时规避方案
创建新的vector索引(与旧索引配置一致),将查询中的index参数切换为新索引名称。新索引的构建过程会强制mongot加载最新的认证信息。
4. 官方支持介入
若上述操作均无效,直接提交MongoDB Atlas支持工单,提供完整的事件日志、错误栈和集群信息,请求官方强制清除mongot的内部认证缓存。
内容的提问来源于stack exchange,提问作者Albert Gil López
相关产品推荐
相关产品推荐

