乐趣区

关于java:面试-程序猿面试Elasticsearch被坑被虐的体无完肤

Java 相干

问:Elasticsearch 应用 ES_JAVA_OPTS 环境变量来配置 JVM,比拟罕用的配置为 Xms,最小堆内存,Xmx,最大堆内存,设置的倡议是什么?答:这两个值的最佳实际是替换 2g 为应用物理机或者虚拟机的内存的一半

分布式相干

问:分布式个别应用几个节点:答:分布式一半应用奇数个节点,因为如果咱们集群中有三个节点,ABC,如果 A 和 B,C 失联,那么 B 和 C 会发现连贯不上 A,就会标记 A 失联,而他们能够选举新的主节点,所以分布式系统个别都应用 2n+1 其中 n >0 个节点,生产零碎中,起码为 3 个节点。

集群衰弱度

集群衰弱度分为分片衰弱度,索引衰弱度,集群衰弱度,指标分为绿,黄,红,三个等级。

分片衰弱度

红:至多一个主分片没有被调配。黄:至多一个正本调配没有被调配 绿:主副分片都失常调配。

索引衰弱度

索引衰弱度是此分片中最差的衰弱度。

集群衰弱度

集群衰弱度是此集群上索引中最差的衰弱度。
衰弱度相干 API

 GET /_cluster/health 获取集群的衰弱状态
GET /_cluster/health?level=indices 获取所有索引的衰弱状态
GET /_cluster/health/<index> 获取单个索引的衰弱状态
GET /_cluster/allocation/explain 返回第一个未调配分片的起因 

集群不衰弱排查流程

在节点离线当前,有可能因为节点数量不够,导致分片无奈调配,此时须要减少新的分片,让其重新分配。
索引配置谬误,分片规定配置谬误,导致无奈调配,这个时候须要重新配置索引,重新配置分片。
磁盘空间有余:当产生磁盘空间有余的时候,有可能也会导致调配失败,这个时候须要从新划分新的磁盘空间。呈现的谬误为 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

 GET /_cat/shards/<index> 查看 Shard 信息
POST /<alias>/_rollover/<target-index> 当索引满足某些条件时(如数据量太大)主动切到新的索引,非常适合无奈预估大小的工夫序列类索引
POST /<index>/_forcemerge 强制合并索引数据
POST /<index>/_shrink/<target-index> 新建索引并缩小主分片数量
POST /<index>/_split/<target-index> 新建索引并减少主分片数量
POST /_reindex 重建索引 

深度分页

分页有三种形式

from + size

from 定义数据偏移量,size 定义数据获取量,相似于 sql 的 offset 和 limit。

scroll API

scroll 相似于 sql 的游标,查问的时候指定 scroll= 工夫参数应用,返回的后果带上 scroll_id 下次查问的时候只须要指定 scroll_id 即可。

 POST /<index>/_search?scroll=1m
{
    "size": 100,
    "query": {
        "match" : {"title" : "elasticsearch"}
    }
}

POST /_search/scroll 
{
    "scroll" : "1m", 
    "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ==" 
} 

Search After API

Search After API 用作前一次后果作为下一次的查问条件,在查问体重应用 search_after 参数,示例如下

 GET <index>/_search
{
    "size": 10,
    "query": {
        "match" : {"title" : "elasticsearch"}
    },
    "search_after": [1463538857, "654323"],
    "sort": [{"date": "asc"},
        {"_id": "asc"}
    ]
} 

看完三件事❤️

如果你感觉这篇内容对你还蛮有帮忙,我想邀请你帮我三个小忙:

点赞,转发,有你们的『点赞和评论』,才是我发明的能源。

关注公众号『Java 斗帝』,不定期分享原创常识。

同时能够期待后续文章 ing????

退出移动版