ES7中,冷热分离和索引生命周期的简单实践
个人学习笔记,谢绝转载!!!
原文:https://www.cnblogs.com/wshenjin/p/15161861.html
索引生命周期管理的本质--RollOver
当现有索引被认为太大或太旧时,滚动索引API将别名滚动到新索引。
该API接受一个别名和一个条件列表。别名必须只指向一个索引。如果索引满足指定条件,则创建一个新索引,并将别名切换到指向新索引的位置。
ES索引生命周期管理分为4个阶段:hot、warm、cold、delete,其中hot主要负责对索引进行rollover操作,warm、cold、delete分别对rollover后的数据进一步处理
- hot: 主要处理时序数据的实时写入,该阶段可以根据索引的文档数、大小、时长决定是否调用rollover API来滚动索引
- warm: 可以用来查询,但是不再写入
- cold: 索引不再有更新操作,并且查询也会很少
- delete: 数据将被删除
注意:上述四个阶段不是必须同时存在(除hot阶段,其他为非必须)
一个简单的需求:将实时写入的索引写入到高性能但容量较小的节点,将不更新的历史索引转移到大容量性能不高的节点,并删除一段时间之前的索引。
配置两个节点(hot/warn)的ES集群
在配置文件中给ES节点打标签,用于区分冷热节点:
node.attr.node_type: hot //热节点
node.attr.node_type: warn //冷节点
效果:
GET /_cat/nodeattrs?v&h=node,attr,value
node attr value
es-node-01 node_type hot
es-node-02 node_type warn
......
配置索引模板
创建message-logs-*索引模板,并设置索引落到 hot 节点
PUT/_template/template_message_logs {
"index_patterns": ["message-logs-*"],
"settings": {
"number_of_shards": 3,
"number_of_replicas": 0,
"routing.allocation.require.node_type": "hot"
}
}
配置定时任务
## 每天1点将前一天的日志转移到warn节点
00 01 * * * curl -XPUT -H 'Content-Type: application/json' "http://127.0.0.1:9200/message-logs-$(date +\%Y\%m\%d -d'1 day ago')/_settings?pretty" -d '{"index.routing.allocation.require.node_type": "warn"}' >/dev/null 2>&1
## 每天2点将7天前的日志删除
00 02 * * * curl -XDELETE "http://127.0.0.1:9200/message-logs-$(date +\%Y\%m\%d -d'7 day ago')" >/dev/null 2>&1
这样message-logs-yyyymmdd索引就实现了冷热分离。当天的索引写入hot节点,定时任务将前一天的所以转移到warn节点,超过7天的自动删除。
看看效果:
使用ilm策略管理索引生命周期
定义httpd日志的冷热策略
10min进行rollover,之后1h后的索引进入warm只读阶段,3h后的索引删除
PUT /_ilm/policy/policy_httpd_logs {
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_age": "10ms"
}
}
},
"warm": {
"min_age": "1h",
"actions": {
"allocate": {
"require": {
"node_type": "warm"
}
},
"readonly": {}
}
},
"delete": {
"min_age": "3h",
"actions": {
"delete": {}
}
}
}
}
}
配置索引模板,将策略应用到模板
PUT /_template/template_httpd_logs {
"index_patterns": ["httpd-logs-*"],
"settings": {
"number_of_shards": 3,
"number_of_replicas": 0,
"index.lifecycle.name": "policy_httpd_logs",
"index.lifecycle.rollover_alias": "httpd-logs-alias",
"routing.allocation.require.node_type": "hot"
}
}
- index.lifecycle.name, 使用该模版创建的索引统一用“policy_httpd_logs”策略
- index.lifecycle.rollover_alias, 使用该模版创建的索引统一用“httpd-logs-alias”的别名进行管理
- index.routing.allocation.require.{attribute}, 使用该模版创建的索引统一分配在hot节点
手动创建第一个索引,并设置别名
索引创建的名称应该是以 “-00001”等可自增长的字段结尾,否则策略不生效
PUT/httpd-logs-000001 {
"settings" : {
"number_of_shards":3,
"number_of_replicas":0
},
"aliases": {
"httpd-logs-alias" : {
"is_write_index": true
}
}
}
看看效果:
学习参考
https://www.cnblogs.com/runnerjack/p/12758658.html
https://www.cnblogs.com/mikelaowang/p/13345318.html
https://www.cnblogs.com/small-k/p/8872423.html
https://blog.csdn.net/wwd0501/article/details/105118113/
https://blog.csdn.net/jiao_fuyou/article/details/50511255