不停机重命名与修改ES索引mapping的实战指南
需积分: 10 129 浏览量
更新于2024-09-07
收藏 13KB TXT 举报
"这篇文档详细介绍了在Elasticsearch (ES) 中如何在不中断服务的情况下,对现有的mapping进行重命名和修改。主要涉及到的操作包括删除旧索引、获取当前mapping、创建新mapping以及数据迁移。"
在Elasticsearch中,mapping是定义索引中字段的数据类型和其他设置的重要组成部分。它类似于传统数据库中的数据表结构。在生产环境中,如果需要修改mapping,直接删除原有mapping会导致数据丢失,因此必须采用不停机的方式进行操作。
首先,文档中提到的`DELETE`命令用于删除旧的索引,例如`DELETE http://192.168.251.179:9200/filebeat-6.2.4-2019.07.10`,这个命令会删除名为`filebeat-6.2.4-2019.07.10`的索引。然而,在实际操作中,为了保持服务不间断,我们并不直接删除旧索引,而是创建新的索引并更新mapping。
接着,通过`GET`请求获取旧索引的mapping,如`GET http://192.168.251.179:9200/filebeat*/_mapping`,这一步是为了获取当前索引的所有字段和它们的数据类型,以便在新建的mapping中进行修改。
然后,使用`PUT`命令创建新的索引并指定mapping,如`PUT http://192.168.251.179:9200/filebeat-6.2.4-2019.07.10_new/{"mappings": ...}`,这里创建了一个名为`filebeat-6.2.4-2019.07.10_new`的新索引,并且提供了新mapping的定义。新mapping可能包含了对某些字段数据类型的修改,例如将所有字符串类型映射为`keyword`,或者针对特定字段如`docker.container.labels`和`strings_as_keyword`设置特殊的mapping规则。
在更新mapping的过程中,通常会关闭动态映射(`date_detection": false`),这样可以避免新数据自动创建新的字段映射。同时,可以看到对日期字段`@timestamp`进行了特别处理,将其类型设置为`date`,以正确解析时间戳。
在完成新索引和mapping的创建后,需要将旧索引的数据迁移到新索引。这可以通过复制或重新索引数据来实现,确保新索引包含所有旧索引的数据。迁移完成后,可以更改应用程序指向新的索引,从而实现不停机的mapping更新。
整个过程的关键在于,避免直接修改正在使用的索引,而是创建一个新索引,更新mapping后将数据迁移到新索引,保证了服务的连续性。对于大型系统,这种策略是至关重要的,因为它可以防止因索引重建导致的服务中断。
2017-06-29 上传
2022-01-25 上传
2020-07-29 上传
2024-05-07 上传
2022-07-13 上传
2024-10-12 上传
2024-09-26 上传
2010-10-21 上传
墨眉亦无锋
- 粉丝: 23
- 资源: 5
最新资源
- 行业数据-20年9月份中国城市商铺房价对比.rar
- permission:一款带ui基于RBAC模型的可自由配置的原生的权限框架
- c-vector:C中的动态数组实现。类似于标准C ++中的Vector
- music_vue:基于网易云的音乐播放app
- Office_break:Proyecto de DEV和IPV。 正式销售:)
- tf-dr:TinyFugue 和 DragonRealms
- travel
- byte-buddy-agent-1.11.22-API文档-中文版.zip
- Academic_Department:苏州大学计科院院研会学术部
- seasons
- force-rest-api:用于Force.com REST API的Java库
- codealong_angular
- donmik-shootemup-quintus:这是用 Quintus.js 编写的射击游戏
- Face-Mask-Detection-Using-CNN
- SimpleEngine
- Picture-Perfect:创建视觉评估报告的工具