竹笋

首页 » 问答 » 环境 » 大数据的搜索引擎Elasticsea
TUhjnbcbe - 2023/8/3 20:53:00

01

先看两个故障,带着问题去思考

首先大致看一下分片未分配原因:

结果显示分片大都是因为node_left导致未分配,然后通过explainAPI查看分片myindex[3]不自动分配的具体原因:

我们在explainapi中指定了只显示分片myindex[3]的信息,诊断结果的主要信息如下:

意味着Elasticsearch找到了这个分片在磁盘的数据,但是由于分片数据不是最新的,无法将其分配为主分片。

分片分配失败,查看日志有如下报错:

产生该错误的原因是副分片与主分片sync_id相同,但是doc数量不一样,导致recovery失败。造成sync_id相同,但doc数量不同的原因可能有多种,例如下面的情况:

1.写入过程使用自动生成docid

2.主分片写doc完成,转发请求到副分片

3.在此期间,并行的一条deletebyquery删除了主分片上刚刚写完的doc,同时副分片也执行了这个删除请求

4.主分片转发的索引请求到达副分片,由于是自动生成id的,副分片将直接写入该doc,不做检查。最终导致副分片与主分片doc数量不一致。

A、B两个案例的解决方式如何?别急,我们先梳理一下RED与YELLOW问题

02

正文:RED与YELLOW

集群RED和YELLOW是Elasticsearch集群最常见的问题之一,无论RED还是YELLOW,原因只有一个:有部分分片没有分配。

如果有一个以上的主分片没有被分配,集群以及相关索引被标记为RED状态,如果所有主分片都已成功分配,有部分副分片没有被分配,集群以及相关索引被标记为YELLOW状态。

对于集群RED或YELLOW的问题诊断推荐使用ClusterAllocationExplainAPI,该API可以给出造成分片未分配的具体原因。例如,如下请求可以返回第一个未分配的分片的具体原因:

也可以只查看特定分片未分配的原因:

引用一个

1
查看完整版本: 大数据的搜索引擎Elasticsea