ES Rollover and Shrink API

Shrink API

      Shrink API允许我们将存在的索引转变为一个只包含主要分片的新索引。目标索引中请求的主要分片数量必须要为原索引中的因子(即原分片数量是新分片倍数),例如8个分片可以缩小到4、2、1个分片。如果原分片数量为素数则只能缩小到一个分片。在缩小开始时,每个分片的复制都必须在同一节点(node)存在。

缩小步骤:
1)首先,以相同配置创建目标索引,但是主分片数量减少。
2)然后硬链接( hard-linking ) 各部分自原索引到目标索引。(如果系统不支持硬链接,那么索引的所有部分都将复制迁移到新索引,将会花费大量时间)
3)最终,将会恢复目标索引,因为目标索引刚被重新打开就会被关闭。

准备缩小索引

curl -XPUT 'localhost:9200/my_source_index/_settings?pretty' -d'
{
  "settings": {
    "index.routing.allocation.require._name": "shrink_node_name",
    "index.blocks.write": true
  }
}'

1)强制所有分片都复制迁移到名字为 shrink_node_name 的节点上并且节点健康为绿色。
2)为了缩小索引,索引必须被标记为只读。index.blocks.write 避免索引的所有写操作,但是依然可以修改索引的基本信息,例如删除索引。
从原索引迁移将会花费一定时间。进度信息可以在所有分片都迁移完成前通过 _cat recoveryAPI 或者 cluster health API 使用 wait_for_no_relocating_shards 参数获得。

缩小索引

缩小索引 my_source_index 到 新的索引 my_target_index ,可以用下列请求,缩小索引API和创建索引 (create index) API 相似,并且对于目标索引接受 settingsaliases 参数

curl -XPOST 'localhost:9200/my_source_index/_shrink/my_target_index?pretty' -d'
{
  "settings": {
    "index.number_of_replicas": 1,
    "index.number_of_shards": 1, ##目标分片数量为原分片数量的因子
    "index.codec": "best_compression" ##最佳压缩时只会影响新写到索引的数据,例如当 force-merging 分片。
  },
  "aliases": {
    "my_search_indices": {}
  }
}'

上述请求将会在目标索引信息加入到集群时立即返回——他不会等到缩小操作开始。
注意:
1)目标索引存在
2)原索引主分片数量比目标索引多
3)原索引主分片数量是目标索引倍数
4)索引中的所有文档在目标索引将会被缩小到一个分片的数量不会超过 2,147,483,519 ,因为这是一个分片的承受的最大文档数量。
5)执行缩小进程的节点必须要有足够的空闲磁盘空间满足原索引的分片能够全部复制迁徙到该节点。

监测缩小进程

缩小进度可以被 _cat recovery API 或者 cluster health API 所监控。通过设置 wait_for_status 为 yellow ,可以等到所有的主分片都已经分配。

缩小API会在目标索引被创建时马上返回,这发生在所有分片被分配之前。这点说明这时所有分片都处于 unassigned 状态,如果出于任何原因目标索引分片无法分配到执行缩小的节点上,那么主分片状态会一直停留在 unassigned ,直到分片被分配。

一旦主节点分配成功,会转化状态会 initializing ,缩小进程就开始执行。当缩小操作结束的时候,这些分片会被激活。在这之后, Elasticsearch 将试图分配副本,甚至可能决定主分片迁至另一个节点。

等待激活分片

因为缩小操作会创建新的索引,所以 wait for active shards 设置依然有效。

Rollover API

      当现有索引被认为太大或太旧时,滚动索引API 会将别名滚动到新的索引。API 接受单个别名和条件列表。 别名只能指向一个索引。 如果索引满足指定的条件,则创建一个新的索引,并将别名切换到指向新的索引。

## 创建索引 logs-0000001 别名为 logs_write.
curl -XPUT 'localhost:9200/logs-000001 ?pretty' -d'
{
  "aliases": {
    "logs_write": {}
  }
}'
# Add > 1000 documents to logs-000001
#如果 logs_write 指向的索引是在7天以前创建的,或者包含1000个以上的文档,则会创建 logs-000002索引,并更新logs_write别名以指向logs-000002.
curl -XPOST 'localhost:9200/logs_write/_rollover ?pretty' -d'
{
  "conditions": {
    "max_age":   "7d",
    "max_docs":  1000
  }
}'

上述可能会返回如下的响应:

{
  "acknowledged": true,
  "shards_acknowledged": true,
  "old_index": "logs-000001",
  "new_index": "logs-000002",
  "rolled_over": true,
  "dry_run": false,
  "conditions": {
    "[max_age: 7d]": false,
    "[max_docs: 1000]": true
  }
}

如果现有索引的名称以 - 和数字结尾(比如 logs-000001), 新索引的名称将遵循相同的模式,增加数字(logs-000002)。 无论旧索引名称如何,编号为零填充长度为6。
如果旧名称与此模式不匹配,则必须按照如下所示,指定新索引的名称:

curl -XPOST 'localhost:9200/my_alias/_rollover/my_new_index_name?pretty' -d'
{
  "conditions": {
    "max_age":   "7d",
    "max_docs":  1000
  }
}'

使用滚动API的日期计算

使用日期计算: 根据索引滚动的日期来命名滚动索引是有用的技术,例如 logstash-2016.02.03.。 滚动API支持日期,但要求索引名称以一个破折号后跟一个数字,例如 logstash-2016.02.03-1,每次索引滚动时都会增加。 例如

# PUT /<logs-{now/d}-1> with URI encoding:
curl -XPUT 'localhost:9200/%3Clogs-%7Bnow%2Fd%7D-1%3E ?pretty' -d'
{
  "aliases": {
    "logs_write": {}
  }
}'
curl -XPUT 'localhost:9200/logs_write/log/1?pretty' -d'
{
  "message": "a dummy log"
}'
# Wait for a day to pass
curl -XPOST 'localhost:9200/logs_write/_rollover ?pretty' -d'
{
  "conditions": {
    "max_docs":   "1"
  }
}'

1)创建当日的索引 logs-2018.07.31-1
2)当日索引滚动, 立即生成如. logs-2018.07.31-000002 , 或者 logs-2018.08.01-000002 24小时后
然后可以按照 日期数学文档 中的描述来引用这些索引。 例如,要搜索过去三天创建的索引,可以执行以下操作:

# GET /<logs-{now/d}-*>,<logs-{now/d-1d}-*>,<logs-{now/d-2d}-*>/_search
curl -XGET 'localhost:9200/%3Clogs-%7Bnow%2Fd%7D-*%3E%2C%3Clogs-%7Bnow%2Fd-1d%7D-*%3E%2C%3Clogs-%7Bnow%2Fd-2d%7D-*%3E/_search?pretty'

定义新索引

新索引的设置,映射和别名取自任何匹配的索引模板。 此外,可以在请求正文中指定设置,映射和别名,就像 create index API一样。 请求中指定的值覆盖匹配索引模板中设置的任何值。 例如,以下滚动请求将覆盖 index.number_of_shardssetting:

curl -XPUT 'localhost:9200/logs-000001?pretty' -d'
{
  "aliases": {
    "logs_write": {}
  }
}'
curl -XPOST 'localhost:9200/logs_write/_rollover?pretty' -d'
{
  "conditions" : {
    "max_age": "7d",
    "max_docs": 1000
  },
  "settings": {
    "index.number_of_shards": 2
  }
}'

Dry run/干运行

滚动API支持dry_run模式,可以在不执行实际滚动的情况下检查请求条件:

curl -XPUT 'localhost:9200/logs-000001?pretty' -d'
{
  "aliases": {
    "logs_write": {}
  }
}'
curl -XPOST 'localhost:9200/logs_write/_rollover?dry_run&pretty' -d'
{
  "conditions" : {
    "max_age": "7d",
    "max_docs": 1000
  }
}'

等待激活分片

因为滚动操作会创建一个新的索引,因此在创建索引时的 wait_for_active_shards 设置也适用于滚动操作。

参考:
https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-rollover-index.html

http://cwiki.apachecn.org/pages/viewpage.action?pageId=4882801

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271