Elasticsearch 分片迁移与移除集群节点操作

问题背景

在单台服务器上部署了 7 个 Elasticsearch 节点,分别为 es-node1 到 es-node7,端口从 9201 到 9207。每个节点都承载大量数据,但没有设置副本分片。由于多个节点共享同一台服务器的硬件资源,复杂查询时会导致 CPU 占用率达到 100%,查询响应时间也超过 8 秒。

当前的索引配置为 30 个主分片,0 副本分片:

{
  "aliases": {
    "cqu_dev_journal_thesis": {}
  },
  "settings": {
    "number_of_shards": 30,
    "number_of_replicas": 0,
    "index": {
      "refresh_interval": "5s",
      "max_inner_result_window": "10000",
      "max_result_window": "20000"
    }
  },
  "mappings": {
    "dynamic": "strict"
  }
}

由于 es-node6 和 es-node7 节点负担较重,计划停止并移除这两个节点以优化系统性能。

操作步骤

1. 确认集群健康状态

首先,需要确保当前数据的健康状态。通过以下命令检查集群状态:

http://<es-node1-ip>:9201/_cluster/health?pretty

该命令会返回集群的健康状态,如果返回的状态为 green,说明所有分片都已正常分配。如果状态是 yellowred,需要小心操作确保不会影响数据。

image-20240918150729915

2. 重新分配分片

由于计划停止的两个节点上持有主分片,首先需要将它们上的分片迁移到其他节点。

  • 防止新分片分配到 es-node6 和 es-node7:通过以下命令将分片迁移到其他节点,并防止新的分片分配到这两个节点上:
PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.exclude._name": "es-node6,es-node7"
  }
}

此设置会告诉集群不再将分片分配到 es-node6 和 es-node7 上,现有的分片也会开始自动迁移到 es-node1 到 es-node5。

image-20240918150836936

3. 监控分片迁移

可以通过以下命令查看分片的迁移状态:

http://<es-node1-ip>:9201/_cat/shards?v
  • 分片状态:当分片迁移完成后,state 字段会从 RELOCATING 变为 STARTED,表示分片已成功迁移并在新节点上运行。
  • 等待迁移完成:在所有分片都迁移完毕后,集群健康状态应为 green

image-20240918151130797

image-20240918151721937

image-20240918151919671

image-20240918153232349

4. 停止节点

确保所有分片迁移成功后,可以通过命令停止节点,此操作会安全地关闭 es-node6 和 es-node7 节点,不会影响其他节点的正常运行

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部