es 索引调整

方法一:使用 Reindex API(在线、无缝)
这是官方推荐的方式,可以在集群在线、服务基本不受影响的情况下完成。

步骤:

创建新索引
使用新的分片数量配置创建一个新的索引。你可以在这里调整 number_of_shards,也可以同时调整其他设置(如副本数、字段类型等)。

json
PUT /new_target_index
{
  "settings": {
    "number_of_shards": 10,    // 你想要调整到的新分片数量
    "number_of_replicas": 1
  },
  "mappings": {
    // 可以在这里定义新的映射,或者从原索引自动获取
    "properties": { ... }
  }
}
将数据从旧索引迁移到新索引
使用 _reindex API 将旧索引的数据拷贝到新索引中。

json
POST /_reindex
{
  "source": {
    "index": "old_source_index"
  },
  "dest": {
    "index": "new_target_index"
  }
}
验证数据
等待 _reindex 任务完成后,仔细检查新索引中的文档数量是否与旧索引一致。

json
GET /new_target_index/_count
GET /old_source_index/_count
别名切换(关键步骤,实现无缝切换)
如果你的应用是通过别名来访问索引的,这是实现零停机时间切换的关键。

假设你的应用访问的是别名 my_index_alias,它之前指向 old_source_index。

执行原子操作,将别名从旧索引切换到新索引。

json
POST /_aliases
{
  "actions": [
    {
      "remove": {
        "index": "old_source_index",
        "alias": "my_index_alias"
      }
    },
    {
      "add": {
        "index": "new_target_index",
        "alias": "my_index_alias"
      }
    }
  ]
}
完成这一步后,所有新的读写请求就会自动转到新的、拥有正确分片数量的索引上。

删除旧索引
在确认新索引运行稳定无误后,删除旧的索引以释放资源。

json
DELETE /old_source_index
优点:

几乎可以实现零停机。

安全可控,如果新索引有问题,可以随时回退(因为旧索引还在)。

可以在迁移过程中对数据和映射进行清洗和优化。

缺点:

在数据量非常大时,重建索引过程会消耗较多的集群资源(CPU、I/O)。

需要额外的磁盘空间来存储新索引的数据。

 

posted @ 2025-11-12 10:16  滴滴滴  阅读(2)  评论(0)    收藏  举报