ES数据管理

news/2025/1/9 12:32:00/

ES 数据管理

  1. 索引在 Elasticsearch 中的生命周期:

  1. 针对一个超大规模的集群:

  • 注意:需要确保集群中至少有一个 data_hot 和 data_content 节点,即使它们是同一个节点,否则新索引将无法被分配。 新创建的索引默认将分配到 data_content 节点上。

  1. 各节点职责:

随着数据量的不断增大,我们需要对索引进行一定的维护管理甚至是删除清理。利用 ILM 策略我们针对索引不同阶段对数据读写的要求,将索引分配到合适的节点上,从而更好地利用机器的资源:

  • 例如最新需要频繁读写的数据,可以保存到 SSD 硬盘的节点上。

  • 对于较旧的数据,可以保存到机械硬盘的节点上。

  • 对于归档数据,可以保持到大容量廉价硬盘的节点上。

  • 当数据超过一定的时间,不再需要时,可以将该数据删除。

1. 官方:ILM

1.1 ILM介绍

索引生命周期管理 (Index Lifecycle Management, ILM) 是在 Elasticsearch 在 6.6(公测版)首次引入并在 6.7 版正式推出的一项功能。它允许用户自动管理索引的整个生命周期,从创建到删除。

定义索引生命周期阶段:ILM定义了五个阶段:Hot、Warm、Cold、Frozen和Delete。每个阶段都可以执行特定的操作:rollover、force merge、shrink、delete 创建生命周期策略:通过定义策略,可以指定索引在每个阶段应该执行的操作,以及从一个阶段移动到另一个阶段的条件。例如,可以设置一个策略,当索引达到50GB或30天大小时进行rollover,并在rollover后90天删除索引。

应用生命周期策略:将定义的策略应用到索引模板中,这样新创建的索引将自动采用这个策略。例如,可以创建一个索引模板timeseries_template,并将index.lifecycle.name设置为刚才创建的策略名称。

1.2 生命周期5个阶段

ILM 将一个索引的生命周期定义为了 5 个阶段,除了 Hot 阶段以外,其他阶段都是可选的。

序号阶段介绍
1Hot索引正在被实时地写入和查询,可根据索引的文档数、大小、时长决定是否调用 Rollover API 来滚动创建新的索引。
2Warm索引不再被更新,但仍在被查询。
3Cold索引不再被更新,并且很少被查询,如果这些查询比较慢也没关系。
4Frozen索引不再被更新,并且很少被查询,如果这些查询非常慢也没关系。
5Delete不再需要索引,可以安全地删除。

1.3 5个阶段对应Action

不同的阶段只允许执行相应的 Action,具体如下表所示:

阶段Set PriorityUnfollowRolloverRead-OnlyShrinkForce MergeSearchable SnapshotAllocateMigrateWait For SnapshotDelete
Hot
Warm
Cold
Frozen
Delete

1.4 常用Action介绍

常用的 Action 如下:

序号动作介绍
1Rollover根据索引的文档数、大小、时长决定是否调用 Rollover API 来滚动创建新的索引。
2Shrink减少索引的主分片数。
3Force Merge段合并,可以减少索引段的数量并提高检索速度。段合并的时候会将那些旧的已删除文档从文件系统中清除。
4Allocate修改索引的副本分片数。
5Read-Only将索引设置为只读。
6Delete删除索引。

1.5 data tiers(数据层)概念

在 Elasticsearch 7.10 中引入了 data tiers(数据层)的概念,对数据节点类型做进一步的细分,分为 data_content, data_host, data_warm, data_cold, data_frozen,同一数据层的节点通常拥有相同硬件配置和性能。不同数据层的定义如下:

  1. data_content:内容层节点,通常用于处理不经常变化的数据,如产品目录或文章档案。这些节点优化了查询性能,通常需要较高的计算性能和处理复杂搜索及聚合的能力。

  2. data_hot:热层节点,用于处理最频繁访问和最近写入的时间序列数据,如日志或指标。这些节点需要快速的读写能力,通常配备SSD存储和更多的硬件资源。

  3. data_warm:温层节点,用于存储访问频率较低的时间序列数据,这些数据很少需要更新。温层节点通常不需要像热层节点那样快速,但仍然允许进行更新。

  4. data_cold:冷层节点,用于存储不常被查询的数据,这些数据通常不会更新。冷层节点可以配置为使用成本较低的硬件,并且可以进行压缩和减少副本数量以节省存储空间。

  5. data_frozen:冻结层节点,用于存储很少被查询且从不更新的数据。冻结层使用部分挂载的索引来存储和从快照存储库加载数据,这减少了本地存储和运营成本,同时仍然允许搜索冻结数据。

1.6 Rollover

  • 允许的阶段:rollover操作仅允许在“hot”阶段使用

  • 触发条件:rollover可以在满足以下一个或多个条件时触发:

    • max_age:索引创建后的最大时间。

    • max_docs:索引中的最大文档数量。

    • max_size:索引的总大小。

    • max_primary_shard_size:索引中最大主分片的大小。

    • max_primary_shard_docs:索引中最大主分片的文档数量。

1.7 Force merge

  • 允许的阶段force merge 操作允许在 "hot" 和 "warm" 阶段使用。

  • 与rollover的配合:在 "hot" 阶段使用 force merge 时,必须同时存在 rollover 操作。如果没有配置 rollover 操作,ILM将拒绝该策略。

  • 选项

    • max_num_segments:(必需,整数)合并到的段数。要完全合并索引,设置为1。

    • index_codec:(可选,字符串)用于压缩文档存储的编解码器。唯一接受的值是 best_compression,它使用DEFLATE提供更高的压缩比,但存储字段性能较慢。要使用默认的LZ4编解码器,请省略此参数。

2. cerebro

PUT your_index/_settings
{"index": {"number_of_replicas" : 1}
}

3. Curator


http://www.ppmy.cn/news/1560908.html

相关文章

Kbuild学习知识点

1.Kbuild本质:一个可扩展、可配置的Makefile框架,递归式Makefile,菜单式配置。 2.Kbuild构成: Makefile:顶层目录下的Makefile.config:内核的配置文件arch/S(ARCH)/Makefile:跟平台架构相关的Makefilescripts/Makefile.*:通用编…

【UE5 C++课程系列笔记】19——通过GConfig读写.ini文件

步骤 1. 新建一个Actor类,这里命名为“INIActor” 2. 新建一个配置文件“Test.ini” 添加一个自定义配置项 3. 接下来我们在“INIActor”类中获取并修改“CustomInt”的值。这里定义一个方法“GetINIVariable” 方法实现如下,其中第16行代码用于构建配…

keepalived详细笔记

一、Keepalived 概述 Keepalived 是一种基于 VRRP(Virtual Router Redundancy Protocol,虚拟路由器冗余协议)协议实现的高可用解决方案,主要用于服务器的负载均衡和高可用性保障,能够在主服务器出现故障时&#xff0c…

VScode SSH 错误:Got bad result from install script 解決

之前vscode好好的,某天突然连接报错如下 尝试1. 服务器没有断开,ssh可以正常连接 2. 用管理员权限运行vscode,无效 3. 删除服务器上的~/.vscode-server 文件夹,无效 试过很多后,原来很可能是前一天anaconda卸载导致注册表项 步…

MATLAB中binopdf函数用法

目录 语法 说明 示例 计算并绘制二项概率密度函数 binopdf函数的功能是计算二项概率密度函数。 语法 y binopdf(x,n,p) 说明 y binopdf(x,n,p) 使用 n 中对应的试验次数和 p 中每次试验的成功概率,计算 x 中每个值处的二项概率密度函数。 x、n 和 p 可以是…

人工智能之机器学习算法

所有的机器学习算法都是要优化的,优化的必要条件是确定优化的目标函数(损失函数),目标函数是根据实际问题(数据)转成的数学公式。 一.线性回归原理推导 (1)回归问题概述 在机器学习的有监督算法中,分类与回归二种情…

友元和运算符重载

1. 友元 可以把某些选定的函数看作类的“荣誉函数”,允许它们访问类对象中非公共的成员,就好像它们是类的成员一样,这种函数称为类的友元。友元可以访问类对象的任意成员。 1.1 友元函数 友元函数是一种定义在类外部的普通函数&#xff0…

Python学习(4):函数

1 默认值参数 为参数指定默认值是非常有用的方式。调用函数时,可以使用比定义时更少的参数,例如: def ask_ok(prompt, retries4, reminder请再试一次!):while True:reply input(prompt)if reply in {y, ye, yes}:return Trueif reply in {n…