我想用零停机时间替换和索引,如ES留档中所述。
我这样做是通过:
my_index_v2
POST /_aliases
{
"actions": [
{ "remove": { "index": "*", "alias": "my_index" }},
{ "add": { "index": "my_index_v2", "alias": "my_index" }}
]
}
这按预期工作,除非它在404响应中随机失败。错误消息是:
{
"error": {
"root_cause": ... (same)
"type": "index_not_found_exception",
"reason": "no such index",
"resource.type": "index_or_alias",
"resource.id": "my_unrelated_index_v13",
"index": "my_unrelated_index_v13"
},
"status": 404
}
整个操作每隔几分钟周期性地发生一次。与所描述的操作类似的操作可能会在集群中的其他别名/索引上同时发生。错误每隔几个小时随机发生一次。
这些操作会互相干扰是有原因的吗?这是怎么回事?
编辑:最后澄清了DELETE步骤。
这很难在本地环境中重现,因为它似乎只发生在高度并发的场景中。然而…正如@Eirini Graonidou在评论中指出的,这看起来真的像一个ESbug,在PR23153中解决
从拉取请求(强调我的):
当错误请求发送到Elasticsearch时,这会导致令人费解的响应(如果名为bad-request的索引不存在,则它会产生索引未找到异常,否则会使用名为bad-request的索引的索引设置进行响应)。
这并不能解释“错误请求”的情况,但肯定解释了为什么错误消息没有意义。
更重要的是:升级elasticsearch解决了这个问题