Elasticsearch数据生命周期如何规划

南墨1年前技术文章607

Elasticsearch中的open状态的索引都会占用堆内存来存储倒排索引,过多的索引会导致集群整体内存使用率多大,甚至引起内存溢出。所以需要根据自身业务管理历史数据的生命周期,如近3个月的数据open用于快速查询;过去3-6月的数据索引close以释放内存,需要时再开启;超过6个月的可以删除索引。

可以使用索引模板的方式按照一定时间创建新的索引,例如按天创建索引,索引的命名可能是index-yyyy-mm-dd,每天生成不同的索引,清除历史数据时可直接关闭或删除。

1.滚动索引

当一个索引过大或者过于陈旧时,滚动索引可以将索引的别名滚动到一个新的索引上,这个新的索引结构与旧索引结构相同。

滚动索引API需要指定一个索引别名和条件。发送请求时这个索引别名需要指向一个可以写入的索引,否则请求将无效。

索引别名:

指定的索引别名有以下两种情况:

1)如果别名指向一个索引,is_write_index未配置,此时旧索引别名将滚动到新索引上,同时旧索引别名将被删除;

2)如果索引别名指向一个或者多个索引,同时有一个或者多个索引的is_write_index设置为true,此时,这些可写入的索引将滚动别名同时将is_write_index设置为false,将别名滚动到新的索引同时将新索引的is_write_index设置为true

滚动条件:

滚动索引的API支持三个条件,如下所示。

参数名称

参数说明

max_age

索引最大年龄,单位支持d(天)、h(时)、m(分钟)、s(秒)

max_docs

索引应该包含最大的文档数,不包含索引副本的文档数量

max_size

索引主分片的最大估算大小,单位支持pbPB)、tbTB)、gbGB)、mbMB)、kbKB

 

当发出滚动请求的时候指定索引满足设定条件中的任意一个或者多个索引将会被滚动,如果不满足则不会滚动,elasticsearch暂不提供监听功能,需要滚动时需要手动触发。

索引命名规则:

滚动索引的命名必须满足一定规则否则无法正常滚动索引或者需要手动指定新的索引名称。

1.       -和数字结尾:如果现有索引名称以-和数字结尾例如log-1,新的索引名称将会根据现有数字大小加1,无论就得索引名称如何,新的索引的编号数字都会填充为6位,log-1索引滚动后新的索引名称为log-000002

2.       使用日期计算:新索引的命名也支持用滚动日期来命名,要求索引名称同样以-加数字结尾,比如log-2019.08.28-1,如果当天滚动索引的话新的索引名称为log-2019.08.28-000002,如果一天后滚动新的索引名称为log-2019.08.29-000002

也可以用日期计算进行创建索引并设定别名,如以下操作将会创建logs-2019.08.28-1索引,别名为logs_write

# PUT /<logs-{now/d}-1> with URI encoding:
PUT /%3Clogs-%7Bnow%2Fd%7D-1%3E
{
"aliases": {
"logs_write": {}
}
}

3.       日期计算:

日期计算的格式为:

<static_name{date_math_expr{date_format|time_zone}}>

参数说明为:

参数名称

说明

static_name

是名称的 static text 静态文本)部分

date_math_expr

是动态计算日期的动态 date math 表达式

date_format

是计算日期应呈现的可选格式。默认是 YYYY.MM.dd

time_zone

是可选的时区。默认为 utc 

 

日期计算表达式只支持公历。

必须将 date math 索引名称表达式包含在尖括号中,并且所有的特殊字符都应进行 URI 编码。例如 :

GET /3Clogstash - 7Bnow 2Fd 7D 3E / _search
{
"query": {
"match": {
"test": "data"
}
}
}

用于日期计算的特殊字符必须按照如下 URI 编码 :

%3C

%3E

/

%2F

{

%7B

}

%7D

|

%7C

+

%2B

:

%3A

,

%2C

 

以下示例显示了不同形式索引表达式和它们解析的最终索引名称,给定的当前时间是 2024  3  22  utc

表达

结果

<logstash-{now/d}>

logstash-2024.03.22

<logstash-{now/M}>

logstash-2024.03.01

<logstash-{now/M{YYYY.MM}}>

logstash-2024.03

<logstash-{now/M-1M{YYYY.MM}}>

logstash-2024.02

<logstash-{now/d{YYYY.MM.dd|+12:00}}>

logstash-2024.03.23

 

如果索引中要使用{},需要使用反斜杠“\”进行转义处理,例如:<elastic\\{ON\\}-{now/M}>的结果为elastic{ON}-2024.03.01

4.       自定义的索引名称:如果索引名称不满足以-加数字结尾,比如log,此时如果不指定新的索引名称请求会报错,自定义新的索引名称请求如下:

POST /test/_rollover/log_new
{
"conditions": {
"max_age": "1m",
"max_docs":"1000",
"max_size":"5gb "
}
}

如果滚动成功的话会生成log_new索引。

设置新的索引:

索引滚动时新的索引会根据匹配到的索引模板自动设置,也支持自定义的settingsmappingsaliases设定。请求中的设定值将会覆盖索引模版中相同的设定,比如可以进行以下设定:

POST /test/_rollover
{
"conditions": {
"max_age": "1m",
"max_docs":"1000",
"max_size":"5gb "
},
"settings" :{"index.number_of_shards"
2 }
}

新的索引的index.number_of_shards将会被设置为2

Dry运行:

滚动索引支持dry_run模式,可以在不执行实际滚动的情况下检查请求条件:

POST /test/_rollover?dry_run
{
"conditions": {
"max_age": "1m",
"max_docs":"1000",
"max_size":"5gb "
},
"settings" :{"index.number_of_shards"
2 }
}

 

 


相关文章

Keepalived 高可用解决方案

Keepalived 高可用解决方案

Keepalived 起初是为 LVS 设计的,专门用来监控集群系统中各个服务节点的状态,后来有加入 VRRP 的功能,VRRP 是 Virtual Router Redundancy protoco...

MySQL运维实战(7)建立复制

建立复制的基本步骤1、主库开启binlog主库需要配置的关键参数server_id:主备库需要设置为不同。log_bin:binlog文件的前缀,可以指定绝对路径,也可以只指定文件名。若不指定路径,b...

MS SQL Server partition by 函数实战二 编排考场人员

需求假设有若干已分配准考证号的考生,准考证号示例(01010001)共计8位,前4位为分类号,后4位为分类下的总排序号。现提供考场分配信息EXCEL文件(包括考场编号 、考场名称、考场容纳人数等),希...

MySQL 8.0 新特性:innodb_dedicated_server

MySQL 8.0 新特性:innodb_dedicated_server

一、前言Innodb Dedicated Server 是 8.0 版本推出的一个参数,开启之后可以根据服务器的配置自适应 innodb 引擎中的一些重要影响性能的参数,默认是关闭的。二、参数测试使用...

SQL Server优化入门系列(四)——  找到Top SQL

SQL Server优化入门系列(四)—— 找到Top SQL

说明从会话信息中我们可以查看实例当前正在运行的SQL、当前被Block的SQL。但是如果要查看过去一段时间执行的SQL,我们有几个选择1、通过外部SQL审计平台记录所有SQL。2、通过SQL Serv...

数仓主流架构简介之二

数仓主流架构简介之二

一、流批一体数据批流一体是一种云计算架构模式,它结合了批处理和流处理的特点,以实现更高效、灵活和可扩展的数据处理能力。在这种模式下,数据可以同时进行批处理和流处理,以满足不同场景下的需求流批一体:是指...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。