1、问题现象
Es 查询 客户端报错 ,
Es 集群有多台机器,
Es 客户端查询,偶报 Search document failed at index aaa.bbbindex :no such index [aaa.bbbindex]
过了一会(分钟级),问题自己消失
过了一会,自己恢复了
2、问题排查
- 基础查询-主网环境报错 报错表结构不存在
curl --location --request GET 'http://127.0.0.1:9200/aaa.bbbindex/_search' \
--header 'Content-Type: application/json' \
--data '{
"query":{
"match_all": {}
}
}'
- 基础查询-测试环境报错 报错表结构不存在
curl --location --request GET 'http://127.0.0.1:9200/aaa.bbbindex/_search' \
--header 'Content-Type: application/json' \
--data '{
"query":{
"match_all": {}
}
}'
- 查看-测试环境集群的所有的索引-确认索引存在,颜色 yellow
curl -X GET 'http://127.0.0.1:9200/_cat/indices?v&pretty'
- 测试环境使用索引判定查询-索引存在
curl -X GET 'http://127.0.0.1:9200/aaa.bbbindex'
- 主网环境使用索引判定查询-索引存在
curl -X GET 'http://127.0.0.1:9200/aaa.bbbindex'
-
确认无发版、基建无变动
-
服务自动恢复
-
查看-主网环境集群的所有的索引-确认索引存在,颜色 green
curl -X GET 'http://127.0.0.1:9200/_cat/indices?v&pretty'
- 基础查询-测试环境ok
curl --location --request GET 'http://127.0.0.1:9200/aaa.bbbindex/_search' \
--header 'Content-Type: application/json' \
--data '{
"query":{
"match_all": {}
}
}'
- 基础查询-主网环境ok
curl --location --request GET 'http://127.0.0.1:9200/aaa.bbbindex/_search' \
--header 'Content-Type: application/json' \
--data '{
"query":{
"match_all": {}
}
}'
- 进行日志回溯,发现报错集中在 某一台机器,做了流量摘除
3、问题猜想
由于服务和环境无变动,且自动恢复,不删档索引颜色,因此从 Es自身猜想,Es 副本抖动。
索引颜色状态
在Elasticsearch中,黄色的健康状态指示符表示集群或索引的某些部分可能没有完全冗余,具体来说:
黄色状态通常意味着一个或多个索引的副本分片尚未分配或未激活。这意味着数据的冗余性和高可用性暂时降低,因为只有主分片是活跃的,而副本分片(如果有的话)还没有准备好。这并不意味着数据丢失或服务中断,但集群的健壮性和性能可能不是最优。
这种情况可能由以下原因引起:
节点资源不足:集群中可能没有足够的节点或资源来承载所有的副本分片。
磁盘空间不足:节点可能没有足够的磁盘空间来存储副本分片。
集群调整:集群可能正在进行重新平衡或恢复过程,在此期间某些分片可能暂时未分配。
配置问题:索引可能被配置了过多的副本分片,超出了现有节点的承载能力。
4、问题根因
某一条客户端机器故障,做了流量摘除
5、持续观察日志
发现流量摘除后错误日志不再新增
6、后续补救
运维层面,增加特定日志告警