当您的业务处于流量低峰期或集群中的数据量减少时,可通过阿里云Elasticsearch的数据节点缩容功能,减少集群中数据节点的数量。本文介绍如何缩容集群中的数据节点。

前提条件

登录Kibana控制台,执行以下命令,检查集群中是否存在状态为close的索引。如果存在,需要将对应索引的状态暂时设置为open,否则变更不成功。
  • 查看索引状态
    GET /_cat/indices?v
    查看索引状态
  • 将close状态的索引暂时设置为open状态
    POST /<index_name>/_open

    <index_name>需要替换为状态为close的索引名称。

注意事项

  • 缩容集群数据节点操作会触发集群重启,集群变更后重启实际时长与集群规模、数据量及负载情况等有关系,建议在低峰期操作。
  • 如果集群索引存在副本分片且集群负载处于正常水平(CPU使用率在60%左右,堆内存使用率在50%左右,load_1m低于CPU核数),一般情况下,在集群重启过程中可持续对外提供服务。
  • Elasticsearch分片高可用要求备份分片和主分片不能分布在同一节点上。对于单可用区实例,过多的分片数可能会影响变更,建议副本分片数小于缩容后数据节点个数-1或副本设置为1。对于多可用区实例,在变更时,需要确保集群中任意一个索引的副本数都小于可用区数。待变更完成后,您可以根据业务手动增加副本数。详细信息请参见索引模板
  • 如果集群负载过高且索引没有副本,同时在缩容过程中存在大量写入或查询等情况,在缩容过程中可能会出现访问超时的问题。建议在缩容前,在客户端中配置好重试机制,减小对业务的影响。

缩容数据节点

  1. 登录阿里云Elasticsearch控制台
  2. 在左侧导航栏,单击Elasticsearch实例
  3. 进入目标实例。
    1. 在顶部菜单栏处,选择资源组和地域。
    2. Elasticsearch实例中单击目标实例ID。
  4. 基本信息页面,选择配置变更 > 集群数据节点缩容
  5. 缩容配置区域,选择节点类型
  6. 在节点列表中单击选择需要缩容的数据节点。
    选择后,阿里云Elasticsearch会对待缩容的节点进行校验。如果校验不通过,您需要根据页面提示处理异常结果,处理后再重新进行缩容操作。
    检查项正常状态
    集群健康状态集群状态正常(绿色)。
    索引的allocation配置allocation配置为all,即cluster.routing.allocation.enable: all,表示允许将所有类型的分片分配到对应节点上。
    索引的副本分布不同副本分布在不同节点上。
    缩容后,实例的剩余节点数大于等于2。对于多可用区实例,还需确保每个可用区节点数大于等于2,且每个可用区剩余节点数相同。
    数据迁移的目标节点的磁盘大小缩容时,如果需要进行数据迁移,迁移后节点的磁盘使用率不超过75%。
    数据迁移的目标节点的内存缩容时,如果需要进行数据迁移,迁移后节点的内存使用率不超过70%。
    节点的shard个数被缩容节点的shard个数为0。
  7. 迁移数据。
    为保证数据的安全,进行缩容的数据节点中不应该存在数据。如果所选数据节点中有数据,系统会提示您进行数据迁移。迁移后所选节点上不再有任何索引数据,新的索引数据也不会被写入该节点。
    1. 单击提示栏中的数据迁移辅助工具
      数据迁移辅助工具

      数据迁移辅助工具通过Elasticsearch分片过滤器实现数据平滑迁移,数据迁移过程业务无感知。

    2. 集群数据节点迁移对话框,选择节点迁移方式。
      参数说明
      系统建议通过系统建议自动选择需要迁移的数据节点。
      自定义手动选择需要迁移的数据节点。
    3. 选中数据迁移协议,单击确认
      确认后,集群会进行重启。重启时,可在任务列表中查看数据迁移任务的进度,重启成功后,即可完成集群中对应数据节点的数据迁移任务。
      说明 数据迁移过程中,可以在任务列表中单击中断变更,停止迁移任务。
  8. 在实例的基本信息页面,再次选择配置变更 > 集群数据节点缩容
  9. 缩容配置区域,选择已经完成数据迁移的节点,单击确定
    确定后,集群会进行重启。重启时,可在任务列表中查看缩容任务的进度,重启成功后,即可完成集群数据节点的缩容。

迁移回滚

数据迁移是一个周期很长的过程,在此期间集群状态和数据的变更可能会导致迁移失败,具体可在任务列表中查看。当数据迁移失败或者迁移完成后,可通过以下步骤对迁移节点进行回滚:

  1. 登录目标阿里云Elasticsearch实例的Kibana控制台,根据页面提示进入Kibana主页。
    登录Kibana控制台的具体操作,请参见登录Kibana控制台
    说明 本文以阿里云Elasticsearch 6.7.0版本为例,其他版本操作可能略有差别,请以实际界面为准。
  2. 在左侧导航栏,单击Dev Tools
  3. Console中执行以下命令,获取迁移节点的IP地址。
    GET _cluster/settings
    执行成功后,返回如下结果。
    {
      "transient": {
        "cluster": {
          "routing": {
            "allocation": {
              "exclude": {
                "_ip": "192.168.xx.xx,192.168.xx.xx,192.168.xx.xx"
              }
            }
          }
        }
      }
    }                        
  4. 执行以下命令,回滚迁移节点数据。
    • 回滚部分节点数据。配置中要去掉需要回滚的节点,但要保留不回滚的节点。
      PUT _cluster/settings
      {
        "transient": {
          "cluster": {
            "routing": {
              "allocation": {
                "exclude": {
                  "_ip": "192.168.xx.xx,192.168.xx.xx"
                }
              }
            }
          }
        }
      }
    • 回滚全部节点数据。
      PUT _cluster/settings
      {
        "transient": {
          "cluster": {
            "routing": {
              "allocation": {
                "exclude": {
                  "_ip": null
                }
              }
            }
          }
        }
      }                            
  5. 执行以下命令,校验是否完成数据回滚。
    GET _cluster/settings

    执行成功后,如果返回结果中不包含迁移节点的IP地址,则表示已经完成该节点的迁移回滚任务。您也可以通过观察相应节点是否被重新分配shard来判断。

    说明 数据迁移或回滚时,均可以通过GET _cat/shards?v命令查看任务状态。

常见问题