ES shrink ——一般是结合rollover一起使用的,一开始没有看懂官方shrink文档,当看了这个之后就明白了
2017-12-28 17:13
441 查看
rollover
Elasticsearch 从 5.0 开始,为日志场景的用户提供了一个很不错的接口,叫 rollover。其作用是:当某个别名指向的实际索引过大的时候,自动将别名指向下一个实际索引。因为这个接口是操作的别名,所以我们依然需要首先自己创建一个开始滚动的起始索引:
# curl -XPUT 'http://localhost:9200/logstash-2016.11.25-1' -d '{
"aliases": {
"logstash": {}
}
}'
然后就可以尝试发起 rollover 请求了:
# curl -XPOST 'http://localhost:9200/logstash/_rollover' -d '{
"conditions": {
"max_age": "1d",
"max_docs": 10000000
}
}'
上面的定义意思就是:当索引超过 1 天,或者索引内的数据量超过一千万条的时候,自动创建并指向下一个索引。
这时候有几种可能性:
条件都没满足,直接返回一个 false,索引和别名都不发生实际变化;
{
"old_index" : "logstash-2016.11.25-1",
"new_index" : "logstash-2016.11.25-1",
"rolled_over" : false,
"dry_run" : false,
"acknowledged" : false,
"shards_acknowledged" : false,
"conditions" : {
"[max_docs: 10000000]" : false,
"[max_age: 1d]" : false
}
}
还没满一天,满了一千万条,那么下一个索引名会是:
logstash-2016.11.25-000002;
还没满一千万条,满了一天,那么下一个索引名会是:
logstash-2016.11.26-000002。
shrink
Elasticsearch 一直以来都是固定分片数的。这个策略极大的简化了分布式系统的复杂度,但是在一些场景,比如存储 metric 的 TSDB、小数据量的日志存储,人们会期望在多分片快速写入数据以后,把老数据合并存储,节约过多的 cluster state 容量。从 5.0 版本开始,Elasticsearch 新提供了 shrink 接口,可以成倍数的合并分片数。注:所谓成倍数的,就是原来有 15 个分片,可以合并缩减成 5 个或者 3 个或者 1 个分片。
整个合并缩减的操作流程,大概如下:
先把所有主分片都转移到一台主机上;
在这台主机上创建一个新索引,分片数较小,其他设置和原索引一致;
把原索引的所有分片,复制(或硬链接)到新索引的目录下;
对新索引进行打开操作恢复分片数据。
(可选)重新把新索引的分片均衡到其他节点上。
准备工作
因为这个操作流程需要把所有分片都转移到一台主机上,所以作为 shrink 主机,它的磁盘要足够大,至少要能放得下一整个索引。最好是一整块磁盘,因为硬链接是不能跨磁盘的。靠复制太慢了。
开始迁移:
# curl -XPUT 'http://localhost:9200/metric-2016.11.25/_settings' -d '
{
"settings": {
"index.routing.allocation.require._name": "shrink_node_name",
"index.blocks.write": true
}
}'
shrink 操作
curl -XPOST 'http://localhost:9200/metric-2016.11.25/_shrink/oldmetric-2016.11.25' -d'
{
"settings": {
"index.number_of_replicas": 1,
"index.number_of_shards": 3
},
"aliases": {
"metric-tsdb": {}
}
}'
这个命令执行完会立刻返回,但是 Elasticsearch 会一直等到 shrink 操作完成的时候,才会真的开始做 replica 分片的分配和重均衡,此前分片都处于 initializing 状态。
注意:Elasticsearch 有一个硬编码限制,单个分片内的文档总数不得超过 2147483519 个。一般来说这个限制在日志场景下是不太会触发的,但是如果做 TSDB 用,则需要多加注意!
相关文章推荐
- 任何国家都无法限制数字货币。为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用 c.分布式算法的实现 d.数据存储技术 e.拜占庭算法 f.权益证明POW,POS,DPOS 原因一: 点对点网络设计 其中点对点的P2P网络是bittorent ,由于是点对点的网络,没有中心化,因此在全球分布式的网
- WM_PAINT在微软官方定义中,wParam和lParam都没有使用,所以就被Delphi给重定义了这个消息,还增加了DC(Delphi可任意改写消息的结构,只需要保持前4个字节是消息即可,另外要携带微软定义的所有必要信息就行了)
- 任何国家都无法限制数字货币。为什么呢? 要想明白这个问题需要具备一点区块链的基础知识: 区块链使用的大致技术包括以下几种: a.点对点网络设计 b.加密技术应用 c.分布式算法的实现 d.数据存储技术 e.拜占庭算法 f.权益证明POW,POS,DPOS 原因一: 点对点网络设计 其中点对点的P2P网络是bittorent ,由于是点对点的网络,没有中心化,因此在全球分布式的网
- 甲骨文官方文档,keytool使用方法, 要学习的看这个很全很权威;主要命令实录;
- CSS导圆角,不过这个代码没有怎么看懂,与一般的HTML是不同
- 今天在Mac机器上使用了Flex Builder编辑了一个源代码文件,保存后使用vim命令去打开时发现系统自动在每一行的结尾添加了^M符号,其实^M在Linux/Unix中是非常常见的,也就是我们在Win中见过的/r回车符号。由于编辑软件的编码问题,某些IDE的编辑器在编辑完文件之后会自动加上这个^M符号。看起来对我们的源代码没有任何影响,其实并不然,当我们把源代码文件Check In到svn之类
- CSS导圆角,不过这个代码没有怎么看懂,与一般的HTML是不同
- CSS导圆角,不过这个代码没有怎么看懂,与一般的HTML是不同
- 一起学微软Power BI系列-官方文档-入门指南(1)Power BI初步介绍
- Objective-c官方文档 怎么使用对象
- 绝不要使用在文档加载之后使用 document.write()。这会覆盖该文档
- xdoclet的官方地址.在没有好的开发插件的情况下可以到这里参考标签的使用
- Firefly官方教程之Netconnect使用文档
- 云笔记官方使用说明文档
- 为什么我使用source /etc/profile这个命令之后,新的环境变量只能在一个终端里面有效? 为什么我使用source /etc/profile这个命令之后,新的环境变量只能在一个终端里
- 学习使用Volley的多种基本功能-来自官方文档
- 【译】butterknife中文官方使用文档
- ECOtree小文档,当你使用的时候你就知道这个有多重要了
- ES权威指南[官方文档学习笔记]-5---talking to elasticsearch
- java工程项目里,在一个包里面,不能出现同名的类名,这问题是刚接触java才会遇到的,特别是新手一般都没有建立包,而是使用默认的,易出现同名的类名,导致eclipse提示错误