当您的业务处于流量低峰期或集群中的数据量减少时,可通过阿里云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。对于多可用区实例,在变更时,需要确保集群中任意一个索引的副本数都小于可用区数。待变更完成后,您可以根据业务手动增加副本数。详细信息请参见索引模板。
如果集群负载过高且索引没有副本,同时在缩容过程中存在大量写入或查询等情况,在缩容过程中可能会出现访问超时的问题。建议在缩容前,在客户端中配置好重试机制,减小对业务的影响。
缩容数据节点
- 登录阿里云Elasticsearch控制台。
- 在左侧导航栏,单击Elasticsearch实例。
- 进入目标实例。
- 在顶部菜单栏处,选择资源组和地域。
- 在Elasticsearch实例中单击目标实例ID。
在基本信息页面,选择 。
在缩容配置区域,选择节点类型和缩节点个数。
缩容数据节点选择:
支持智能选择节点。
校验通过后,单击确定,系统自动进行待下线节点的数据搬迁和节点下线。
说明如果校验不通过,您需要根据页面提示处理异常结果,处理后再重新进行缩容操作。
支持用户自定义选择节点。具体操作如下:
在节点列表中单击选择需要缩减的数据节点。
选择后,阿里云Elasticsearch会对待缩容的节点进行校验。如果校验不通过,您需要根据页面提示处理异常结果,处理后再重新进行缩容操作。
检查项
正常状态
集群健康状态
集群状态正常(绿色)。
索引的allocation配置
allocation配置为all,即
cluster.routing.allocation.enable: all
,表示允许将所有类型的分片分配到对应节点上。索引的副本分布
不同副本分布在不同节点上。
缩容后,实例的剩余节点数
大于等于2。对于多可用区实例,还需确保每个可用区节点数大于等于2,且每个可用区剩余节点数相同。
数据迁移的目标节点的磁盘大小
缩容时,如果需要进行数据迁移,迁移后节点的磁盘使用率不超过75%。
数据迁移的目标节点的内存
缩容时,如果需要进行数据迁移,迁移后节点的内存使用率不超过70%。
节点的shard个数
被缩容节点的shard个数为0。
迁移数据。
为保证数据的安全,进行缩容的数据节点中不应该存在数据。如果所选数据节点中有数据,系统会提示您进行数据迁移。迁移后所选节点上不再有任何索引数据,新的索引数据也不会被写入该节点。
单击提示栏中的数据迁移辅助工具。
数据迁移辅助工具通过Elasticsearch分片过滤器实现数据平滑迁移,数据迁移过程业务无感知。
在集群数据节点迁移对话框,选择节点迁移方式。
参数
说明
系统建议
通过系统建议自动选择需要迁移的数据节点。
自定义
手动选择需要迁移的数据节点。
选中数据迁移协议,单击确认。
确认后,集群会进行重启。重启时,可在任务列表中查看数据迁移任务的进度,重启成功后,即可完成集群中对应数据节点的数据迁移任务。
说明数据迁移过程中,可以在任务列表中单击中断变更,停止迁移任务。
在实例的基本信息页面,再次选择 。
在缩容配置区域,选择已经完成数据迁移的节点,单击确定。
缩容时集群会进行重启。可在任务列表中查看缩容任务的进度,重启成功后,即可完成集群数据节点的缩容。
迁移回滚
数据迁移是一个周期很长的过程,在此期间集群状态和数据的变更可能会导致迁移失败,具体可在任务列表中查看。当数据迁移失败或者迁移完成后,可通过以下步骤对迁移节点进行回滚:
- 登录目标阿里云Elasticsearch实例的Kibana控制台,根据页面提示进入Kibana主页。登录Kibana控制台的具体操作,请参见登录Kibana控制台。说明 本文以阿里云Elasticsearch 6.7.0版本为例,其他版本操作可能略有差别,请以实际界面为准。
- 在左侧导航栏,单击Dev Tools。
在Console中执行以下命令,获取迁移节点的IP地址。
GET _cluster/settings
执行成功后,返回如下结果。
{ "transient": { "cluster": { "routing": { "allocation": { "exclude": { "_ip": "192.168.xx.xx,192.168.xx.xx,192.168.xx.xx" } } } } } }
执行以下命令,回滚迁移节点数据。
回滚部分节点数据。配置中要去掉需要回滚的节点,但要保留不回滚的节点。
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 } } } } } }
执行以下命令,校验是否完成数据回滚。
GET _cluster/settings
执行成功后,如果返回结果中不包含迁移节点的IP地址,则表示已经完成该节点的迁移回滚任务。您也可以通过观察相应节点是否被重新分配shard来判断。
说明数据迁移或回滚时,均可以通过
GET _cat/shards?v
命令查看任务状态。