Elasticsearch ILM 主要有三个用途:
本篇文章主要介绍前 2 个用途,冷热架构请参考 下一篇。
要理解 ILM,必须先学习一下索引别名。
假设有三个索引,my-index-001
, my-index-002
, my-index-003
, 全部绑定到别名 my-alias
, 并且 my-index-003
设置了 "is_write_index": true
。这意味着对 my-alias
查询可以查询到以上所有三个索引的数据,而对 my-alias
写入数据只会写入到 my-index-003
。
上述案例,my-alias
扮演代理的角色,它把数据读写请求调度到真实的索引。
假设每个索引存储一个月的数据,my-index-001
是第一个月的数据,到了第三个月创建 my-index-003
my-index-001
即可,删除操作变得简洁,并且不影响服务器性能。这里使用 Kibana Dev Tools 快速完成全部操作。
version: "3"
volumes:
es-data: {}
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.9.0
# restart: always
ports:
- 9200:9200
volumes:
- es-data:/usr/share/elasticsearch/data
environment:
discovery.type: "single-node"
xpack.security.enabled: "false"
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
healthcheck:
test:
[
"CMD-SHELL",
"curl -s http://localhost:9200",
]
interval: 10s
timeout: 10s
retries: 120
kibana:
image: docker.elastic.co/kibana/kibana:8.9.0
# restart: always
ports:
- 5601:5601
depends_on:
elasticsearch:
condition: service_healthy
environment:
ELASTICSEARCH_HOSTS: '["http://elasticsearch:9200"]'
Kibana 需要在 Elasticsearch 启动完成后再启动,所以这里增加了 healthcheck 依赖
PUT /_ilm/policy/my-ilm-test-policy
{
"policy" : {
"phases" : {
"hot" : {
"actions" : {
"rollover" : {
"max_size" : "50gb",
"max_age" : "30d"
},
"set_priority" : {
"priority" : 100
}
}
},
"delete" : {
"min_age" : "100d",
"actions" : {
"delete" : {
"delete_searchable_snapshot" : true
}
}
}
}
}
}
当索引容量达到 50gb 或者 age 达到 30 天则触发索引滚动,滚动后继续保留 100 天,然后会被删除。如果不需要删除把上面 delete
属性去掉即可。
PUT /_index_template/my-ilm-test-template
{
"index_patterns" : ["my-ilm-test-idx-*"],
"priority" : 1,
"template": {
"settings" : {
"index.lifecycle.name": "my-ilm-test-policy",
"index.lifecycle.rollover_alias": "my-ilm-test-index",
"index.number_of_replicas" : 2
}
}
}
PUT my-ilm-test-idx-000001
{
"aliases": {
"my-ilm-test-index": {
"is_write_index": true
}
},
"settings" : {
"index" : {
"number_of_shards" : "1",
"number_of_replicas" : "2"
}
}
}
别名的名称以
index
结尾,索引名是my-ilm-test-idx-*
, 这样一眼就能看出哪个是索引哪个是别名。
到这里整个 ILM 流程就能工作了。
my-ilm-test-idx-000001
这是第一个索引,30天后会自动创建第二个索引 my-ilm-test-idx-000002
,并且 is_write_index
会绑定到新创建的索引。my-ilm-test-index
是索引别名,通过这个别名可以读取所有索引,但是只能写入最新的索引。以上三段全部拷贝到 Kibana Dev Tolls 执行一次即可,完整内容可以从 Gitee 拷贝。
如果你按照以上案例在自己的集群使用 ILM,请注意以下几点:
Elasticsearch 7.10
以上版本。my-ilm-test-policy
my-ilm-test-template
my-ilm-test-idx
my-ilm-test-index
需要修改成你自己的资源名称,把 my-ilm-test-
这个前缀整体替换掉即可。data_content
和 data_hot
角色的节点,默认情况下节点具有所有角色,如果你按角色分组部署了集群,则需要关注一下。原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。