程序猿面试,Elasticsearch被坑被虐的体无完肤...

服务器
Elasticsearch 使用 ES_JAVA_OPTS 环境变量来配置JVM,比较常用的配置为 Xms,最小堆内存,Xmx,最大堆内存,设置的建议是什么?

 [[353783]]

本文转载自微信公众号「小明菜市场」,作者小明菜市场。转载本文请联系小明菜市场公众号。

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/ 获取单个索引的健康状态GET /_cluster/allocation/explain 返回第一个未分配分片的原因

集群不健康排查流程

  1. 在节点离线以后,有可能因为节点数量不够,导致分片无法分配,此时需要增加新的分片,让其重新分配。
  2. 索引配置错误,分片规则配置错误,导致无法分配,这个时候需要重新配置索引,重新配置分片。
  3. 磁盘空间不足:当产生磁盘空间不足的时候,有可能也会导致分配失败,这个时候需要重新划分新的磁盘空间。出现的错误为 DANGLING_INDEX_IMPORTE
  4. 当出现 EXISTING_INDEX_RESTORED 错误时候,索引被关闭,需要把索引删除,再恢复。

节点诊断

节点诊断API

  1. GET /_cat/nodes?v 查看节点到基本信息即负载情况 
  2. GET /_nodes/stats/indices 查看节点的索引详情 
  3. POST /_cache/clear 清除节点缓存 

节点内存问题

Elasticserach 集群长时间GC可能会导致集群变慢,产生OOM,甚至产生离线,这个时候需要进行诊断,一般由以下这几种情况会产生节点内存OOM

  1. 缓存占用过多内存。
  2. 大量复杂的嵌套聚合可能引发频繁GC
  3. 有些时候需要配置断路器用来限制请求的查询,避免出现大量的OOM

Shard

Elasticsearch把一个索引分成多个Shard存储。一般建议单个shard大小为20G到50G,对于普通搜索类的数据控制在20G,日志数据控制在50G,每个节点数据控制在2T。

相关API

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

深度分页

分页有三种方式

from + size

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

scroll API

scroll 类似于sql的游标,查询的时候指定scroll=时间参数使用,返回的结果带上scroll_id 下次查询的时候只需要指定scroll_id 即可。

  1. POST /<index>/_search?scroll=1m 
  2.     "size": 100, 
  3.     "query": { 
  4.         "match" : { 
  5.             "title" : "elasticsearch" 
  6.         } 
  7.     } 
  8.  
  9. POST /_search/scroll  
  10.     "scroll" : "1m",  
  11.     "scroll_id" : "DXF1ZXJ5QW5kRmV0Y2gBAAAAAAAAAD4WYm9laVYtZndUQlNsdDcwakFMNjU1QQ=="  

Search After API

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

  1. GET <index>/_search 
  2.     "size": 10, 
  3.     "query": { 
  4.         "match" : { 
  5.             "title" : "elasticsearch" 
  6.         } 
  7.     }, 
  8.     "search_after": [1463538857, "654323"], 
  9.     "sort": [ 
  10.         {"date""asc"}, 
  11.         {"_id""asc"
  12.     ] 

 

责任编辑:武晓燕 来源: 小明菜市场
相关推荐

2020-05-12 11:05:54

MySQL索引数据库

2020-06-17 08:53:19

Redis集群SSH

2020-09-25 08:58:43

推荐系统业务

2015-09-16 09:57:41

swoolePHP程序员

2015-08-25 15:58:33

编程集锦

2021-09-29 09:07:22

Docker 日志容器

2021-07-16 07:57:35

SpringBootOpenFeign微服务

2020-07-17 09:58:31

Python开发工具

2017-10-24 12:32:03

小程序APPbug

2021-05-12 13:40:16

JVM调优经验

2022-04-08 08:48:16

线上事故日志订阅者

2022-12-08 09:34:26

开发操作

2018-03-26 11:14:13

程序猿bug代码

2021-02-05 12:34:33

线程池系统

2020-03-20 08:00:32

代码程序员追求

2019-04-23 11:21:57

ERP系统管理信息化

2021-01-22 05:35:19

Lvm模块Multipath

2012-07-09 11:17:19

2019-10-16 16:56:16

小程序BAT微信

2021-12-29 06:07:59

微信安卓腾讯
点赞
收藏

51CTO技术栈公众号