Elasticsearch实战数据量级少的时候,单节点就能玩的很6,可是随着数据量的增加,多节点分布式横向扩展集群是大势所趋。html
以前分享过基于时间建立索引及Curator实现索引生命周期管理。node
当集群硬件资源有限,尤为SSD磁盘更紧俏的业务场景下,最大化集群的性能,如何让用户最关心的“热”数据分布到SSD磁盘对应的节点上,web
让用户关注程度弱的“冷”数据分散到普通磁盘对应节点上?也就是说“冷热”数据分离是本文讨论的内容。
提到冷热集群架构,一般咱们关注的问题以下:架构
官方叫法:热暖架构——“Hot-Warm” Architecture。
通俗解读:热节点存放用户最关心的热数据;温节点或者冷节点存放用户不太关心或者关心优先级低的冷数据或者暖数据。
图片来源cnblog 毛台的博客运维
冷热架构是一项十分强大的功能,可以让您将 Elasticsearch 部署划分为“热”数据节点和“冷”数据节点。elasticsearch
将这两种类型的数据节点结合到一块儿后,您便可以有效地处理输入数据,并将其用于查询,同时还能在节省成本的前提下在较长时间内保留数据。分布式
此架构对日志用例来讲尤为大有帮助,由于在日志用例中,人们的大部分精力都会专一于近期的日志(例如最近两周),而较早的日志(因为合规性或者其余缘由仍须要保留)则能够接受较慢的查询时间。ide
一句话:在成本有限的前提下,让客户关注的实时数据和历史数据硬件隔离,最大化解决客户反应的响应时间慢
的问题。svg
业务场景描述:
每日增量6TB日志数据,高峰时段写入及查询频率都较高,集群压力较大,查询ES时,常出现查询缓慢问题。性能
借助:Elasticsearch的分片分配策略,确切的说是:
Shard allocation awareness
https://www.elastic.co/guide/en/elasticsearch/reference/current/allocation-awareness.html
Index-level shard allocation filtering
https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-allocation-filtering.html#
第一:搭建一个两个节点的集群,划分热、热节点用。
节点层面设置节点类型。
热节点指定:
node.attr.hotwarm_type: hot
暖节点或冷节点指定:
node.attr.hotwarm_type: warm
第二:写入操做
方案一:索引层面指定路由。
PUT /logs_2019-10-01 { "settings": { "index.routing.allocation.require.hotwarm_type": "hot", "number_of_replicas": 0 } } PUT /logs_2019-08-01 { "settings": { "index.routing.allocation.require.hotwarm_type": "warm", "number_of_replicas": 0 } }
方案二:经过模板指定索引的冷热存储。
PUT _template/logs_2019-08-template { "index_patterns": "logs_2019-08-*", "settings": { "index.number_of_replicas": "0", "index.routing.allocation.require.hotwarm_type": "warm" } } PUT _template/logs_2019-10-template { "index_patterns": "logs_2019-10-*", "settings": { "index.number_of_replicas": "0", "index.routing.allocation.require.hotwarm_type": "hot" } }
第三:效果图详见附件图。
第四:借助curator按期迁移数据
随着时间发展,当前数据会成为历史数据。
历史数据要自动切换到普通磁盘的节点存储,能够借助curator实现。
cuator的安装再也不追溯,详细请参考官方文档。
https://www.elastic.co/guide/en/elasticsearch/client/curator/5.8/command-line.html
步骤1:定义cuator.yml,填写Elasticsearch集群配置信息。
步骤2:定义action.yml。
actions: 1: action: allocation description: >- Apply shard allocation routing to 'require' 'tag=cold' for hot/cold node setup for logstash- indices older than 3 days, based on index_creation date options: key: hotwarm_type value: warm allocation_type: require disable_action: false filters: - filtertype: pattern kind: prefix value: logs_ - filtertype: age source: name direction: older timestring: "%Y-%m-%d" unit: days unit_count: 3
步骤3:执行迁移。
C:\Program Files\elasticsearch-curator>curator.exe --config .\conf\curator.yml .\conf\action.yml 2019-10-13 22:28:31,662 INFO Preparing Action ID: 1, "allocation" 2019-10-13 22:28:31,662 INFO Creating client object and testing connection 2019-10-13 22:28:31,668 INFO Instantiating client object 2019-10-13 22:28:31,668 INFO Testing client connectivity 2019-10-13 22:28:31,675 INFO Successfully created Elasticsearch client object with provided settings 2019-10-13 22:28:31,677 INFO Trying Action ID: 1, "allocation": Apply shard allocation routing to 'require' 'tag=cold' f.... 2019-10-13 22:28:31,706 INFO Updating 2 selected indices: ['logs_2019-08-01', 'logs_2019-10-01'] 2019-10-13 22:28:31,706 INFO Updating index setting {'index.routing.allocation.require.hotwarm_type': 'warm'} 2019-10-13 22:28:32,559 INFO Action ID: 1, "allocation" completed. 2019-10-13 22:28:32,560 INFO Job completed.
node.attr.hotwarm_type:
单纯搜索官网你是找不到的。
由于:node.attr.*,你能够指定type类型、各类结合业务场景你的须要指定的值。
包括:官方的:按照磁盘大小设定。和我们的冷热节点。
白话文:就是标定节点划分分类的一个属性类型值。
这个坑网友也有疑惑:node属性(tag)如何设置,查资料看到了好几种方法很混乱 - Elastic 中文社区,官方文档说的不是特别清楚。
来自星友的线上实战反馈以下:
咱们现有的架构也是冷热分离。
在运维过程当中,能体会到这种架构的特色
是:
这种架构能在相对节约成本的前提下极大的提高性能
,可是不能彻底作到一种类型节点的故障对其余类型节点是无感的。
Elasticsearch6.6版本后已推出索引生命周期管理ilm功能。涵盖了冷热集群的部署和自动化实现。
最新实现参考:https://www.elastic.co/guide/en/elasticsearch/reference/7.4/index-lifecycle-management.html
官方最先2015年的博客就提到了冷热集群架构的实现,但“再显而易见的道理,也有80%的人可能不知道”并考虑到你们使用场景的良莠不齐,才梳理出本篇文章。
你的集群使用冷热架构了吗? 欢迎交流。
1)最新冷热架构官方文档:
https://www.elastic.co/cn/blog/deploying-a-hot-warm-logging-cluster-on-the-elasticsearch-service
2)最多参考冷热架构文档:
https://www.elastic.co/cn/blog/hot-warm-architecture-in-elasticsearch-5-x
3)国内最佳实践:elasticsearch冷热数据读写分离
https://elasticsearch.cn/article/6127
Elasticsearch基础、进阶、实战第一公众号