Milvus集合搜索报错:连接被拒绝且集合未加载
Milvus 2.4.0 查询正常但搜索报错问题排查
错误信息
[2024-08-07 10:53:27,109] WARNING in decorators: [search] retry:9, cost: 3.00s, reason: <_InactiveRpcError: StatusCode.UNAVAILABLE, failed to connect to all addresses; last error: UNKNOWN: ipv4:172.16.200.46:19530: Failed to connect to remote host: Connection refused> [2024-08-07 10:53:30,126] ERROR in decorators: RPC error: [search], <MilvusException: (code=101, message=failed to search: collection not loaded[collection=451674119090946895])>, <Time:{'RPC start': '2024-08-07 10:53:17.306848', 'RPC error': '2024-08-07 10:53:30.126018'}>
代码片段
from config.config import * from pymilvus import ( connections, utility, Collection, FieldSchema, CollectionSchema, DataType) connections.connect("default", host=MILVUS_HOST, port=MILVUS_PORT) collection = Collection(COLLECTION_NAME) collection.load() list_collection = utility.list_collections() # Query works fine res_query = collection.query( expr="id > 1", output_fields=['id'], timeout=5.0 ) # Search raises error img = cv2.imread('image_test/test.png') embedding_vec = feature_extraction(img) search_params = {"metric_type": "COSINE", "params": {"nprobe": 10}} res_search = collection.search( data=[embedding_vec], anns_field="vector", param=search_params, expr="active in [1]", output_fields=['id'], limit=TOP_K)
环境信息
- Milvus Version: 2.4.0
- Host: ipv4:172.16.200.46:19530
问题原因分析
Milvus中**查询(query)仅与协调器(Coord)交互,而搜索(search)**需要客户端直接与查询节点(Query Node)通信。问题核心是客户端无法连接到查询节点,或集合未在查询节点上完成加载:
collection.load()调用后未等待加载完成就执行搜索,导致集合实际未加载到查询节点- 查询节点服务异常,或其默认端口(19531)未对客户端开放
- 分布式部署下,Coord返回给客户端的查询节点地址不可访问
- 集合数据量过大,加载超时未完成
解决步骤
1. 确认集合加载状态
调用工具函数查看加载状态,或在加载后等待完成:
collection.load() # 等待加载完成,超时时间可根据集合大小调整 collection.wait_for_load_complete(timeout=60) # 验证加载状态 print(utility.load_state(COLLECTION_NAME))
2. 检查查询节点可用性
- 用
telnet 172.16.200.46 19531测试客户端能否访问查询节点默认端口 - 通过Milvus控制台或命令行工具确认查询节点是否正常运行
- 若使用自定义端口,检查Milvus配置文件中
query.port的设置并确保端口开放
3. 调整部署与连接配置
- 分布式部署场景下,确保查询节点的IP地址可被客户端访问(避免内网地址无法穿透)
- 重启Milvus服务,排查查询节点是否存在启动异常
4. 优化集合加载参数
针对大数据量集合,调整加载时的资源配置:
# 指定副本数加载(需集群有足够查询节点) collection.load(replica_number=1)
内容的提问来源于stack exchange,提问作者tmandyai
相关产品推荐
相关产品推荐

