ElasticSearch的坑

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

遇到的问题

  • 创建索引太慢

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

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

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

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

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

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

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

#分片详情命令,查看未分配的原因
_cat/shards?h=index,shard,prirep,state,unassigned.reason&v

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

最佳实践

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

参考

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • MongoDB复制集部署

    安装后会创建两个默认的文件夹 /var/lib/mongo(数据目录) /var/log/mongodb (日志目录)

    十毛
  • JMeter5性能测试

    上面的测试,每次发送的URL请求都是同一个,可能因为缓存等原因导致性能数据偏差。 可以使用读取CSV文件的方式,对每个请求构造不同的请求。

    十毛
  • ResponseEntity为单独接口实现灵活返回值控制

    十毛
  • 『互联网架构』软件架构-Sharding-Sphere分库分表(66)

    水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例:订单数据根据主键尾数拆分为10张表,分别是torder0到torder9,他们的逻辑表名为t_order...

    IT故事会
  • Elasticsearch的索引、分片、文档、副本

    我们往 Elasticsearch 添加数据时需要用到 索引 —— 保存相关数据的地方。 索引实际上是指向一个或者多个物理 分片 的 逻辑命名空间 。 一个 分...

    苦咖啡
  • 以太坊分片Sharding FAQ

    目前,在所有的区块链协议中每个节点存储所有的状态(账户余额,合约代码和存储等等)并且处理所有的交易。这提供了大量的安全性,但极大的限制了可扩展性:区块链不能处理...

    芒果2018
  • RChain的跨分片交易算法

    岑玉海
  • 008.MongoDB分片群集概念及原理

    Mongodb另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。

    木二
  • 宜信开源|关系型数据库全表扫描分片详解

    导读:数据总线(DBus)专注于数据的实时采集与实时分发,可以对IT系统在业务流程中产生的数据进行汇聚,经过转换处理后成为统一JSON的数据格式(UMS),提供...

    宜信技术学院
  • 水平分库分表的关键问题及解决思路

    关系型数据库本身比较容易成为系统性能瓶颈,单机存储容量、连接数、处理能力等都很有限,数据库本身的“有状态性”导致了它并不像Web和应用服务器那么容易扩展。在互联...

    吴生

扫码关注云+社区

领取腾讯云代金券