转载:https://my.oschina.net/xiaomaijiang/blog/826701

当使用ElasticSearch做大规模的时序数据分析的时候,我们建议使用基于时序的索引并且采用3种不同类型的节点组成分层架构(Master、Hot-Node、Warm-Node),也就是我们所说的"Hot-Warm"架构。

Master Nodes

我们建议使用3个独立的主节点来提供足够的弹性,为了防止脑裂的问题,你应该把discovery.zen.minimum_master_nodes setting设置为2。通过利用专门的主节点来管理集群的状态和对集群的专门管理来提高整体系统的稳定性。由于这三个节点不存数据也不参与到搜索和索引的操作,因此他们不太可能收到GC的影响。所以我们可以为比数据节点低很多的配置

Hot Nodes

这个特别的数据节点完成所有的索引操作,它们也具有最新的索引信息,因为这些数据被查询到的几率很高。由于索引是一个高CPI和IO的操作,这些服务器需要配备SSD。为了达到高可用,我们建议最少运行3个Hot nodes,剩下的就根据自己的实际需要进行调整

Warm Nodes

这种类型的节点被用于存放只读并且很少被查询的索引。由于这些索引是只读的并且不太可能被频繁的查询,Warm nodes 会把他们放到比较廉价的磁盘中而不是SSD中。同样,我们建议最少使用3个Warm节点来保证高可用。这些节点的CPU和内存通常和Hot Nodes类似,剩下的根据实际情况来考虑

ElasticSearch集群需要知道哪些是热数据节点,哪些是冷数据节点,所以我们需要给节点打一下标记

例如,你可以修改elasticsearch.ymlnode.attr.box_type: hot来标记或者在启动的时候加参数也可以./bin/elasticsearch -Enode.attr.box_type=hot

冷数据的启动方式和热数据节点启动方式一样,修改配置文件的node.attr.box_type: warm或者./bin/elasticsearch -Enode.attr.box_type=warm

box_type这个属性的值是可以自己定义的,这个值用于告诉ES究竟要把数据分配到哪个索引

我们能够通过下面的配置来保证今天的数据都在热数据节点上

PUT /logs_2016-12-26
{
"settings": {
"index.routing.allocation.require.box_type": "hot"
}
}

几天后,如果这个索引不再经常被用到,我们可以把他移动到冷数据节点上

PUT /logs_2016-12-26/_settings
{
"settings": {
"index.routing.allocation.require.box_type": "warm"
}
}

当我们使用LogStash的时候,我们可以在创建索引的时候指定

{
"template" : "indexname-*",
"version" : 50001,
"settings" : {
"index.routing.allocation.require.box_type": "hot"
...

另外一种做法是设置通用模板

{
"template" : "*",
"version" : 50001,
"settings" : {
"index.routing.allocation.require.box_type": "hot"
...

当你判断一个索引不会被写入并且也不会被频繁的查询,你可以把它从热数据节点迁移到冷数据节点,所有的动作都会在修改索引的配置后由ES自动完成

最后,我们可以在冷数据节点上设置index.codec: best_compression来启用更好的压缩算法。当数据迁移到冷数据节点的时候,我们可以调用_forcemergeAPI进行段合并。这样做既节省内存,也节省磁盘和系统的文件打开数(因为段更少了),但是也会因为重新修改索引的压缩模式带来一些副作用

在索引还在热节点的时候进行强制合并操作不是一个好的实践,因为进程会非常的忙,一边要处理合并一边还要索引数据,会对索引的速度造成影响。但是在冷数据节点就没太大的问题

接下来我们来看看怎么使用Curator让这个过程自动化

在这个例子中,我们使用curator 4.2 来进行冷热数据的切换

actions:
1:
action: allocation
description: "Apply shard allocation filtering rules to the specified indices"
options:
key: box_type
value: warm
allocation_type: require
wait_for_completion: true
timeout_override:
continue_if_exception: false
disable_action: false
filters:
- filtertype: pattern
kind: prefix
value: logstash-
- filtertype: age
source: name
direction: older
timestring: '%Y.%m.%d'
unit: days
unit_count: 3

最后我们使用它来强制索引合并,这个过程会有点久。你可以在上面的配置中设置wait_for_completion或者修改unit_count来选择大于4天的索引,等索引迁移完后再进行强制合并的操作

2:
action: forcemerge
description: "Perform a forceMerge on selected indices to 'max_num_segments' per shard"
options:
max_num_segments: 1
delay:
timeout_override: 21600
continue_if_exception: false
disable_action: false
filters:
- filtertype: pattern
kind: prefix
value: logstash-
- filtertype: age
source: name
direction: older
timestring: '%Y.%m.%d'
unit: days
unit_count: 3

记得要调整timeout_override的值,默认是21600

从ES5.0开始,我们可以使用Rollovershirking api来处理shards,来完成一个更加简单易用的时间序列索引

ElasticSearch5.X的冷热数据架构的更多相关文章

  1. ELK冷热数据分离

      通常情况下,我们使用ELK日志分析平台最常用的数据时间为1周或一个月(因业务场景不同,可能存在差别),时间比较长的数据没有特殊情况可能我们就没有必要再进行查询了,但是因业务需求或者作为凭证,这些日 ...

  2. EFK教程(3) - ElasticSearch冷热数据分离

    基于ElasticSearch多实例架构,实现资源合理分配.冷热数据分离 作者:"发颠的小狼",欢迎转载与投稿 目录 ▪ 用途 ▪ 架构 ▪ 192.168.1.51 elasti ...

  3. 瓜子IM智能客服系统的数据架构设计(整理自现场演讲)

    本文由ITPub根据封宇在[第十届中国系统架构师大会(SACC2018)]现场演讲内容整理而成. 1.引言 瓜子业务重线下,用户网上看车.预约到店.成交等许多环节都发生在线下.瓜子IM智能客服系统的目 ...

  4. Redis混合存储-冷热数据识别与交换

    Redis混合存储产品是阿里云自主研发的完全兼容Redis协议和特性的混合存储产品. 通过将部分冷数据存储到磁盘,在保证绝大部分访问性能不下降的基础上,大大降低了用户成本并突破了内存对Redis单实例 ...

  5. ElasticSearch实战系列十: ElasticSearch冷热分离架构

    前言 本文主要介绍ElasticSearch冷热分离架构以及实现. 冷热分离架构介绍 冷热分离是目前ES非常火的一个架构,它充分的利用的集群机器的优劣来实现资源的调度分配.ES集群的索引写入及查询速度 ...

  6. 大数据架构-使用HBase和Solr将存储与索引放在不同的机器上

    大数据架构-使用HBase和Solr将存储与索引放在不同的机器上 摘要:HBase可以通过协处理器Coprocessor的方式向Solr发出请求,Solr对于接收到的数据可以做相关的同步:增.删.改索 ...

  7. 后Hadoop时代的大数据架构(转)

    原文:http://zhuanlan.zhihu.com/donglaoshi/19962491 作者: 董飞       提到大数据分析平台,不得不说Hadoop系统,Hadoop到现在也超过10年 ...

  8. 解密 Uber 数据团队的基础数据架构优化之路

    如果你用过Uber,你一定会注意到它的操作是如此的简单.你一键叫车,随后车就来找你了,最后自动完成支付,整个过程行云流水.但是,在这简单的流程背后其实是用Hadoop和Spark这样复杂的基础大数据架 ...

  9. 【转载】从 LinkedIn 的数据处理机制学习数据架构

    http://www.36dsj.com/archives/40584 译者:伯乐在线-塔塔 网址:http://blog.jobbole.com/69344/ LinkedIn是当今最流行的专业社交 ...

随机推荐

  1. 内核同步机制-RCU同步机制

    转自:https://blog.csdn.net/nevil/article/details/7718375 转自http://www.360doc.com/content/09/0805/00/36 ...

  2. iOS 跳转到系统指定设置界面

    在需要调转的按钮动作中添加如下的代码,就会跳转到设置中自己的app的设置界面,这里会有通知和位置权限的设置 NSURL * url = [NSURLURLWithString:UIApplicatio ...

  3. 关于tomcat session机制梳理

     一道题目引起的思考:"tomcat里怎样禁止服务端自己主动创建session". 1背景知识: 要说tomcat的机制.先从session说起. http是无状态协议(http详 ...

  4. 链接选项-rpath的一个问题记录

    问题简述 大概是这么一个情况,有一个过去已经写好的程序,这个程序用于处理网络通信,接收一些操作指令.具体的指令操作通过运行时加载动态库的形式进行扩展.(类似于net-snmp二次开发的一种形式) 问题 ...

  5. WWDC 2018:Swift 更新了什么?

    本文转载自:https://juejin.im/post/5b1cb5805188257d507be5d4所有权归原文所有 WWDC 2018 Session 401 What's New in Sw ...

  6. 【Windows】Dos中的日期的和时间

    在Dos中,我们可以通过动态变量DATE来取得当前日期,通过动态变量TIME来取得当前日期.实例1 C:\Users\hubin5>echo %date% 2013/03/11 周一 C:\Us ...

  7. 10.2.翻译系列:使用Fluent API进行属性映射【EF 6 Code-First】

    原文链接:https://www.entityframeworktutorial.net/code-first/configure-property-mappings-using-fluent-api ...

  8. 讲一讲MySQL如何防止“老鼠屎”类型的SQL语句

    [原谅我标题党了] 当然不可能有哪一个SQL语句会这么出名,以至于大家叫它“老鼠屎”:但是有一些SQL语句确实主是做着这样的事:由于程序的 局部性原理,数据库会把常用的数据缓存到内存中,对于这种场景通 ...

  9. 物联网架构成长之路(24)-Docker练习之Compose容器编排

    0.前言 一开始学的之后,是想一步到位直接上Kubernetes(K8s)的,后面没想到,好像有点复杂,有些概念不是很懂.因此学习东西还是要循序渐进,慢慢来.先了解单机编排技术Docker Compo ...

  10. 《转》vue 常用ui组件

    vux github ui demo:https://github.com/airyland/vux Mint UI 项目主页:http://mint-ui.github.io/#!/zh-cndem ...