Rollover
简介
了解Elasticsearch的同学应该都知道,索引的主分片在设定之后,改变(shrink,split,reindex)主分片数目的成本相当大;因此在设计之初,一定要规划好索引的分片数目。如果集群的中节点数目固定,且写入的数据不会再有更新操作或者更新操作极其少;可以使用Rolloverindex的方式来限制每个索引的大小。
Rollover:
若rollover-target绑定的当前索引满足设定的条件,执行滚动操作将会为rollover-target创建新索引。滚动目标可以是索引别名或者数据流;
当滚动目标是别名时,执行滚动别名将指向新的索引。
当滚动目标是数据流时,数据流将数据写入到新的索引,且新索引名后缀自增。
POST/alias/_rollover/my-index-{"conditions":{"max_age":"7d","max_docs":2,"max_size":"5gb"}}
如果需要实现Rollover自动化,可以自行实现一个定时任务请求该API或者使用Elasticsearch的indexlifecyclemanagement(ILM)功能。
2API介绍
2.RolloverAPI
POST/rollover-target/_rollover/target-index?wait_for_active_shards=numberPOST/rollover-target/_rollover?wait_for_active_shards=number
2.2URI参数
rollover-target
必填参数,参数类型string。将已存的索引别名或数据流,分配给目标索引,来完成执行滚动。
target-index
可选参数,参数类型string。代表要被创建和分配索引别名的目标索引名称;
目标索引名称必须遵循以下规则:
所有字符必须小写
不允许包含\,/,*,?,",,,
,``(spacecharacter),,,#
在7.0版本之前允许包含:,在7.0+不再支持
不能够以-,_,+开头
名称不能够是.或者..
长度不能超过字节(注意:这是字节数限制,如果是字符得看表示一个字符需要多少个字节)
名称以.开头已经过时;除了隐藏索引和由插件管理的内部索引
如果rollover-target为数据流,target-index参数是不被允许的;执行Rollover数据流会按照相应规则生产新的索引:格式为.ds-rollover-target-,其中-,数字必为6位数,左侧高位用0补充,每发生一次Rollover自增加。
如果rollover-target为一个索引别名,且别名绑定的索引以-number结尾;如果不指定target-index执行Rollover,将生成新的索引indexName-number+。
如果别名现绑定的索引名称不满足以-number形式结尾,则必须指定target-index。
2.3查询参数
dry_run
可选参数,参数类型为boolean,默认值为false。该参数的作用为检测index是否满足提供的rollover条件。如果设置为true,将会完成检查工作,但不会真正执行rollover。
include_type_name
可选参数,参数类型为boolean,默认值为false。在mappings体内要求必须有mappingtype。
wait_for_active_shards
可选参数,参数类型为string,默认值为(即只要一个主分片处于活跃便可以执行操作)。在执行rollover,要求处于活跃状态的索引分片副本数目,以保证数据的可靠和安全性;设置为all或任何正整数,最多为索引分片的总数(number_of_replicas+)。
详情可以参考Activeshards: