冷热数据是根据索引创建时间来进行迁移的。一旦迁移到冷数据节点,则无法再恢复成热数据,因为热数据节点中该索引已经没有分片存在了。
基于Docker搭建ES集群,并设置冷热数据节点
配置冷热数据迁移策略
PUT
https://192.168.x.xx:19200/_ilm/policy/my_cold_policy
{
"policy": {
"phases": {
"hot": {
"min_age": "0ms", #热数据=刚创建
"actions": {
"set_priority": {
"priority": 100
}
}
},
"cold": {
"min_age": "5m", #索引创建5分钟后数据迁移到冷数据节点
"actions": {
"allocate": {
"number_of_replicas": 0, #将副分片设置为0 因为我的冷数据节点是单机的所以 不设置副分片,如果设置了副分片那么节点必须是多个,因为ES默认主分片与副分片不能分在同一个节点上!
"include": {},
"exclude": {},
"require": {
"_tier_preference": "data_hot,data_cold"
}
}
}
}
}
}
}
绑定模版
PUT
https://192.168.xx.xx:19200/_index_template/global_template
{
"index_patterns": ["*"],
"priority": 2,
"template": {
"settings": {
"index.lifecycle.name": "my_cold_policy", #刚刚创建的冷热数据策略 也是大家常说的IML
"index.routing.allocation.include._tier_preference": "data_hot"
}
}
}
查询指定索引分区情况
GET
https://192.168.xx.xx:19200/_cat/shards/ecs_http20250122
查询索引分片情况,可以看到目前数据都是存在 node-1 node-3热数据节点上
查询某个索引的创建了多久
可以看到 创建了3分钟左右,并且处于热数据状态。
5分钟后
再次查询分片信息,发现数据均转移到node-2冷数据节点上