Elasticsearch性能优化:高效管理基于时间的索引,实现冷热数据分离

本文介绍了Elasticsearch中管理基于时间的数据的滚动模式,通过滚动索引实现高效写入,利用冷热数据分离节省空间。文章详细阐述了如何设置滚动模式、滚动索引的触发条件、缩小索引以减少存储需求,并探讨了未来可能的改进方向。
摘要由CSDN通过智能技术生成

原文链接
And the big one said “Rollover” — Managing Elasticsearch time-based indices efficiently

用 Elasticsearch 来索引诸如日志事件等基于时间的数据的人可能已经习惯了“每日一索引”模式:使用以天为粒度的索引名字来存放当天的日志数据,一天过去后再建一个新索引。新索引的属性可以由索引模板来提前控制。
这种模式很容易理解并且易于实现,但是它掩盖了索引管理复杂的细节:

  • 为了达到较高的写入速度,活跃索引分片需要分布在尽可能多的节点上。
  • 为了提高搜索速度和降低资源消耗,分片数量需要尽可能地少,但是也不能有过大的单个分片进而不便操作
  • 一天一个索引确实易于清理陈旧数据,但是一天到底需要多少个分片呢?
  • 每天的写入压力是一成不变的吗?还是一天分片过多,而下一天分片不够用呢?
    在这篇文章中我将介绍新的”滚动模式“和用来实现它的 API 们,这个模式可以更加简单且高效地管理基于时间的索引。

滚动模式

滚动模式工作流程如下:

  • 有一个用于写入的索引别名,其指向活跃索引
  • 另外一个用于读取(搜索)的索引别名,指向不活跃索引
  • 活跃索引具有和热节点数量一样多的分片,可以充分发挥昂贵硬件的索引写入能力
  • 当活跃索引太满或者太老的时候,它就会滚动:新建一个索引并且索引别名自动从老索引切换到新索引
  • 移动老索引到冷节点上并且缩小为一个分片,之后可以强制合并和压缩。

入门

假设我们有一个具有 10 个热节点和一个冷节点池的集群。理想情况下我们的活跃索引(接收所有写入的索引)应该在每个热节点上均匀分布一个分片,以此来尽可能地在多个机器上分散写入压力。

我们让每个主分片都有一个复制分片来允许一个节点失效而不丢失数据。这意味着我们的活跃索引应该有 5 个主分片,加起来一共 10 个分片(每个节点一个)。我们也可以用 10 个主分片(包含冗余一共 20 个分片),这样每个节点两个分片。

首先,为活跃索引创建一个索引模版:

PUT _template/active-logs
{
   
  "template": "active-logs-*",
  "settings": {
   
    "number_of_shards": 5,
    "number_of_replicas": 1,
    "routing.allocation.include.box_type": "hot",
    "routing.allocation.total_shards_per_node": 2
  },
  "aliases": {
   
    "active-logs": {
   }, 
    "search-logs": {
   }
  }
}

由这个模板创建的索引会被分配到标记为 box_type:hot 的节点上,而 total_shards_per_node 配置会保证将分片均匀分布在热节点中。我把其设置为 2 而不是 1,这样当一个节点失效时也可以继续分配分片。

我们将会用 active-logs 别名来写入当前的活跃索引,用 search-logs 别名来查询所有的日志索引。
下面是非活跃索引的模板:

PUT _template/inactive
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值