ES索引管理

news2024/9/21 16:32:40

ES官方博客:https://elasticstack.blog.csdn.net/?type=blog

一、rolloverAPI

https://elasticstack.blog.csdn.net/article/details/102728987

1.1 rollover命令

POST /log_alias/_rollover
{
    "conditions":{
        "max_age":"7d",
        "max_docs":1400,
        "max_size":"5gb"
    }
}

显示的结果是:

{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "old_index" : "logs-2019.10.21-1",
  "new_index" : "logs-2019.10.21-000002",
  "rolled_over" : true,
  "dry_run" : false,
  "conditions" : {
    "[max_docs: 1400]" : true,
    "[max_size: 5gb]" : false,
    "[max_age: 7d]" : false
  }
}

1.2 配合 ILM 一起使用

Rollover 在实战中,我们可以配合 ILM  一起使用。我们可以定义如下的一个  ILM  policy:

PUT _ilm/policy/50gb_30d_delete_90d_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "50GB",
            "max_age": "30d",
            "max_docs": 10000
          }
        }
      },
      "delete": {
        "min_age": "90d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

在上面,我们定义了如下的一个 policy:

  • 当一个索引的文档数超过 10000,或者文档的时间超过 30 天,或者索引的大小超过 50G,之后摄入的文档就会自动  rollover
  • 文档超过 90 天,就会被自动删除

我们接着就定义如下的 index template:

PUT _index_template/timeseries_template
{
  "index_patterns": [
    "myindex-*"
  ],
  "data_stream": {},
  "template": {
    "settings": {
      "number_of_shards": 1,
      "number_of_replicas": 1,
      "index.lifecycle.name": "50gb_30d_delete_90d_policy"
    }
  }
}

之后,所有新创建的以 myindex- 为开头的索引将会自动采纳 50gb_30d_delete_90d_policy 策略,也就是该索引将会根据 50gb_30d_delete_90d_policy 所定义的条件自动 rollover。针对上面的 data_stream,我们可以采用如下的方式来创建索引:

PUT _data_stream/myindex-ds
 更多关于 data stream 的知识可以参考文章 “Elastic:Data stream 在索引生命周期管理中的应用”https://elasticstack.blog.csdn.net/article/details/110528838。

ILM 可以通过简单的设置更新轻松集成到现有索引中。 要将策略添加到现有索引,你必须仅提供策略名称:

PUT myindex/_settings
{
  "index": {
    "lifecycle": {
      "name": "50gb_30d_delete_90d_policy"
    }
  }
}

1.3 其他参数

 rollover 发生时间:indices.lifecycle.poll_interval 

PUT _cluster/settings
{
    "transient": {
      "indices.lifecycle.poll_interval": "10s"
    }
}

二、冷热数据

2.1  配置分片分配感知

标记节点温度

通过phases 定义冷热数据管理周期

运行两个 node 的 Elasticsearch 集群
我们可以参考文章 Elasticsearch:运用 shard 过滤器来控制索引分配给哪个节点_Elastic 中国社区官方博客的博客-CSDN博客运行起来两个 node 的 cluster。其实非常简单,当我们安装好 Elasticsearch 后,打开一个 terminal,并运行如下的命令:

./bin/elasticsearch -E node.name=node1 -E node.attr.data=hot -Enode.max_local_storage_nodes=2
它将运行起来一个叫做 node1 的节点。同时在另外 terminal 中运行如下的命令:

./bin/elasticsearch -E node.name=node2 -E node.attr.data=warm -Enode.max_local_storage_nodes=2
它运行另外一个叫做 node2 的节点。我们可以通过如下的命令来进行查看:

GET _cat/nodes?v
显示两个节点:

我们可以用如下的命令来检查这两个 node 的属性:

GET _cat/nodeattrs?v&s=name


显然其中的一个 node 是 hot,另外一个是 warm。

2.2  配置 ILM 策略

        ILM 策略分为四个主要阶段 - 热、温、冷和删除。(还可以试用 滚动更新操作用于管理每个索引的大小或寿命。强制合并操作可用于优化索引。冻结操作可用于减少集群中的内存压力。)

基本操作

PUT /_ilm/policy/my_policy
{
  "policy":{
    "phases":{
      "hot":{
        "actions":{
          "rollover":{
            "max_size":"50gb",
            "max_age":"30d"
          }
        }
      }
    }
  }
}

这个策略规定,在索引存储时间达到 30 天后或者索引大小达到 50GB(基于主分片)时,就会滚动更新该索引并开始写入一个新索引。

ILM 和索引模板

关联ILM索引和模板

PUT _template/my_template
{
  "index_patterns": ["test-*"],
  "settings": {
    "index.lifecycle.name": "my_policy",
    "index.lifecycle.rollover_alias": "test-alias" 
  }
}

对于包括滚动更新操作的策略,还必须在创建索引模板后使用写入别名启动索引。

PUT test-000001 
{
  "aliases": {
    "test-alias":{
      "is_write_index": true 
    }
  }

配置用于采集的 ILM 策略

Beats 和 Logstash 都支持 ILM,并在启用后将设置一个类似上例所示的默认策略。此外,Beats 和 Logstash 还将处理滚动更新操作的所有要求。这就意味着,当为 Beats 和 Logstash 启用 ILM 时,除非您的每天索引量很大(大于 50GB/天),否则索引大小将可能是确定何时创建新索引的主要因素(这是一件好事!)。从 7.0.0 开始,带有滚动更新的 ILM 将是 Beats 和 Logstash 的默认配置。

不过,由于针对热温冷架构没有一成不变的设置,因此,Beats 和 Logstash 将不会随附热温冷策略。我们可以制定一个适用于热温冷的新策略,并在这一过程中进行一些优化。

我们虽然可以更新 Beats 或 Logstash 默认策略,但这会模糊默认值和定制值之间的界限。此外,更新默认策略还会增加未来版本无法应用正确策略的风险(7.0+ 的 Beats 模板默认值将会有更改)。我们可以使用 Beats 和 Logstash 配置,通过其各自的配置来定义定制策略。这种方法也未尝不可,但您可能需要更改数百(或数千)个 Beats 的配置才能更改 ILM 策略。这里描述的第三种方法,通过利用多模板匹配来允许 Elasticsearch 保持对 ILM 策略的完全控制。

针对热温冷优化 ILM 策略

首先,让我们创建一个针对热温冷架构优化的 ILM 策略。再次强调,这不是一刀切的设置,您的要求将有所不同。

PUT _ilm/policy/hot-warm-cold-delete-60days
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size":"50gb",
            "max_age":"30d"
          },
          "set_priority": {
            "priority":50
          }
        }
      },
      "warm": {
        "min_age":"7d",
        "actions": {
          "forcemerge": {
            "max_num_segments":1
          },
          "shrink": {
            "number_of_shards":1
          },
          "allocate": {
            "require": {
              "data": "warm"
            }
          },
          "set_priority": {
            "priority":25
          }
        }
      },
      "cold": {
        "min_age":"30d",
        "actions": {
          "set_priority": {
            "priority":0
          },
          "freeze": {},
          "allocate": {
            "require": {
              "data": "cold"
            }
          }
        }
      },
      "delete": {
        "min_age":"60d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}

这个 ILM 策略首先会将索引优先级设置为一个较高的值,以便热索引在其他索引之前恢复。30 天后或达到 50GB 时(符合任何一个即可),该索引将滚动更新,系统将创建一个新索引。该新索引将重新启动策略,而当前的索引(刚刚滚动更新的索引)将在滚动更新后等待 7 天再进入温阶段。

索引进入温阶段后,ILM 会将索引收缩到 1 个分片,将索引强制合并为 1 个段,并将索引优先级设置为比热阶段低(但比冷阶段高)的值,通过分配操作将索引移动到温节点。完成该操作后,索引将等待 30 天(从滚动更新时算起)后进入冷阶段。

索引进入冷阶段后,ILM 将再次降低索引优先级,以确保热索引和温索引得到先行恢复。然后,ILM 将冻结索引并将其移动到冷节点。完成该操作后,索引将等待 60 天(从滚动更新时算起)后进入删除阶段。

删除

我们还没有讨论过这个删除阶段。简单来说,删除阶段具有用于删除索引的删除操作。在删除阶段,您将始终需要有一个 min_age 条件,以允许索引在给定时段内待在热、温或冷阶段。

在 Kibana 中创建 ILM 策略

不喜欢写一大堆 JSON? (我也是。) 让我们使用 Kibana UI 来检查或创建策略:

三、别名应用

3.1 创建测试索引:

PUT my_test_index
响应结果:
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "my_test_index"
}

3.2 创建索引别名:

POST _aliases
{
  "actions": [
    {
      "add": {
        "index": "my_test_index",
        "alias": "my_test_index_alias"
      }
    }
  ]
}
响应结果:
{
  "acknowledged" : true
}

3.3 删除索引别名

POST _aliases
{
  "actions": [
    {
      "remove": {
        "index": "my_test_index",
        "alias": "my_test_index_alias"
      }
    }
  ]
}
响应效果:
{"acknowledged" : true} 

四、数据迁移

五、mapping

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/467392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Node 09 MongoDB的使用

MongoDB 简介 Mongodb 是什么 MongoDB 是一个基于分布式文件存储的数据库,官方地址 https://www.mongodb.com/ 数据库是什么 数据库(DataBase)是按照数据结构来组织、存储和管理数据的 应用程序 数据库的作用 数据库的主要作用就是 管理…

jsp家庭农场投入品信息管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 jsp家庭农场投入品信息管理系统是一套完善的java web信息管理系统 serlvet dao bean 开发,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发…

如何理解PCB布线3W规则

我们平时在PCB布线的时候,对于比较重要的信号都要做特殊处理,比如包地或者时“3W”,所谓3w指的是线与线之间的间距要满足三倍的线宽,那么我们怎么理解这个3W原则呢,他是如何降低信号之间的串扰的呢? 我们要…

连网介质及设备详解

文章目录 一、网卡1. 有线网卡2. 无线网卡3. 光纤网卡 二、网线1. 双绞线2. 光缆 三、交换机1. 什么是交换机2. 交换机分类 一、网卡 网卡分为三类:有线网卡、无线网卡、光纤网卡 1. 有线网卡 多数台式计算机自带,采用 RJ-45 制式接口 通过双绞线传输…

Hive2安装Tez计算引擎

一、Tez介绍 ApacheTEZ项目旨在构建一个应用程序框架,该框架允许使用复杂的有向无环图来处理数据。 它当前构建在Apache Hadoop YARN之上。 Tez的2个主要设计主题是: 通过以下方式增强最终用户的能力: 富有表现力的数据流定义API 灵活的输入…

ICV:车载毫米波雷达中国市场有望在2025年实现30亿美元的市场规模

近日,专注于前沿科技领域的国际咨询机构ICV发布了全球车载毫米波雷达的市场研究报告,汽车毫米波(mmWave)雷达基于频率为77 GHz的电磁波,具有高精度和准确性,可用于目标检测。这种技术有着广泛的应用&#x…

Dubbo面试大全

Dubbo面试题 1.Dubbo 是什么? Dubbo是阿里巴巴开源的分布式,高性能的透明化的RPC服务框架,提供服务自动注册,自动发现等高效服务治理方案,可以和Spring框架可以无缝衔接。 2.Dubbo的由来 你们的项目为什么会使用Du…

论文阅读 关联规则挖掘综述

这是一篇关联规则挖掘的综述,也记录下自己的心得笔记 A comprehensive review of visualization methods for association rule mining: Taxonomy, Challenges, Open problems and Future ideas 文章目录 摘要1、介绍2、关联规则挖掘是个小东西2.1、数值关联规则挖…

AGI智能新时代,技术驱动营销数字化重组|数说故事D3峰会盛况

万物向新,数字重组。 3月29日,以「REMIX——重组数字未来,创享无限可能」为主题的数说故事第六届D3智能营销峰会在广州白云国际会议中心圆满举办。本届峰会由数说故事携手GDMS联合主办,数说故事作为专场合作伙伴,与50…

php通过cURL爬取数据的方法(ajax接口、cookie伪造爬取、文件头信息)

php通过curl爬取数据 一、请求流程1.CURL请求步骤2.使用CURL发送GET请求3.使用CURL发送POST请求 二、实战:curl通过ajax接口API爬取数据1.接口分析2.抓取分析3.构建curl4.结果呈现 三、实战:curl添加cookie伪造登陆爬取数据1.注册用户,并记录…

【老王读SpringMVC-4】请求参数是如何绑定到Controller method参数对象上的?

前面我们分析了,如果我们自己要实现 spring mvc 框架的话,大致需要实现如下功能: 0、将 url 与 Controller method 的对应关系进行注册1、通过请求的 url 找到 Controller method (即 url 与 Controller method 的映射)2、将请求参数进行绑定…

FPGA时序约束(四)主时钟和虚拟时钟的约束

系列文章目录 FPGA时序约束(一)基本概念入门及简单语法 FPGA时序约束(二)利用Quartus18对Altera进行时序约束 FPGA时序约束(三)时序约束基本路径的深入分析 文章目录 系列文章目录前言主时钟约束跨时钟域…

计算机网络【2】 子网掩码

学习大佬记下的笔记 https://zhuanlan.zhihu.com/p/163119376 "子网"掩码,顾名思义,它就是拿来划分子网的,更准确的说,划分子网的同时,还能通过它知道主机在子网里面的具体ip的具体地址。 子网掩码只有一个…

聊聊「低代码」的实践之路

区块链、低代码、元宇宙、AI智能; 01 【先来说说背景】 这个概念由来已久,但是在国内兴起,是最近几年; 低代码即「Low-Code」; 指提供可视化开发环境,可以用来创建和管理软件应用; 简单的说…

中英文切换,vue项目国际化使用教程(国际化使用详细,i18n国际化)

简述:在工作中,我们难免会遇到把文字切换成外语的需求,这里来记录下如何在项目中点击切换成英语,这里会用到i18n,它是一个支持国际化功能的插件,这里来分享下它的使用过程。 1、首先,我们需要在…

idea使用 ( 四 ) 插件

5.插件 5.1.idea数据库连接 5.1.1.打开配置界面 5.1.2.选择MySQL 点击 号 > Data Source > MySQL 5.1.3.配置数据库驱动jar 先在左边选择 MySQL 再点击 号 > Custom JARs… 在 弹出的窗口中选择 已经存在的 jar位置 就导入 MySQL 的驱动文件 5.1.4.配置连库…

记录一次在x86 软件中使用dpdk 的历程(Makefile gcc改成g++)

我们一台服务器上原本是用grub下预留内存的方式, 然后把物理地址在板卡上的配置文件中传给L1. 但是在客户的环境上服务器windriver上不是能预留内存的. 所以服务器上需要在testMxx程序中用dpdk的方式分配出内存, 然后, 把物理地址通过sdp虚拟的网口, 用socket 传…

为什么要清除浮动?清除浮动的方式

📝个人主页:爱吃炫迈 💌系列专栏:HTMLCSS 🧑‍💻座右铭:道阻且长,行则将至💗 文章目录 浮动的定义浮动的工作原理浮动的特性为什么要清除浮动清除浮动的方式利用clear样式…

vue3 vite typescript volar element-plus element标签报红问题的解决

故障就这样的: 模块 ""element-plus"" 没有导出的成员 "FormInstance" 至于原因咱也不知道,也没搞明白,一直以为是volar校验的问题,能开发咱就接着干,到了发布的时候傻眼了。所有这种…

API低代码平台介绍1-功能概述

API低代码平台之ADI平台 ADI平台是指Application data integration,即“应用数据集成”,使用springboot开发,并通过springcloud实现微服务,是一个动态定义Http API接口的“零代码”或“低代码”平台,支持GET(查)、POST…