文档章节

ElasticSearch5.X的冷热数据架构

小埋酱
 小埋酱
发布于 2017/01/17 18:24
字数 1209
阅读 1890
收藏 34

原文出处:https://www.elastic.co/blog/hot-warm-architecture-in-elasticsearch-5-x

当使用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,来完成一个更加简单易用的时间序列索引

© 著作权归作者所有

小埋酱

小埋酱

粉丝 49
博文 45
码字总数 30787
作品 4
广州
技术主管
私信 提问
加载中

评论(2)

Galen_Z
Galen_Z
mark一下
uni7corn
uni7corn
@Qiujuer @Qiujuer 关注下! @Qiujuer
Redis混合存储-冷热数据识别与交换

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

怀听
2018/07/17
0
0
飞天技术汇 | 阿里云Redis产品升级大全

阿里云Redis重磅产品升级:全球多活版、混合存储版、多线程性能增强版。 这期飞天技术汇你将看到 ● 企业如何实现业务快速全球化布局 ● 冷热数据如何分离 ● 多IO线程如何面对高并发业务 助...

阿里云头条
2018/09/03
0
0
利用云存储网关实现数据分层存储

数据分层存储是说根据数据的冷热层度选择不同的存储介质来存储相应的数据,从而降低数据的总存储成本。好的数据分层方案,在降低数据存储成本的同时,对前端应用的访问性能影响也不是很大。比...

xiaoli_test
08/15
0
0
Elasticsearch通过JAVA创建索引、Mapping以及数据的增删该查操作

因为目前项目中用的JDK是1.7版本的,而ElasticSearch5.x版本需要使用JDK1.8版本,所以以下的代码都是基于ElasticSearch 2.4.6版本的,以下的代码是从项目中提取出来的,所以有些跟业务相关的...

zchuanzhao
2018/07/10
4.2K
0
HBaseCon亚洲2018峰会盛大开幕 阿里带你洞悉HBase大数据生态最新发展和行业实践

8月17日,HBaseCon亚洲2018峰会在北京歌华开元大酒店盛大开幕。作为Apache基金会旗下HBase社区的顶级用户峰会,HBaseCon大会是Apache HBase™官方从2012年开始发起和延续至今的技术会议,先后...

桐碧2018
2018/08/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
484
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
20
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
10
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
31
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
29
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部