面试 | 程序猿面试,Elasticsearch 被坑被虐的体无完肤...
Java 相关
问:Elasticsearch 使用 ES_JAVA_OPTS 环境变量来配置 JVM,比较常用的配置为 Xms,最小堆内存,Xmx,最大堆内存,设置的建议是什么?答:这两个值的最佳实践是替换 2g 为使用物理机或者虚拟机的内存的一半
分布式相关
问:分布式一般使用几个节点:答:分布式一半使用奇数个节点,因为如果我们集群中有三个节点,ABC,如果 A 和 B,C 失联,那么 B 和 C 会发现连接不上 A,就会标记 A 失联,而他们可以选举新的主节点,所以分布式系统一般都使用 2n+1 其中 n>0 个节点,生产系统中,最少为 3 个节点。
集群健康度
集群健康度分为分片健康度,索引健康度,集群健康度,指标分为绿,黄,红,三个等级。
分片健康度
红:至少一个主分片没有被分配。黄:至少一个副本分配没有被分配 绿:主副分片都正常分配。
索引健康度
索引健康度是此分片中最差的健康度。
集群健康度
集群健康度是此集群上索引中最差的健康度。
健康度相关 API
集群不健康排查流程
在节点离线以后,有可能因为节点数量不够,导致分片无法分配,此时需要增加新的分片,让其重新分配。
索引配置错误,分片规则配置错误,导致无法分配,这个时候需要重新配置索引,重新配置分片。
磁盘空间不足:当产生磁盘空间不足的时候,有可能也会导致分配失败,这个时候需要重新划分新的磁盘空间。出现的错误为 DANGLING_INDEX_IMPORTE
当出现 EXISTING_INDEX_RESTORED 错误时候,索引被关闭,需要把索引删除,再恢复。
节点诊断
节点诊断 API
GET /_cat/nodes?v 查看节点到基本信息即负载情况
GET /_nodes/stats/indices 查看节点的索引详情
POST /_cache/clear 清除节点缓存
节点内存问题
Elasticserach 集群长时间 GC 可能会导致集群变慢,产生 OOM,甚至产生离线,这个时候需要进行诊断,一般由以下这几种情况会产生节点内存 OOM
缓存占用过多内存。
大量复杂的嵌套聚合可能引发频繁 GC
有些时候需要配置断路器用来限制请求的查询,避免出现大量的 OOM
Shard
Elasticsearch 把一个索引分成多个 Shard 存储。一般建议单个 shard 大小为 20G 到 50G,对于普通搜索类的数据控制在 20G,日志数据控制在 50G,每个节点数据控制在 2T。
相关 API
深度分页
分页有三种方式
from + size
from 定义数据偏移量,size 定义数据获取量,类似于 sql 的 offset 和 limit。
scroll API
scroll 类似于 sql 的游标,查询的时候指定 scroll=时间参数使用,返回的结果带上 scroll_id 下次查询的时候只需要指定 scroll_id 即可。
Search After API
Search After API 用作前一次结果作为下一次的查询条件,在查询体重使用 search_after 参数,示例如下
看完三件事❤️
如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:
点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。
关注公众号 『 Java 斗帝 』,不定期分享原创知识。
同时可以期待后续文章 ing🚀
评论