索引设计不合理?Elasticsearch 零停机迁移救场指南

背景

在对外提供服务的线上环境中,发现 Elasticsearch 集群中核心业务涉及的索引设计不合理,需要做数据迁移,但不允许重启服务。

方案

使用 Alias 别名对外提供服务。

新建索引并设定好 Mapping,然后进行数据 reindex 迁移操作。

例如,设置索引 my_index 的 Alias 别名为 my_index_alias

json 复制代码
PUT my_index
{
    "aliases": {
        "my_index_alias": {} 
    },
    "settings": {
        "refresh_interval": "30s",
        "number_of_shards": 1,
        "number_of_replicas": 0
    }
}

创建新索引 my_index_v2,根据需要调整 mapping 配置。

json 复制代码
PUT my_index_v2
{
    "aliases": {},
    "settings": {
        "refresh_interval": "30s",
        "number_of_shards": 3,
        "number_of_replicas": 0
    }
}

将数据从旧索引 my_index 重索引到新索引 my_index_v2

json 复制代码
POST _reindex
{
  "source": {
    "index": "my_index"
  },
  "dest": {
    "index": "my_index_v2"
  }
}

当确认新索引已经准备就绪,并且所有数据都已经成功迁移后,更新别名 my_index_alias 以指向新索引 my_index_v2

json 复制代码
POST _aliases
{
  "actions": [
    { "remove": { "index": "my_index", "alias": "my_index_alias" } },
    { "add": { "index": "my_index_v2", "alias": "my_index_alias" } }
  ]
}

reindex 迁移索引到 aliases 更换别名指向的期间,如果有业务往旧索引 my_index写入数据,可能会导致数据不一致,建议将 POST _reindexPOST _aliases 放在一起执行,并在低峰期执行。

相关推荐
不学会Ⅳ8 小时前
【吃透 Elasticsearch 的核心原理】学习步骤
大数据·学习·elasticsearch
完美世界的一天1 天前
ES面试题系列「一」
大数据·elasticsearch·搜索引擎·面试·全文检索
好吃的肘子1 天前
ElasticSearch入门详解
java·大数据·elasticsearch·搜索引擎·云原生
极小狐1 天前
如何从极狐GitLab 容器镜像库中删除容器镜像?
java·linux·开发语言·数据库·python·elasticsearch·gitlab
A-花开堪折2 天前
RK3568-OpenHarmony(1) : OpenHarmony 5.1的编译
大数据·elasticsearch·搜索引擎
斯普信专业组2 天前
Elasticsearch内存管理与JVM优化:原理剖析与最佳实践
大数据·jvm·elasticsearch
SelectDB技术团队2 天前
可观测性方案怎么选?SelectDB vs Elasticsearch vs ClickHouse
大数据·数据仓库·clickhouse·elasticsearch·信息可视化·doris·半结构化
斯普信云原生组3 天前
Elasticsearch知识汇总之ElasticSearch部署
大数据·elasticsearch·jenkins
老友@3 天前
MySQL 与 Elasticsearch 数据一致性方案
数据库·mysql·elasticsearch·搜索引擎·同步·数据一致性
斯普信云原生组3 天前
Elasticsearch知识汇总之ElasticSearch与OpenSearch比较
大数据·elasticsearch·搜索引擎