前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ElasticSearch的坑

ElasticSearch的坑

作者头像
十毛
发布2019-03-27 15:04:14
9120
发布2019-03-27 15:04:14
举报

ElasticSearch使用时,一开始因为数据量比较小,使用都比较随意,也没有在意很多参数,只要实现高可用就可以了,但是随着数据量的不断增大,过程中遇到了一系列的问题

遇到的问题

  • 创建索引太慢

Elasticsearch创建分片的速度会随着集群内分片数的增加而变慢。以ES 5.5.2版本、3节点集群为例,在默认配置下,当集群分片数超过1w时,创建index的耗时一般在几十秒甚至以上。

ElasticSearch默认是5个分片,1个副本,相当于每创建一个索引就会产生10个分片。一开始没有问题,后来索引数目达到了4000左右(其中大部分数据量都很小,几十M而已),也就是有超过1万的分片存在,所有节点都需要维护分片和节点的关系,而且为了保证一致性,都是单线程更新,所以效率很低。

  • 重启ElasticSearch节点出现大量未分配分片

当一个节点不可达后,为了尽快恢复集群的高可用特性,ElasticSearch会尽快地重新调整分片,没有副本的,也会全量复制分片。当节点恢复后,集群又会再次重新调整分片,达到负载均衡的目的

修改延迟分配时间为5分钟

代码语言:javascript
复制
PUT _all/_settings
{
  "settings": {
    "index.unassigned.node_left.delayed_timeout": "5m"
  }
}
  • 关闭一个节点后,集群状态变成red

当时有部分索引的主分片一直没有分配,导致集群处于red状态。当时没有仔细分析原因,只是快速地把那部分索引进行重建处理(从其他数据源导入)。当时还不知道怎么查看未分配的原因,其实可以查看分片详情命令,看到未分配的原因

代码语言:javascript
复制
#分片详情命令,查看未分配的原因
_cat/shards?h=index,shard,prirep,state,unassigned.reason&v

采用的措施有:手工分配,但是系统表示不支持命令allocate

最佳实践

  • 索引很小,shard设置为1,replica也是1就可以了
  • ElasticSearch推荐的最大JVM堆空间是30~32G
  • 一般一个分片不要超过50GB
  • 索引稳定后,可以使用forcemerge,提高检索效率
  • shrink index API

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.01.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 遇到的问题
  • 最佳实践
  • 参考
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档