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 用,则需要多加注意!

转载于:https://www.cnblogs.com/bonelee/p/8136708.html

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

  1. 02- ElasticSearch(简称ES)- 文档批量操作

    单个文档操作(增.改.删) # =================== # 1.创建索引 PUT es_document_db# 2.PUT 新增文档 PUT /es_document_db/_doc ...

  2. ES 5.x Bulk update重复的文档id性能低下

    现在很多公司(包括我们自己)将ES用作数据库数据的索引,将多个数据库的数据同步到ES是非常常见的应用场景.所以感觉这个问题可能会困扰不止一个用户,而官方的文档也没有对update的底层机制及局限做特别 ...

  3. ES 5.x bulk update重复的文档ID性能低下分析

    目前很多公司将ES作为数据库数据的索引,将多个数据库的数据同步到ES是非常常见的应用场景.所以感觉问题可能会困扰不止一个用户,而官方的文档没有对update底层机制作了详细的说明,特将该问题整理成文章 ...

  4. 【ES笔记01】ElasticSearch数据库之index索引、doc文档、alias别名、mappings映射结构的基本操作

    这篇文章,主要介绍ElasticSearch数据库之index索引.doc文档.alias别名.mappings映射结构的基本操作. 目录 一.索引index相关操作 1.1.创建索引 1.2.查询索 ...

  5. Elasticsearch——使用Java API实现ES中的索引、映射、文档操作

    文章目录: 1.开篇 2.案例详解 2.1 创建ES客户端:完成与ES服务端的连接 2.2 创建索引 2.3 查看索引 2.4 删除索引 2.5 创建文档 2.6 修改文档 2.7 查看文档 2.8 ...

  6. es 父子查询_ElasticSearch 父子文档及多代父子文档(grandchild)解析之爸爸去哪儿了...

    0x00 elasticsearch elasticsearch 简称 ES,是一个当前流行的搜索服务器(全文搜索引擎),不得不说,它的搜索速度以及提供的丰富搜索选项,在面对企业级的需求时,大多数情况 ...

  7. es父子结构查询_ES 父子文档查询

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

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

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

  9. 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 ...

最新文章

  1. react 错误边界_React with GraphQL和错误边界中的自定义错误页面
  2. 推荐使用的几款Java常用基础工具库
  3. 科学家王海峰:从百度十篇论文入选ACL 2019说起
  4. muduo之LogFile
  5. http访问不到服务器_HTTP及会话技术解析:大魏Java记4
  6. jpa 使用jdbc_在JPA和JDBC中使用存储过程。 嗯,只要使用jOOQ
  7. JSP文件如何转换成Java文件?
  8. android 中radiogroup滑动切换,巧妙实现缺角radiogroup控制多个fragment切换和滑动
  9. linux支持异步io吗,Linux 异步IO
  10. 李想:欣赏特斯拉 但更喜欢苹果、乔布斯
  11. Gstreamer之No package ‘gstreamer-1.0‘ found解决(十一)
  12. python语言命名规则的是()_python语言命名规则是什么?
  13. Ubuntu20.04基本配置和常见问题(vmwareTools配置、换源、网卡配置)
  14. web安全设置(含IIS,php,ASP.NET)与目录权限设置
  15. autocad2007二维图画法_AutoCAD2007中文版机械制图教程
  16. Qt: Exception at 0x7ff8082c4f69, code: 0xe06d7363: C++ exception, flags=0x1 (execution cannot be ...
  17. 4412开发板项目实战-云服务器智能家居
  18. 剁手节致敬!听当年的老人讲述阿帕网(互联网前身)诞生的故事
  19. 【学术论文】查找论文、查找并理解配套代码(持续更新~)
  20. 在WordPress评论里添加电话、手机号、微信号的表单功能教程

热门文章

  1. Django报错:mysql ImproperlyConfigured: mysqlclient 1.3.13 or newer is required, you have 0.9.3的解决办法
  2. Java基础之Hibernate
  3. 计算机表格计算总积分,Excel函数教程: 根据条件计算成绩表-excel技巧-电脑技巧收藏家...
  4. idea提交git差件_多人合作使用git,推送代码、和并分支
  5. java中有没有栈_Java中堆和栈有什么区别
  6. 文字描边加粗_让文字表现出十足的个性!
  7. 本构二次开发 c语言,umat二次开发超弹性本构.doc
  8. java个人所得税计算_java个人所得税计算器 | 学步园
  9. mysql一些原生基本操作
  10. 一次违反常规的Java大厂面试经历,你还看不懂吗?