rollover

Elasticsearch 从 5.0 开始,为日志场景的用户提供了一个很不错的接口,叫 rollover。其作用是:当某个别名指向的实际索引过大的时候,自动将别名指向下一个实际索引。

因为这个接口是操作的别名,所以我们依然需要首先自己创建一个开始滚动的起始索引:

  1. # curl -XPUT 'http://localhost:9200/logstash-2016.11.25-1' -d '{
  2. "aliases": {
  3. "logstash": {}
  4. }
  5. }'

然后就可以尝试发起 rollover 请求了:

  1. # curl -XPOST 'http://localhost:9200/logstash/_rollover' -d '{
  2. "conditions": {
  3. "max_age": "1d",
  4. "max_docs": 10000000
  5. }
  6. }'

上面的定义意思就是:当索引超过 1 天,或者索引内的数据量超过一千万条的时候,自动创建并指向下一个索引。

这时候有几种可能性:

  • 条件都没满足,直接返回一个 false,索引和别名都不发生实际变化;
    1. {
    2. "old_index" : "logstash-2016.11.25-1",
    3. "new_index" : "logstash-2016.11.25-1",
    4. "rolled_over" : false,
    5. "dry_run" : false,
    6. "acknowledged" : false,
    7. "shards_acknowledged" : false,
    8. "conditions" : {
    9. "[max_docs: 10000000]" : false,
    10. "[max_age: 1d]" : false
    11. }
    12. }
  • 还没满一天,满了一千万条,那么下一个索引名会是:logstash-2016.11.25-000002
  • 还没满一千万条,满了一天,那么下一个索引名会是:logstash-2016.11.26-000002

shrink

Elasticsearch 一直以来都是固定分片数的。这个策略极大的简化了分布式系统的复杂度,但是在一些场景,比如存储 metric 的 TSDB、小数据量的日志存储,人们会期望在多分片快速写入数据以后,把老数据合并存储,节约过多的 cluster state 容量。从 5.0 版本开始,Elasticsearch 新提供了 shrink 接口,可以成倍数的合并分片数。

注:所谓成倍数的,就是原来有 15 个分片,可以合并缩减成 5 个或者 3 个或者 1 个分片。

整个合并缩减的操作流程,大概如下:

  1. 先把所有主分片都转移到一台主机上;
  2. 在这台主机上创建一个新索引,分片数较小,其他设置和原索引一致;
  3. 把原索引的所有分片,复制(或硬链接)到新索引的目录下;
  4. 对新索引进行打开操作恢复分片数据。
  5. (可选)重新把新索引的分片均衡到其他节点上。

准备工作

  • 因为这个操作流程需要把所有分片都转移到一台主机上,所以作为 shrink 主机,它的磁盘要足够大,至少要能放得下一整个索引。
  • 最好是一整块磁盘,因为硬链接是不能跨磁盘的。靠复制太慢了。
  • 开始迁移:
    1. # curl -XPUT 'http://localhost:9200/metric-2016.11.25/_settings' -d '
    2. {
    3. "settings": {
    4. "index.routing.allocation.require._name": "shrink_node_name",
    5. "index.blocks.write": true
    6. }
    7. }'

shrink 操作

  1. curl -XPOST 'http://localhost:9200/metric-2016.11.25/_shrink/oldmetric-2016.11.25' -d'
  2. {
  3. "settings": {
  4. "index.number_of_replicas": 1,
  5. "index.number_of_shards": 3
  6. },
  7. "aliases": {
  8. "metric-tsdb": {}
  9. }
  10. }'

这个命令执行完会立刻返回,但是 Elasticsearch 会一直等到 shrink 操作完成的时候,才会真的开始做 replica 分片的分配和重均衡,此前分片都处于 initializing 状态。

注意:Elasticsearch 有一个硬编码限制,单个分片内的文档总数不得超过 2147483519 个。一般来说这个限制在日志场景下是不太会触发的,但是如果做 TSDB 用,则需要多加注意!

ES shrink ——一般是结合rollover一起使用的,一开始没有看懂官方shrink文档,当看了这个之后就明白了的更多相关文章

  1. ES使用小结之索引Rollover

    Elasticsearch 使用小结之索引Rollover 索引名 一般而言,客户端将数据每天写入一个索引,比如直接写入YYYY-MM-HH格式的索引,那么我们只需要在写入的客户端里面获取时间,然后得 ...

  2. ES 父子文档查询

    父子文档的特点 1. 父/子文档是完全独立的. 2. 父文档更新不会影响子文档. 3. 子文档更新不会影响父文档或者其它子文档. 父子文档的映射与索引 1. 父子关系 type 的建立必须在索引新建或 ...

  3. ElasticSearch 学习记录之 分布式文档存储往ES中存数据和取数据的原理

    分布式文档存储 ES分布式特性 屏蔽了分布式系统的复杂性 集群内的原理 垂直扩容和水平扩容 真正的扩容能力是来自于水平扩容–为集群添加更多的节点,并且将负载压力和稳定性分散到这些节点中 ES集群特点 ...

  4. ES 07 - Elasticsearch查询文档的六种方法

    目录 1 Query String Search(查询串检索) 2 Query DSL(ES特定语法检索) 3 Query Filter(过滤检索) 4 Full Text Search(全文检索) ...

  5. ES使用C#添加和更新文档

    ElasticSearch 使用C#添加和更新文档 这是ElasticSearch 2.4 版本系列的第四篇: 第一篇:ES1:Windows下安装ElasticSearch 第二篇:ES2:Elas ...

  6. ES系列四、ES6.3常用api之文档类api

    1.Index API: 创建并建立索引 PUT twitter/tweet/ { "user" : "kimchy", "post_date&quo ...

  7. ES-PHP向ES批量添加文档报No alive nodes found in your cluster

    ES-PHP向ES批量添加文档报No alive nodes found in your cluster 2016年12月14日 12:31:40 阅读数:2668 参考文章phpcurl 请求Chu ...

  8. [译]ES读写文档时shard-replication模型

    官网页面:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-replication.html 本文是对官网页面的 ...

  9. ES _source字段介绍——json文档,去掉的话无法更新部分文档,最重要的是无法reindex

    摘自:https://es.xiaoleilu.com/070_Index_Mgmt/31_Metadata_source.html The _source field stores the JSON ...

随机推荐

  1. JQuery 一些特殊符号的使用

    前言:我写博客的频率与我的清闲程度成正比..   太闲了所以想记录一下JQuery里的特殊符号,级别:入门级.用到哪里写到哪里,不全面是肯定的. 其实只要接触前端就肯定少不了用jquery,但是以前太 ...

  2. Asp.net MVC4 Step by Step (2)-参数数据的传递

    首先创建一个表单,不同于WebForm,框架提供了一系列HMTL帮助方法来生成HTML标签. 下面创建一个Create.cshtml为文件名的视图. <h2> Create Auction ...

  3. 省市区县的sql语句——区县

    DROP TABLE IF EXISTS `area`; CREATE TABLE `area` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `code` va ...

  4. 复习java第五天(枚举、Annotation(注释) 概述)

    一.枚举 传统的方式: •在某些情况下,一个类的对象是有限而且固定的.例如季节类,只能有 4 个对象 •手动实现枚举类: —private 修饰构造器. —属性使用 private final 修饰. ...

  5. 解决JavaOpenCV的内存问题

    在使用OpenCV时,程序总是在某个时间墨明棋妙地终止,打开CygWin ,输入 adb logcat ,查看打印的信息,发现是内存问题.经过反复的查找,发现使用OpenCV的java类库时,一定要慎 ...

  6. Swift Pointer 使用指南

    Overview C Syntax Swift Syntax Note const Type * UnsafePointer<Type> 指针可变,指针指向的内存值不可变. Type * ...

  7. git与pycharm结合使用

    一.配置pycharm 在pycharm中选择file-->setting,在弹出的窗口中选择version control,选择git,配置git的路径 将当前项目关闭 在弹出的窗口中选择ch ...

  8. 团体程序设计天梯赛-练习集-L1-045. 宇宙无敌大招呼

    L1-045. 宇宙无敌大招呼 据说所有程序员学习的第一个程序都是在屏幕上输出一句“Hello World”,跟这个世界打个招呼.作为天梯赛中的程序员,你写的程序得高级一点,要能跟任意指定的星球打招呼 ...

  9. 利用perf排查sys高的问题

    思路 perf top perf record -C 44,48,60,63 -g -o a.data perf report -i a.data --call-graph 查看调用链,可以确定,基本 ...

  10. POJ 2229 Sumsets(找规律,预处理)

    题目 参考了别人找的规律再理解 /* 8=1+1+1+1+1+1+1+1+1 1 8=1+1+1+1+1+1+1+2 2 3 8=1+1+1+1+2+2 8=1+1+1+1+4 4 5 8=1+1+2 ...