前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch 节点排水并优雅下线

Elasticsearch 节点排水并优雅下线

原创
作者头像
sir5kong
修改2023-08-07 07:50:40
9061
修改2023-08-07 07:50:40
举报
文章被收录于专栏:企业容器化之路

在 Kubernetes 集群里,如果需要重启或移除某个节点,可以先对节点进行排水,然后就可以痛快地维护了。排水这个概念在其他集群环境里也是普遍存在的,但是说法可能不一样。

我最近解决了一个 Elasticsearch 集群维护的问题,就学习到了关于ES节点排水的操作。

背景

公司早期部署了一个 3 节点的ES集群,master 没有独立部署,每个节点同时具有 master 和 data 角色。随着业务量增长,ES服务器性能已经不能满足需求了,于是又部署了 3 个 data 节点,新的节点具有更好的性能。这样 6 个节点用起来也没问题,但是我想把早期的 3 个节点设置为纯 master 节点,确保 master 节点具有高可靠性。

解决思路

纯 master 角色不存储数据,我需要把 master 分片数据安全排空,然后把节点角色修改掉,最后依次重启节点就可以了。

  • 首先我上 Google 搜索了 Elasticsearch 节点排水,但是没有获得任何有效的答案,尝试搜索其他关键词也没有效果。
  • 然后我用 ChatGPT 提问 Elasticsearch 节点排水,得到了一个让我非常满意的回答。

ChatGPT 给出的答案

Elasticsearch 节点排水,也被称为节点维护,是指将 Elasticsearch 节点上的分片迁移走,以便进行维护或升级等操作。这一过程通常需要通过设置节点的 "cluster.routing.allocation.enable" 参数为 "none",然后再将其改回 "all" 来完成。

具体步骤如下:

  1. 将节点设置为 "排水" 状态,防止新的分片被分配到该节点。你可以通过以下命令完成:
代码语言:txt
复制
PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.exclude._ip": "<你的节点IP>"
  }
}
  1. 等待所有分片从该节点迁移走。你可以通过以下命令检查分片的迁移状态:
代码语言:txt
复制
GET /_cat/shards
  1. 当所有分片都已迁移,你可以关闭节点,并进行维护或升级操作。
  2. 完成维护或升级后,你可以重新启动节点,并将其设置回 "正常" 状态,允许分片被分配回该节点。你可以通过以下命令完成:
代码语言:txt
复制
PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.exclude._ip": null
  }
}

请注意,这些操作可能会影响 Elasticsearch 集群的性能,因此在执行时需要谨慎。


以上是 ChatGPT 原版答卷,后来我在 Google 搜索 Elasticsearch drain 得到了比 ChatGPT 更好一点的答案。

ES 混合节点转换纯 Master 实战操作

节点排水

首先需要获取目标ES节点的IP地址,然后在 Kibana Dev Tools 执行下面的操作:

代码语言:json
复制
 PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.exclude._ip": "192.168.8.10,192.168.8.11,192.168.8.12"
  }
}

等待排水结束

查看节点分片分布情况:

代码语言:txt
复制
GET /_cat/allocation?v=true

持续观察集群各节点分片变化情况,直到目标节点从列表中消失,这意味着目标节点所有索引分片都被迁移到其他节点了。

节点下线维护并转换角色

修改目标服务器节点角色属性:

代码语言:yaml
复制
node.roles: ["master"]

然后把节点逐个重启一遍,操作过程完全是平滑的,没有任何不良影响,到此问题就全部解决了。

恢复集群配置

代码语言:json
复制
 PUT /_cluster/settings
{
  "transient": {
    "cluster.routing.allocation.exclude._ip": null
  }
}

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 解决思路
  • ChatGPT 给出的答案
  • ES 混合节点转换纯 Master 实战操作
    • 节点排水
      • 等待排水结束
        • 节点下线维护并转换角色
          • 恢复集群配置
          相关产品与服务
          云服务器
          云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档