一个简单的需求:将实时写入的索引写入到高性能但容量较小的节点,将不更新的历史索引转移到大容量性能不高的节点,并删除一段时间之前的索引。
配置两个节点(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天的自动删除。
看看效果: