我们正在Docker中运行我们的测试(PHP应用程序)。有些测试使用Elasticsearch。
我们已将Elasticsearch配置为只有1个节点和1个分片(为简单起见)。这是我们添加到默认值的配置:
index.number_of_shards: 1
index.number_of_replicas: 0
有时,当测试运行时,由于以下Elasticsearch响应,它们会失败:
{
"_indices":{
"acme":{
"_shards":{
"total":1,
"successful":0,
"failed":1,
"failures":[
{
"index":"acme",
"shard":0,
"reason":"UnavailableShardsException[[acme][0] Primary shard is not active or isn't assigned to a known node. Timeout: [1m], request: delete_by_query {[acme][product], query [{\"query\":{\"term\":{\"product_id\":\"3\"}}}]}]"
}
]
}
}
}
}
从响应中提取的错误消息:
UnavailableShardsException [[acme] [0]主分片未激活或未分配给已知节点。超时:[1m],请求:delete_by_query {[acme] [product],查询[{\"查询\":{\" term \":{\&#34 ; PRODUCT_ID \":\" 3 \"}}}]}]
为什么我们的客户端无法随机连接到Elasticsearch的节点或分片?这与我们只有一个碎片的事实有关吗?这是件坏事吗?