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

相关推荐
QT 小鲜肉14 小时前
【Linux命令大全】001.文件管理之lsattr命令(实操篇)
linux·运维·服务器·笔记·elasticsearch
递归尽头是星辰15 小时前
Elasticsearch实战:检索优化、聚合分析与架构落地体系化
大数据·elasticsearch·架构·检索优化·聚合分析
Dxy123931021615 小时前
Elasticsearch 8.13.4 动态同义词实战全解析
大数据·elasticsearch
AC赳赳老秦15 小时前
农业智能化:DeepSeek赋能土壤与气象数据分析,精准预测病虫害,守护丰收希望
java·前端·mongodb·elasticsearch·html·memcache·deepseek
Huazzi.16 小时前
使用Scoop安装Git
git·elasticsearch·gitee·ssh·github·scoop
青云交16 小时前
Java 大视界 -- 实战|Elasticsearch+Java 电商搜索系统:分词优化与千万级 QPS 性能调优(439)
java·spring boot·elasticsearch·性能优化·搜索系统·容器化部署·母婴电商
yangmf204017 小时前
INFINI Gateway 助力联想集团 ES 迁移升级
大数据·数据库·elasticsearch·搜索引擎·gateway·全文检索
CLTHREE17 小时前
GitHub Fork到PR全流程操作指南
大数据·elasticsearch·搜索引擎
ModestCoder_1 天前
Git 版本管理教程
大数据·git·elasticsearch
Dxy12393102161 天前
ES8.13.4数据类型简介
elasticsearch