不停机重命名与修改ES索引mapping的实战指南

需积分: 10 2 下载量 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后将数据迁移到新索引,保证了服务的连续性。对于大型系统,这种策略是至关重要的,因为它可以防止因索引重建导致的服务中断。