本文介绍Elasticsearch零宕机时间更新索引配置映射内容的方法,包括字段类型、分词器、分片数等。方法原理就是,利用别名机制,给索引配置别名,所有应用程序都通过别名访问索引。重建索引,通过索引原名将原索引导入新建索引。再为新索引配置相同的别名。确认成功导入后,则删掉老索引。实现配置参数更新。
注意:
以下所有操作都是基于一个前提:在建原始索引的时候,给原始索引创建了别名
PUT /my_index_v1 //创建索引 my_index_v1
PUT /my_index_v1/_alias/my_index //设置 my_index为 my_index_v1
1. 原始的索引bank,类型:account,mapping如下
{
"settings": {
"number_of_shards": 5
},
"mappings": {
"account": {
"properties": {
"balance": {
"type": "long"
},
"account_number": {
"type": "long"
},
"email": {
"type": "string"
},
"address": {
"type": "string"
},
"age": {
"type": "long"
},
"state": {
"type": "string"
},
"employer": {
"type": "string"
},
"lastname": {
"type": "string"
},
"gender": {
"type": "string"
},
"firstname": {
"type": "string"
},
"city": {
"type": "string"
}
}
}
}
}
2.新建一个空的索引bak_bak,类型:account,,分片20,balance,account_number,age字段由long改成了string类型,具有最新的、正确的配置
{
"settings": {
"number_of_shards": 20
},
"mappings": {
"account": {
"properties": {
"balance": {
"type": "string"
},
"account_number": {
"type": "string"
},
"email": {
"type": "string"
},
"address": {
"type": "string"
},
"age": {
"type": "string"
},
"state": {
"type": "string"
},
"employer": {
"type": "string"
},
"lastname": {
"type": "string"
},
"gender": {
"type": "string"
},
"firstname": {
"type": "string"
},
"city": {
"type": "string"
}
}
}
}
}
3.使用java API迁移索引,主要配置参数如下:
String searchHost = "192.168.11.51";// 旧索引地址
int searchPort = 9300;// 旧索引端口
String searchIndexName = "bank";// 旧索引名字
String searchType = "account";// 旧索引类型
String newIndexName = "bak_bank";// 新索引名字
String newType = "account";// 新索引类型
// 过滤器根据实际情况来定义,可以有选择性的导出数据,不定义filter的话,就是导出全部数据
String filter = "{ 'query' : {'query_string' : { 'query' : 'text:blup*'} } }"
.replaceAll("'", "\"");
String basicAuthCredentials = "base64_ifrequried=";
boolean withVersion = false;
final int hitsPerPage = 2000;//bulk批量操作的内存页大小,一般1000-2500比较合适
float waitInSeconds = 0.0f;//索引线程休眠时间
// increase if you have lots of things to update
int keepTimeInMinutes = 90;
4.接下来修改alias别名的指向(如果你之前没有用alias来改mapping,纳尼就等着哭吧)
curl -XPOST localhost:8305/_aliases -d '
{
"actions": [
{ "remove": {
"alias": "mybank",
"index": "bank"
}},
{ "add": {
"alias": "mybank",
"index": "bak_bank"
}}
]
}
5.确认导入正常时,将老索引删掉
curl -XDELETE localhost:8303/store_v1
相关推荐
**Elasticsearch (ES) 迁移工具详解** 在大数据时代,Elasticsearch作为一个流行的分布式搜索引擎和数据分析平台,被广泛应用于日志分析、监控、搜索和数据存储等场景。随着业务的发展,有时我们需要将ES的数据从一...
- **滚动更新(Rolling Update)**:在不停机的情况下更新集群配置或迁移数据。 #### ElasticSearch 实践案例 ElasticSearch 在实际应用场景中表现出了极高的灵活性和可扩展性。 - **日志分析**:收集和分析应用程序...
- **Reindexing**:无需停机即可重新构建索引,用于优化或迁移数据。 - **Kibana**:官方提供的数据可视化工具,用于数据探索和仪表盘创建。 - **Logstash**:数据收集和预处理工具,可与Elasticsearch配合构建日志...
数据会自动在新节点间重新分布,无需停机或数据迁移。 5. **多租户**:一个Elasticsearch实例可以同时管理多个索引,每个索引有自己的设置和映射(mapping),方便不同业务的需求。 6. **全文搜索**:Elastic...
7. **安全管理**:由于Elasticsearch默认是开放的,建议配置防火墙规则或安装X-Pack插件以增强安全性。 在使用Elasticsearch时,你还需要了解其索引、文档、类型、节点、集群等基本概念,以及如何进行数据导入、...
Laravel的Elasticsearch迁移使您可以轻松地在应用程序的环境中修改和共享索引架构。 内容 从头开始 迁移状态 零停机迁移 故障排除 兼容性 当前版本的Elastic Migrations已通过以下配置进行了测试: PHP 7.2-8.0 ...
Easy-ES介绍 ...全自动索引托管: 全球开源首创的索引托管模式,开发者无需关心索引的创建更新及数据迁移等繁琐步骤,索引全生命周期皆可托管给框架,由框架自动完成,过程零停机,用户无感知,彻底解放开发者
2. **实时搜索**:由于其内部采用倒排索引,Elasticsearch能够在极短的时间内完成对大量数据的搜索,提供近乎实时的搜索体验。 3. **弹性伸缩**:随着数据量的增长,可以通过增加节点轻松扩展集群,无需停机或迁移...
该软件包提供了用于在Elasticsearch中搜索和过滤...目录功能要求安装配置索引配置器可搜索的模型用法控制台命令搜索规则可用的过滤器零停机迁移调试替代功能特性一种配置和创建Elasticsearch索引的简便方法。 完全配置
随着数据量的增长,只需添加新的节点到集群,Elasticsearch 就能自动进行数据的重新分布和负载均衡,无需停机或进行复杂的数据迁移操作。 **8. 安全与监控** Elasticsearch 提供了内置的安全功能,如用户认证、角色...
- Reindex:用于迁移索引或对索引进行转换。 - Spark streaming交互:通过Elasticsearch的Spark connector,可以实现Elasticsearch与Spark的实时数据交互。 性能优化: - Bulk提交:使用bulk API可以提高大量数据的...
- **目标连接器示例**:Elasticsearch目标连接器可以将Kafka主题中的数据写入Elasticsearch索引,便于搜索和分析。 ### 5. **配置与管理** Kafka Connect支持动态配置,使得连接器的参数可以在运行时调整,无需...