高效管理 Elasticsearch 中基于时间的索引

转自:http://stormluke.me/es-managing-time-based-indices-efficiently/

用 Elasticsearch 来索引诸如日志事件等基于时间的数据的人可能已经习惯了“每日一索引”模式:使用以天为粒度的索引名字来存放当天的日志数据,一天过去后再建一个新索引。新索引的属性可以由索引模板来提前控制。

这种模式很容易理解并且易于实现,但是它粉饰了索引管理的一些复杂的地方:

  • 为了达到较高的写入速度,活跃索引分片需要分布在尽可能多的节点上。
  • 为了提高搜索速度和降低资源消耗,分片数量需要尽可能地少,但是也不能有过大的单个分片进而不便操作
  • 一天一个索引确实易于清理陈旧数据,但是一天到底需要多少个分片呢?
  • 每天的写入压力是一成不变的吗?还是一天分片过多,而下一天分片不够用呢?

在这篇文章中我将介绍新的”滚动模式“和用来实现它的 API 们,这个模式可以更加简单且高效地管理基于时间的索引。

滚动模式

滚动模式工作流程如下:

  • 有一个用于写入的索引别名,其指向活跃索引
  • 另外一个用于读取(搜索)的索引别名,指向不活跃索引
  • 活跃索引具有和热节点数量一样多的分片,可以充分发挥昂贵硬件的索引写入能力
  • 当活跃索引太满或者太老的时候,它就会滚动:新建一个索引并且索引别名自动从老索引切换到新索引
  • 移动老索引到冷节点上并且缩小为一个分片,之后可以强制合并和压缩。

入门

假设我们有一个具有 10 个节点和一个节点池的集群。理想情况下我们的活跃索引(接收所有写入的索引)应该在每个热节点上均匀分布一个分片,以此来尽可能地在多个机器上分散写入压力。

我们让每个主分片都有一个复制分片来允许一个节点失效而不丢失数据。这意味着我们的活跃索引应该有 5 个主分片,加起来一共 10 个分片(每个节点一个)。我们也可以用 10 个主分片(包含冗余一共 20 个分片),这样每个节点两个分片。

首先,为活跃索引创建一个索引模版

PUT _template/active-logs
{
"template": "active-logs-*",
"settings": {
"number_of_shards": 5,
"number_of_replicas": 1,
"routing.allocation.include.box_type": "hot",
"routing.allocation.total_shards_per_node": 2
},
"aliases": {
"active-logs": {},
"search-logs": {}
}
}

由这个模板创建的索引会被分配到标记为 box_type:hot 的节点上,而 total_shards_per_node 配置会保证将分片均匀分布在节点中。我把其设置为 2 而不是 1,这样当一个节点失效时也可以继续分配分片。

我们将会用 active-logs 别名来写入当前的活跃索引,用 search-logs 别名来查询所有的日志索引。

下面是非活跃索引的模板:

PUT _template/inactive-logs
{
"template": "inactive-logs-*",
"settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"routing.allocation.include.box_type": "cold",
"codec": "best_compression"
}
}

归档的索引应该被分配到节点上并且使用 deflate 压缩来节约磁盘空间。我会在之后解释为什么把 replicas 设置为 0

现在可以创建第一个活跃索引了:

PUT active-logs-1

Rollover API 会将名字中的 -1 识别为一个计数器。

索引日志事件

。。。

高效管理 Elasticsearch 中基于时间的索引——本质是在利用滚动模式做数据的冷热分离,热索引可以用ssd的更多相关文章

  1. elasticsearch中保存时间格式

    利用logstash从文档中导入数据到es中,若未事先设定数据格式,有可能存储时间并未保存为date格式而是text格式. 时间若保存为text,则在会以字符串数组格式存储在es中,是乱序,不好查询. ...

  2. 【分布式搜索引擎】Elasticsearch中的基本概念

    一.Elasticsearch中的基本概念 以下概念基于这个例子:存储员工数据,每个文档代表一个员工 1)索引(index)  在Elasticsearch中存储数据的行为就叫做索引(indexing ...

  3. 基于时间的 SQL注入研究

    SQL注入攻击是业界一种非常流行的攻击方式,是由rfp在1998年<Phrack>杂志第54期上的“NT Web Technology Vulnerabilities”文章中首次提出的.时 ...

  4. ASP.NET Core 2.1中基于角色的授权

    ASP.NET Core 2.1中基于角色的授权 授权是来描述用户能够做什么的过程.例如,只允许管理员用户可以在电脑上进行软件的安装以及卸载.而非管理员用户只能使用软件而不能进行软件的安装以及卸载.它 ...

  5. Extjs4 中date时间格式的问题

    在Grid中显示时间,后台传过来的是date格式的数据(PHP date('Y-m-d', time()),一般在Ext model中定义数据的类型和格式: {name:'birth', type:' ...

  6. [Xcode 实际操作]九、实用进阶-(28)在iTunes Connect(苹果商店的管理后台)中创建一个新的新的APP

    目录:[Swift]Xcode实际操作 本文将演示如何在iTunes Connect(苹果商店的管理后台)中创建一个新的新的APP. 首先要做的是打开浏览器,并进入[iTunesConnect网站], ...

  7. 一文带您了解 Elasticsearch 中,如何进行索引管理(图文教程)

    欢迎关注笔者的公众号: 小哈学Java, 每日推送 Java 领域干货文章,关注即免费无套路附送 100G 海量学习.面试资源哟!! 个人网站: https://www.exception.site/ ...

  8. Elasticsearch中的索引管理和搜索常用命令总结

    添加一个index,指定分片是3,副本是1 curl -XPUT "http://10.10.110.125:9200/test_ods" -d' { "settings ...

  9. MySQL中基于mysqldump和二进制日志log-bin进行逻辑备份以及基于时间点的还原

    本文出处:http://www.cnblogs.com/wy123/p/6956464.html 本文仅模拟使用mysqldump和log-bin二进制日志进行简单测试,仅作为个人学习笔记,可能离实际 ...

随机推荐

  1. 自学Python九 爬虫实战二(美图福利)

    作为一个新世纪有思想有文化有道德时刻准备着的屌丝男青年,在现在这样一个社会中,心疼我大慢播抵制大百度的前提下,没事儿上上网逛逛YY看看斗鱼翻翻美女图片那是必不可少的,可是美图虽多翻页费劲!今天我们就搞 ...

  2. Vue蚂蜂窝Vue-cli+webpack做的

    先来看下效果 项目地址  喜欢star一下哦

  3. java 练习

    class Hello{ public static void main(String [] args) { System.out.println(" Hello 这是我的第一个java作品 ...

  4. C++编译错误fatal error C1004: 发现意外的文件尾

    出现这种情况就是类或者结构体的定义后面没有加“;”导致的. 而且这种问题好难排查.

  5. 用VS Code Debug Python

  6. 个人作业—Alpha测试

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/homework/3338 这个作业要求在哪里 htt ...

  7. cocos creator 底部按钮touch延迟

    cocos论坛里有这个问题: http://forum.cocos.com/t/ios-touchstart-bug/63367我的引擎版本:"engine_version": & ...

  8. VUE常见问题解决

    1.vue模板加载顺序 computed:例如分页的配置: created:dom加载前一般用来生成dom mounted:dom加载后用来覆盖渲染或者基于dom的操作 2.关于this指向的问题 通 ...

  9. IT培训机构的招生诈骗大曝光

    作者曾在某知名IT培训机构工作过,目睹了招生欺诈,后来作者果断辞职,不能为奸商工作,助纣为虐,在此曝光,以免学生的血汗钱白交.社会上的IT培训机构手法大都一样,奸商都是有套路的.X大青鸟,X内外企IT ...

  10. (34)Spring Boot的启动器Starter详解【从零开始学Spring Boot】

    Spring Boot应用启动器基本的一共有N(现知道的是44)种:具体如下: 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2 ...