千家信息网

ElasticSearch中怎么实现数据自动冷热分离

发表于:2024-11-18 作者:千家信息网编辑
千家信息网最后更新 2024年11月18日,这篇文章给大家介绍ElasticSearch中怎么实现数据自动冷热分离,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. 节点tag依次启动三个节点,同时加入box_type和r
千家信息网最后更新 2024年11月18日ElasticSearch中怎么实现数据自动冷热分离

这篇文章给大家介绍ElasticSearch中怎么实现数据自动冷热分离,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1. 节点tag

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

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=highbin/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=mdeiumbin/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              valuenode3 127.0.0.1 127.0.0.1 ml.machine_memory 17179869184node3 127.0.0.1 127.0.0.1 ml.max_open_jobs  20node3 127.0.0.1 127.0.0.1 box_type          hotnode3 127.0.0.1 127.0.0.1 xpack.installed   truenode3 127.0.0.1 127.0.0.1 resource_level    highnode1 127.0.0.1 127.0.0.1 ml.machine_memory 17179869184node1 127.0.0.1 127.0.0.1 box_type          warmnode1 127.0.0.1 127.0.0.1 xpack.installed   truenode1 127.0.0.1 127.0.0.1 ml.max_open_jobs  20node1 127.0.0.1 127.0.0.1 resource_level    highnode2 127.0.0.1 127.0.0.1 ml.machine_memory 17179869184node2 127.0.0.1 127.0.0.1 ml.max_open_jobs  20node2 127.0.0.1 127.0.0.1 box_type          warmnode2 127.0.0.1 127.0.0.1 xpack.installed   truenode2 127.0.0.1 127.0.0.1 resource_level    mdeium

2. 建立索引

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

PUT api_log_2019-09-01{  "settings": {    "number_of_shards": 3,     "number_of_replicas": 0,     "index.routing.allocation.require.box_type": "hot">

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

PUT api_log_2019-09-01/_settings{  "index.routing.allocation.require.box_type": "hot"}

3. 迁移索引

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

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        nodeapi_log_2019-09-01 1     p      STARTED 4711 4.1mb 127.0.0.1 node2api_log_2019-09-01 2     p      STARTED 4656   4mb 127.0.0.1 node2api_log_2019-09-01 0     p      STARTED 4707 4.1mb 127.0.0.1 node2

Rollover API

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

1. rollover

首先为索引建立别名, 由于多个index可以对应一个alias,为了让es知道往哪个索引中写,标记其中一个索引is_write_index为true,同时需要注意索引名以横杠+数字结尾的形式命名,这是为了让es自动生成索引

POST _aliases{  "actions": [    {      "remove": {        "index": "api_log_2019-09-01",        "alias": "api_logs",        "is_write_index": true      }    }  ]}rollover API会根据设置的条件(conditions)来生成新的索引POST api_logs/_rollover{  "conditions": {    "max_age": "1d",    "max_docs": 10000,    "max_size": "5gb"  }}conditions的详细解释:max_age:索引是否创建大于1天max_docs:索引文档数是否超过10000max_size:索引大小是否超过5GBmax_size正在进行中的合并会产生大量的临时分片大小增长,而当合并结束后这些增长会消失掉,不稳定,max_age每个时间内不一定均衡,max_docs比较合适即以上三个条件满足其一就会自动rollover

2. 新索引配置

rollover也支持索引的settings设置POST api_logs/_rollover{  "conditions": {    "max_age": "1d",    "max_docs": 10000,    "max_size": "5gb"  },  "settings": {    "index.number_of_shards": 2  }}

3. 自定义索引名称

生成的索引名称为api_log_2019-09-000002, 以长度为6,序号+1,左填充0的格式命名,但es支持自定义名称,只需要在_rollover端点加入名称即可

POST api_logs/_rollover/api_log_2019-09-02{...}

关于ElasticSearch中怎么实现数据自动冷热分离就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0