索引设计不合理?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 放在一起执行,并在低峰期执行。

相关推荐
Elastic 中国社区官方博客17 小时前
使用 Elasticsearch 管理 agentic 记忆
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
七夜zippoe1 天前
Elasticsearch核心概念与Java客户端实战 构建高性能搜索服务
java·大数据·elasticsearch·集群·索引·分片
忍冬行者2 天前
Elasticsearch 超大日志流量集群搭建(网关 + 独立 Master + 独立 Data 纯生产架构,角色完全分离,百万级日志吞吐)
大数据·elasticsearch·云原生·架构·云计算
·云扬·2 天前
使用Prometheus+Grafana实现Elasticsearch监控的完整实践
elasticsearch·grafana·prometheus
阿杰 AJie2 天前
Git 分支与多人开发使用指南(Gitee + 本地 Git)
git·elasticsearch·gitee
海鸥812 天前
ArgoCD App of Apps 模式详解
java·elasticsearch·argocd
Dxy12393102162 天前
深度解析 Elasticsearch 8.13.4 范围查询 DSL
大数据·elasticsearch
Zilliz Planet2 天前
官宣 | Milvus 2.6云上GA:三层存储降本85% 、速度快ES 4-7 倍,多数据类型支持
大数据·elasticsearch·搜索引擎·全文检索·milvus
峥嵘life2 天前
Android16 系统每月Google安全补丁导入说明
大数据·elasticsearch·搜索引擎
Dxy12393102162 天前
Elasticsearch 8.13.4 地理范围查询实战指南
大数据·elasticsearch·jenkins