千家信息网

Elasticsearch索引生命周期如何管理

发表于:2024-10-02 作者:千家信息网编辑
千家信息网最后更新 2024年10月02日,本篇内容介绍了"Elasticsearch索引生命周期如何管理"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学
千家信息网最后更新 2024年10月02日Elasticsearch索引生命周期如何管理

本篇内容介绍了"Elasticsearch索引生命周期如何管理"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

引入索引生命周期的作用

在 Elasticsearch的日常管理中,有很多如系统日志,行为数据等方面的应用场景,这些场景的特点是数据量非常大,并且随着时间的增长索引的数量也会持续增长,然而这些场景基本上只有最近一段时间的数据有使用价值或者会被经常使用(热数据),而历史数据几乎没有作用或者很少会被使用(冷数据),这个时候就需要对索引进行一定策略的维护管理甚至是删除清理,否则随着数据量越来越多除了浪费磁盘与内存空间之外,还会严重影响 Elasticsearch 的性能。

在 Elastic Stack 6.6 版本后推出了新功能 Index Lifecycle Management(索引生命周期管理),支持针对索引的全生命周期托管管理,并且在 Kibana 上也提供了一套UI界面来配置策略。

索引生命周期常见的阶段

  • hot: 索引还存在着大量的读写操作。

  • warm:索引不存在写操作,还有被查询的需要。

  • cold:数据不存在写操作,读操作也不多。

  • delete:索引不再需要,可以被安全删除。

注意:以上只是索引生命周期阶段的常见定义,具体策略可以根据实际业务情况来定义。

部署Elasticsearch集群

部署一个由2个hot节点,2个warm节点,2个cold节点组成的Elasticsearch集群,并且部署了Kibana和Cerebro方便调试和观察。 docker-compose.yaml文件如下:

version: '2.2'services:  cerebro:    image: lmenezes/cerebro:0.8.3    container_name: hwc_cerebro    ports:      - "9000:9000"    command:      - -Dhosts.0.host=http://elasticsearch:9200    networks:      - hwc_es7net  kibana:    image: docker.elastic.co/kibana/kibana:7.1.0    container_name: hwc_kibana7    environment:      #- I18N_LOCALE=zh-CN      - XPACK_GRAPH_ENABLED=true      - TIMELION_ENABLED=true      - XPACK_MONITORING_COLLECTION_ENABLED="true"    ports:      - "5601:5601"    networks:      - hwc_es7net  elasticsearch:    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0    container_name: es7_hot1    environment:      - cluster.name=cr7-hwc      - node.name=es7_hot1      - node.attr.box_type=hot      - bootstrap.memory_lock=true      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"      - discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2      - cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2    ulimits:      memlock:        soft: -1        hard: -1    volumes:      - hwc_es7data_hot1:/usr/share/elasticsearch/data    ports:      - 9200:9200    networks:      - hwc_es7net  elasticsearch3:    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0    container_name: es7_warm1    environment:      - cluster.name=cr7-hwc      - node.name=es7_warm1      - node.attr.box_type=warm      - bootstrap.memory_lock=true      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"      - discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2      - cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2    ulimits:      memlock:        soft: -1        hard: -1    volumes:      - hwc_es7data_warm1:/usr/share/elasticsearch/data    networks:      - hwc_es7net  elasticsearch4:    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0    container_name: es7_cold1    environment:      - cluster.name=cr7-hwc      - node.name=es7_cold1      - node.attr.box_type=cold      - bootstrap.memory_lock=true      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"      - discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2      - cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2    ulimits:      memlock:        soft: -1        hard: -1    volumes:      - hwc_es7data_cold1:/usr/share/elasticsearch/data    networks:      - hwc_es7net  elasticsearch5:    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0    container_name: es7_hot2    environment:      - cluster.name=cr7-hwc      - node.name=es7_hot2      - node.attr.box_type=hot      - bootstrap.memory_lock=true      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"      - discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2      - cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2    ulimits:      memlock:        soft: -1        hard: -1    volumes:      - hwc_es7data_hot2:/usr/share/elasticsearch/data    networks:      - hwc_es7net  elasticsearch6:    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0    container_name: es7_warm2    environment:      - cluster.name=cr7-hwc      - node.name=es7_warm2      - node.attr.box_type=warm      - bootstrap.memory_lock=true      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"      - discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2      - cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2    ulimits:      memlock:        soft: -1        hard: -1    volumes:      - hwc_es7data_warm2:/usr/share/elasticsearch/data    networks:      - hwc_es7net  elasticsearch7:    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0    container_name: es7_cold2    environment:      - cluster.name=cr7-hwc      - node.name=es7_cold2      - node.attr.box_type=cold      - bootstrap.memory_lock=true      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"      - discovery.seed_hosts=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2      - cluster.initial_master_nodes=es7_hot1,es7_warm1,es7_cold1,es7_hot2,es7_warm2,es7_cold2    ulimits:      memlock:        soft: -1        hard: -1    volumes:      - hwc_es7data_cold2:/usr/share/elasticsearch/data    networks:      - hwc_es7netvolumes:  hwc_es7data_hot1:    driver: local  hwc_es7data_warm1:    driver: local  hwc_es7data_cold1:    driver: local  hwc_es7data_hot2:    driver: local  hwc_es7data_warm2:    driver: local  hwc_es7data_cold2:    driver: localnetworks:  hwc_es7net:    driver: bridge

执行docker-compose up -d命令即可启动Elasticsearch集群。(前提安装好docker和docker-compose)

修改IML刷新时间

将ILM刷新时间设定为1秒,便于实验演示(默认为10分钟):

PUT _cluster/settings{  "persistent": {    "indices.lifecycle.poll_interval":"1s"  }}

设置Index Lifecycle Policies

设置hot/warm/cold和delete四个阶段:

  • hot:超过5个文档以后rollover。

  • warm:20s后进入warm阶段,将索引设置为只读。

  • cold:40s后进入warm阶段,将副本分别从1缩小为0。

  • delete:60s后进入delete阶段,删除索引。

PUT /_ilm/policy/log_ilm_policy{  "policy": {    "phases": {      "hot": {        "actions": {          "rollover": {            "max_docs": 5          }        }      },      "warm": {        "min_age": "20s",        "actions": {          "allocate": {            "include": {              "box_type": "warm"            }          },          "readonly": {}        }      },      "cold": {        "min_age": "40s",        "actions": {          "allocate": {            "include": {              "box_type": "cold"            },            "number_of_replicas": 0          }        }      },      "delete": {        "min_age": "60s",        "actions": {          "delete": {}        }      }    }  }}

设置索引模板

设置索引模板是为了新 rollover 出来的索引能够应用 iml 的配置:

PUT /_template/log_ilm_template{  "index_patterns" : [      "ilm_index-*"    ],    "settings" : {      "index" : {        "lifecycle" : {          "name" : "log_ilm_policy",          "rollover_alias" : "ilm_alias"        },        "routing" : {          "allocation" : {            "include" : {              "box_type" : "hot"            }          }        },        "number_of_shards" : "1",        "number_of_replicas" : "1"      }    }}

创建第一个索引

将索引分配到hot节点,并且调用之前设置的IML策略log_ilm_policy,设置rollover的别名为ilm_alias,设置主分片为1,副本分片为1。 索引必须后面要带有数字,否则 rollover 策略不会生效。

PUT ilm_index-000001{  "settings": {    "number_of_shards": 1,    "number_of_replicas": 1,    "index.lifecycle.name": "log_ilm_policy",    "index.lifecycle.rollover_alias": "ilm_alias",    "index.routing.allocation.include.box_type":"hot"  },  "aliases": {    "ilm_alias": {      #在rollover的时候,alias会包含所有rollover的索引,并且会自动将 is_write_index":       #true 设置到最新rollover的索引上,也就是说写操作会到最新的索引上。      "is_write_index": true     }  }}

创建文档

连续执行5次POST,创建5个文档。

POST ilm_alias/_doc{  "name":"cr7",  "age": 15}

观察

刚开始可以看到总共有5个doc。

当达索引iml_index-000001到5个doc时,做了rollover操作,新建了新的索引iml_index-000002。

等待20s后,将索引iml_index-000001移动到warm节点。

等待40s后,将索引iml_index-000001移动到cold节点,并且将副本数从1缩小为0。

等待60s后,索引iml_index-000001被删除。

由于在warm阶段设置了readonly,在warm和cold阶段如果尝试往iml_index-000001写入或修改数据,将会收到以下报错:

{  "error": {    "root_cause": [      {        "type": "cluster_block_exception",        "reason": "blocked by: [FORBIDDEN/8/index write (api)];"      }    ],    "type": "cluster_block_exception",    "reason": "blocked by: [FORBIDDEN/8/index write (api)];"  },  "status": 403}

"Elasticsearch索引生命周期如何管理"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

索引 数据 阶段 周期 生命 管理 节点 策略 时间 副本 后进 场景 文档 集群 作用 内容 实际 常见 情况 时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发职业分析小结 道县网络安全大队长 远程下载数据库技术 三人行下载软件开发 企业应用软件开发方向 数据库可以修改等级吗 双鹿电池的软件开发 洞口县启动网络安全宣传周活动 计算机网络技术职业准备 sql备份数据库无法还原 生产企业数据库系统设计 国内的网络安全的公司排名 vivo软件开发中心怎么样 数据库的格式文件 龙岗区网络技术进出口优点 唐山erp管理信息系统网络技术 腾讯服务器是怎么连接外网 域名和服务器都架设在国外 柳州 软件开发培训机构 仙阁我的世界神奇宝贝服务器 高校网络安全工作的难点是什么 常用数据库管理软件官方完整版 经开区服务器上门回收多少钱 阿里云查询数据库是哪个服务 嵌入式软件开发找不到工作 从数据库中读取图形数据 数据库in语句怎么用 深圳联通服务器ip 北京团建无忧科技互联网 校园安全app的服务器
0