ElasticSearch索引生命周期管理(ILM)

注: 部分概念介绍来源于网络

  6.6 版本的发布,Index Lifecycle Management(索引生命周期管理,后文简称 ILM );
ILM 可以将索引生命周期分为四个阶段(Phase)(具体几个阶段可以根据实际情况设定);
  Hot 阶段:索引数据正在活跃的更新和查询,由于该阶段需要进行大量的数据读写,因此需要高配置的节点,也就是我们通常说的热数据,为保证性能数据通常都是在内存中或者SSD上;
  Warm 阶段:索引数据不再被更新,但是仍被查询,由于该阶段主要负责数据的读取,中等配置的节点即可满足需求,介于热和冷之间,数据来源于hot层,可以进行数据周期设置,shrink,forcemerge,reduce replica等操作,数据可以根据需求存在内存、硬盘以及SSD上;
  Cold 阶段:索引已经不被更新且很少查询。但是索引数据的信息还需要被搜索,若被搜索则比较慢,由于该阶段只负责少量的数据读取工作,低等配置的节点即可满足要求,数据通常存储在大容量的磁盘上;数据来源于warm层,可以进行数据周期设置,freeze等操作;
  Delete 阶段:索引按照设置的数据时间规则可被安全的删除。
ILM 将不同的生命周期管理策略称为 Policy,而所谓的 Policy 是由不同阶段(Phase)的不同动作(Action)组成的。
Action是一系列操作索引的动作,比如 Rollover、Shrink、Force Merge等,不同阶段可用的 Action 不同,详情如下:
  Hot Phase
    Rollover
    滚动索引操作,可用在索引大小或者文档数达到某设定值时,创建一个新的写入索引,将旧的写入索引的别名去掉,并把别名赋给新的写入索引。所以便可以通过切换别名控制写入的索引是谁,用于数据读写,从而控制单个索引的大小。这里要注意的一点是,如果启用了 Rollover ,那么所有阶段的时间不再以索引创建时间为准,而是以该索引 Rollover 的时间为准。
Rollover可。它可用于Hot阶段。
  Warm Phase
    Allocate 设定副本数、修改分片分配规则(如将分片迁移到中等配置的节点上)等
    Read-Onlly 设定当前索引为只读状态
    Force Merge 合并 segment 操作,可触发一个索引分片的segment merge,同时释放掉被删除文档的占用空间
    Shrink 缩小 shard 分片数,需要注意的是当shink完成后索引名会由原来的<origin-index-name>变为shrink-<origin-index-name>
  Cold Phase
    Allocate 设定副本数、修改分片分配规则(如将分片迁移到中等配置的节点上)等
  Delete Phase
    Delete 删除
如何应用到索引(Index)上面呢?
  修改索引配置可以直接修改(PUT index_name/_settings)或者通过索引模板(Index Template)来实现。
使用滚动索引有几个注意事项:
  索引命名最好以数值类型为结尾,比如 index-000001
  索引必须设置index.lifecycle.rollover_alias为滚动的别名;
  索还必须是别名的写入索引。
优先级设置
  这个action等同于设置索引属性index.priority的值。具有较高优先级的索引将在节点重启后优先恢复。通常,热阶段的指数应具有最高值,而冷阶段的指数应具有最低值。未设置此值的指标的隐含默认优先级为1。索引的优先级。必须为0或更大。也可以设置为null以删除优先级。
{
  "set_priority" : {
      "priority": 50
  }
}
强制合并
  使用强制合并时,索引将变成只读。
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "warm": {
        "actions": {
          "forcemerge" : {
            "max_num_segments": 1  //合并后的shard里的lucene segments数,
          }
        }
      }
    }
  }
}
收缩索引
  使用收缩索引时,索引将变成只读。收缩索引API允许您将现有索引缩减为具有较少主分片的新索引。目标索引中请求的主分片数必须是源索引中分片数的一个因子。如果索引中的分片数是素数,则只能缩小为单个主分片。
  新索引将有一个新名称:shrink-<origin-index-name>。因此,如果原始索引称为“logs”,则新索引将命名为“shrink-logs”。
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "warm": {
        "actions": {
          "shrink" : {
            "number_of_shards": 1
          }
        }
      }
    }
  }
}
冻结索引
  为了使索引可用且可查询更长时间但同时降低其硬件要求,它们可以转换为冻结状态。一旦索引被冻结,它的所有瞬态分片内存(除了映射和分析器)都会被移动到持久存储。
注意冻结一个索引会close并reopen,这会导致短时间内不可用,集群会变red,直到这个索引的分片分配完毕。
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "cold": {
        "actions": {
          "freeze" : { }
        }
      }
    }
  }
}
索引生命周期操作:
Alias(重新别名)
Allocation(分配分片)
Close(关闭索引)
Cluster Routing(集群路由)
Create Index(创建索引)
Delete Snapshots(删除快照)
Forcemerge(段合并)
Index Settings(索引设置)
Open(打开索引)
Reindex(重新索引)
Replicas(副本分配)
Restore(重新存储)
Snapshot(索引快照)
allocate:将分片移动到具有不同性能特征的节点上,并减少副本的数量。
delete:永久移除索引。
force merge:减少索引段的数量并清除已删除的文档。使索引为只读。
freeze:冻结索引以最大程度减少其内存的占用量。
read only:阻止对索引的写操作。
rollover:删除索引作为过渡别名的写索引,然后开始索引到新索引。(滚动索引)
set priority:降低索引在生命周期中的优先级,以确保首先恢复热索引。
shrink:通过将索引缩小为新索引来减少主分片的数量。(收缩索引)
unfollow:将关注者索引转换为常规索引。在进行滚动或收缩操作之前自动执行。
wait for snapshot:删除索引之前,确保快照存在。

创建 ILM Policy
索引名以 index 为前缀,索引的创建时间最大为1小时,索引的最大大小不超过50G,索引的最大文档数不超过1个
Rollover 后 2 小时转为 Warm 阶段
Rollover 后 3 小时转为 Cold 阶段
Rollover 后 4 小时删除
1.创建一个索引策略
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
//rollover前距离索引的创建时间最大为1小时
            "max_age": "1h",
//rollover前索引的最大大小不超过50G
            "max_size": "50G",
//rollover前索引的最大文档数不超过2个
            "max_docs": 2,
          }
        }
      },
      "warm": {
//rollover之后进入warm阶段的时间不小于2小时
        "min_age": "2h",
        "actions": {
          "forcemerge": {
//强制分片merge到segment为1
            "max_num_segments": 1
          },
          "shrink": {
//收缩分片数为1
            "number_of_shards": 1
          },
          "allocate": {
//副本数为1
            "number_of_replicas": 1
          }
        }
      },
      "cold": {
//rollover之后进入cold阶段的时间不小于3小时
        "min_age": "3h",
        "actions": {
          "allocate": {
            "require": {
//分配到cold 节点,ES可根据机器资源配置不同类型的节点
              "type": "cold"
            }
          }
        }
      },
      "delete": {
//rollover之后进入cold阶段的时间不小于4小时
        "min_age": "4小时",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
2.创建一个索引模版,指定使用的索引策略
PUT _template/my_template
{
//索引模版匹配的索引名以"index-"开头
  "index_patterns": ["index-*"],                 
  "settings": {
//索引分片数为2
    "number_of_shards":2 ,
//索引副本数为2 
    "number_of_replicas": 2,
//索引使用的索引策略为 my_policy
    "index.lifecycle.name": "my_policy",    
//索引rollover后切换的索引别名为 myindex
    "index.lifecycle.rollover_alias": "myindex"    
  }
}
3.创建一个符合上述索引模版的索引
PUT index-000001
{
  "aliases": {
    "myindex":{ //别名为 myindex
//允许索引被写入数据
      "is_write_index": true 
    }
  }
}
4.修改 ILM Polling Interval
ILM Service 会在后台轮询执行 Policy,默认间隔时间为 10 分钟,为了更快地看到效果,我们将其修改为 1 秒。
PUT _cluster/settings
{
  "persistent": {
    "indices.lifecycle.poll_interval":"1s"
  }
}
5.手动应用生命周期策略
你可以在创建索引的时候指定一个策略,也可以直接将策略应用到一个已经存在的索引上。一旦你应用了策略,ILM立即会开始管理该索引。
PUT test-index
{
    "settings": {
        "number_of_shards": 1,
        "number_of_replicas": 1,
        "index.lifecycle.name": "my_police"
    }
}
6.将策略应用于多个索引
PUT test-index-*/_settings
{
    "index": {
        "lifecycle": {
            "name": "my_policy"
        }
    }
}
7.索引策略执行失败
首先我们先看一下失败的原因是什么,可以用API查看一下:
GET /myindex/_ilm/explain
返回信息中step_info就是失败原因,假设是索引策略设置的有问题,比如说Shrink的主分片数设置的比模版的都大,我们只需要更新索引策略,解决问题。然后在重试让ILM继续执行下一步就好。
POST /myindex/_ilm/retry
8.索引策略的更新
每次更新索引策略的版本都会增加,对于还没有开始创建的索引,更新索引策略显然能够生效。对于已经存在的策略生效的索引,当前阶段是不会按照最新版本的策略执行的,必须等到变为下一个阶段了,才会按照最新版本的策略执行。
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_size": "25GB"
          }
        }
      },
      "delete": {
        "min_age": "4h",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
9.切换索引使用的索引策略:
PUT myindex/_settings
{
  "lifecycle.name": "my_other_policy"
}
10.ILM的启用禁用
ILM的状态查看:
GET _ilm/status
{
  "operation_mode": "RUNNING"
}
开启和关闭:
POST _ilm/start
POST _ilm/stop

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值