前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch探索:实现数据自动冷热分离

Elasticsearch探索:实现数据自动冷热分离

原创
作者头像
HLee
修改2021-01-12 10:16:44
2K0
修改2021-01-12 10:16:44
举报
文章被收录于专栏:房东的猫房东的猫

简介

在基于时序数据中,我们总是关心最近产生的数据,例如查询订单通常只会查询最近三天,至多到最近一个月的,查询日志也是同样的情形,很少会去查询历史数据,也就是说类似的时序数据随着时间推移,价值在逐渐弱化。在es中经常按日或按月建立索引,我们很容易想到,历史索引被查询命中的概率越来越低,不应该占用高性能的机器资源(比如大内存,SSD),可以将其迁移到低配置的机器上,从而实现冷热数据分离存储。

分片分配规则

假设我们有三个es节点,一台高性能机器(hot)和2个低配置机器(warm),通常索引分片会均匀分布在集群节点中,但我们希望最新的数据由于其写入和查询频繁的特性,只能保存在hot节点上,而过期的数据保存在warm节点上。 实现该功能,首先要对节点人为的打个标签,然后在索引创建时指定要把分片分配给hot节点,在索引不再写入后,迁移到warm节点上

节点tag

依次启动三个节点,同时加入box_type和resource_level标签,box_type标记node1、node2为warm节点,node3为hot节点,resource_level标记机器资源的性能,分为高,中,低

代码语言:javascript
复制
bin/elasticsearch -d -p pid -E node.name=node1 -E node.max_local_storage_nodes=3 -E path.data=node1_data -E path.logs=node1_logs -E node.attr.box_type=warm -E node.attr.resource_level=high

bin/elasticsearch -d -p pid -E node.name=node2 -E node.max_local_storage_nodes=3 -E path.data=node2_data -E path.logs=node2_logs -E node.attr.box_type=warm -E node.attr.resource_level=mdeium

bin/elasticsearch -d -p pid -E node.name=node3 -E node.max_local_storage_nodes=3 -E path.data=node3_data -E path.logs=node3_logs -E node.attr.box_type=hot -E node.attr.resource_level=high


查看属性:kibana中输入以下命令
GET _cat/indices?v
得到以下结果,可以看到box_type和resource_level标签在每个节点的值
node  host      ip        attr              value
node3 127.0.0.1 127.0.0.1 ml.machine_memory 17179869184
node3 127.0.0.1 127.0.0.1 ml.max_open_jobs  20
node3 127.0.0.1 127.0.0.1 box_type          hot
node3 127.0.0.1 127.0.0.1 xpack.installed   true
node3 127.0.0.1 127.0.0.1 resource_level    high
node1 127.0.0.1 127.0.0.1 ml.machine_memory 17179869184
node1 127.0.0.1 127.0.0.1 box_type          warm
node1 127.0.0.1 127.0.0.1 xpack.installed   true
node1 127.0.0.1 127.0.0.1 ml.max_open_jobs  20
node1 127.0.0.1 127.0.0.1 resource_level    high
node2 127.0.0.1 127.0.0.1 ml.machine_memory 17179869184
node2 127.0.0.1 127.0.0.1 ml.max_open_jobs  20
node2 127.0.0.1 127.0.0.1 box_type          warm
node2 127.0.0.1 127.0.0.1 xpack.installed   true
node2 127.0.0.1 127.0.0.1 resource_level    mdeium

建立索引

假设当前时间为2019年9月1日,作为最新的数据存储在hot节点上,只需要在建立索引时指定allocation策略即可

代码语言:javascript
复制
PUT api_log_2019-09-01
{
  "settings": {
    "number_of_shards": 3, 
    "number_of_replicas": 0, 
    "index.routing.allocation.require.box_type": "hot"  # 将新数据索引到有hot标签的节点上
  }
}

index.routing.allocation详解:该配置支持include,require,exclude三种选项,它们的值都可以是多个,用逗号分隔
index.routing.allocation.include.{attribute}:将索引分配给具有至少一个值的节点。
index.routing.allocation.require.{attribute}:将索引分配给具有所有值的节点。
index.routing.allocation.exclude.{attribute}:将索引分配给没有该值的节点

es还提供了以下内置字段

_name: 节点名称匹配
_host_ip:主机名ip地址匹配
_publish_ip:publish ip匹配,参考network.publish_host配置
_ip:_host_ip或者_publish_ip匹配
_host:主机名匹配

假设建立索引时没有配置该选项也不要紧,动态修改即可

代码语言:javascript
复制
PUT api_log_2019-09-01/_settings
{
  "index.routing.allocation.require.box_type": "hot"
}

迁移索引

迁移历史索引到warm节点的方式也是采用动态修改请求的方式

代码语言:javascript
复制
PUT api_log_2019-09-01/_settings
{
    "index.routing.allocation.require.box_type": "warm",
    "index.routing.allocation.include.resource_level": "mdeium"
}

我们将api_log_2019-09-01迁移到了box_type为warm,resource_level为mdeium的节点,即node2

通过查询索引分片的分布情况
GET _cat/shards/api_log_2019-09-01?v

结果如下:
index          shard prirep state   docs store ip        node
api_log_2019-09-01 1     p      STARTED 4711 4.1mb 127.0.0.1 node2
api_log_2019-09-01 2     p      STARTED 4656   4mb 127.0.0.1 node2
api_log_2019-09-01 0     p      STARTED 4707 4.1mb 127.0.0.1 node2

大家应该也注意到了,迁移索引的步骤是手动完成的,有没有更智能的方式呢,答案是肯定的,rollover API可以很好地实现这个功能

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

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