栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

ElasticSearch生命周期管理

ElasticSearch生命周期管理

  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完成后索引名会由原来的变为shrink-
  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-。因此,如果原始索引称为“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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/585019.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号