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

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介:

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



















本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/8136708.html,如需转载请自行联系原作者


相关实践学习
利用Elasticsearch实现地理位置查询
本实验将分别介绍如何使用Elasticsearch7.10版本进行全文检索、多语言检索和地理位置查询三个Elasticsearch基础检索子场景的实现。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
2月前
出现VW自适应方案报错already has a ‘content‘ property, give up to overwrite it的原因及解决办法
出现VW自适应方案报错already has a ‘content‘ property, give up to overwrite it的原因及解决办法
23 0
|
12月前
|
jenkins 持续交付
项目采坑日志——cannot create a build with number 9 since that (or higher) is already in use among [12]
项目采坑日志——cannot create a build with number 9 since that (or higher) is already in use among [12]
129 0
|
2月前
|
编译器 调度 C++
block的四种基本使用方式
block的四种基本使用方式
24 0
|
JavaScript 搜索推荐 API
【Ant Design Vue V3版本填坑记录一】Table 组件 column.slots 报错
【Ant Design Vue V3版本填坑记录一】Table 组件 column.slots 报错
662 0
使用bootstrap-table-fixed-columns固定表格列时底部滑动出现BUG
使用bootstrap-table时数据列过多,又想某列特殊显示?推荐你使用bootstrap-table-fixed-columns来解决吧!使用时需要注意 bootstrap-table和bootstrap-table-fixed-columns尽量保持一致,以防奇怪问题出现
609 0
使用bootstrap-table-fixed-columns固定表格列时底部滑动出现BUG
ADI
|
前端开发 容器
[记录] Flex语法教程
[记录] Flex语法教程
ADI
92 0
|
SQL Oracle 关系型数据库
测试3——探究shrink和move原理
shrink操作的机制: 我们接下来讨论一下shrink的实现机制,我们同样使用讨论move机制的那个实验来观察.SQL> create table TEST_HWM (id int ,name char(2000)) tablespace ASSM;T...
932 0
|
JavaScript
ant design vue a-table 表头和内容不对齐,一行代码解决问题
ant design vue a-table 表头和内容不对齐,一行代码解决问题
2232 1
|
Web App开发 存储 编解码
SAP Fiori Elements List Report Smart Table 列项目宽度计算的奥妙
SAP Fiori Elements List Report Smart Table 列项目宽度计算的奥妙
SAP Fiori Elements List Report Smart Table 列项目宽度计算的奥妙
|
JavaScript 应用服务中间件 开发工具
巧用gh-pages分支发布自己的静态项目
大家都知道可以通过github pages 发布自己的静态博客,然后通过 username.github.io 可以访问。例如我的博客可以通过 nqmysb.github.io 访问,不过我的已经绑定域名 https://liaocan.top ,所以会直接跳转到域名显示。
4140 0