迁移与升级可用区

Elasticsearch(简称ES)集群在升配时可用区规格库存不足,您可将该可用区下的节点迁移到其他资源充足的可用区,然后在新的可用区进行集群升配;若由于业务扩展,您的单可用区集群已无法满足高并发查询或大数据量写入需求,您可将集群的单可用区升级为多可用区,避免单点故障,增强集群高可用。本文介绍如何迁移及升级Elasticsearch的可用区。

背景信息

  • 可用区:物理机房和可用区基本可以理解为一对一的关系,个别情况是一对多的关系,例如AM5机房包含了cn-hangzhou-dcn-hangzhou-finance-d两个可用区,从ES管控角度来讲裁撤机房即裁撤可用区。

  • 迁移可用区:将目标可用区下的ES节点迁移至资源充足的其他可用区。该操作常用于解决资源瓶颈、进行负载均衡,避免因资源不足导致升配失败。ES提供了标准化的产品能力来实现可用区的集群迁移,集群迁移功能基于蓝绿部署能力,可实现平滑变更,确保过程全无损。

  • 升级可用区:将集群从单可用区扩展为多可用区,多可用区部署可提升集群的容灾能力。该操作常用于预防单点故障,增强集群的高可用性和稳定性。

费用说明

无论是迁移可用区或升级可用区,均按照您实际使用的节点数量收费,具体费用请以实际账单为准。计费详情,请参见阿里云ES计费

注意事项

  • 迁移可用区

    • 每次仅支持迁移单个可用区,如需迁移多个可用区,需分批次执行迁移操作。

    • 可用区迁移会触发集群滚动重启,迁移时长与集群规模、数据量及负载情况等相关,建议在业务低峰期做迁移。

    • 若集群索引存在副本分片且集群负载处于正常水平(CPU使用率在60%左右,堆内存使用率在50%左右,load_1m低于CPU核数),一般情况下,可用区迁移过程中,集群可持续对外提供服务。

    • 若集群负载过高且索引没有副本,同时业务中存在大量的写入或查询等场景,在可用区迁移过程中,业务可能会出现偶发的访问超时现象。建议在可用区迁移前,在客户端访问机制中配置重试机制,以减小对业务的影响。

  • 升级可用区

    • 仅支持将单可用区升级为多可用区(即两个可用区或三个可用区),不支持多可用区升级(即两个可用区无法升级为三个可用区)。

    • 为保障集群稳定性,升级时,系统会默认开启专有主节点。

    • 升级过程中,集群现有的节点会进行重启,并且系统会自动调整数据节点的数量,确保数据在多个可用区中均匀分布。

      数据节点计算公式:数据节点的总数量 = 升级后单可用区的数据节点数量 * 可用区数

      例如:某集群为单可用区,总共配置了6个数据节点,升级为3个可用区后,则该集群每个可用区的数据节点数量为2个。

      说明

      若单可用区的数据节点较少,升级为多可用区后,无法确保每个可用区至少分到一个数据节点,此时,系统会按需自动补充数据节点。例如,某单可用区集群总共只有2个数据节点,升级为3个可用区时,系统会自动补充一个数据节点(即总共3个数据节点),确保每个可用区都分配到一个数据节点。

前提条件

  • 迁移可用区

    • 确保集群处于健康状态。

      可通过GET _cat/health?v命令查看集群健康状态。

    • Kibana控制台执行以下命令,检查集群中是否存在状态为close的索引。如果存在,需要将对应索引的状态暂时设置为open,否则变更不成功。

      • 查看索引状态

        GET /_cat/indices?v

        查看索引状态

      • close状态的索引暂时设置为open状态

        POST /<index_name>/_open

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

    • 确保当前账号下存在资源充足的可用区。

      建议优先选择字母顺序靠后的新可用区(例如,对于cn-hangzhou-ecn-hangzhou-h可用区,优先选择cn-hangzhou-h),这类可用区资源一般较充足。迁移当前规格节点到其他可用区后,需手动升配集群,迁移过程中不会进行集群升配。

    • 确保cluster.routing.allocation.enable配置项设置为all(即允许ES自动分配分片),否则可能导致变更过程出现阻塞。

      可通过GET _cluster/settings命令查看相关配置。若cluster.routing.allocation.enable的取值不为all,可参考如下命令设置。

      PUT _cluster/settings
      {
        "transient": {
          "cluster.routing.allocation.enable": "all"
        }
      }
  • 升级可用区

    • 确保集群处于健康状态。

      可通过GET _cat/health?v命令查看集群健康状态。

    • 确保客户端完成连接分布的优化,以避免出现长连接分布不均匀现象。

      ES集群中,若客户端的长连接集中在某个可用区节点(例如,可用区A),而其他可用区节点连接数极少,则可用区A的节点可能因连接过多而导致负载过高、资源耗尽,而其他节点处于闲置状态。您可通过设置连接有效时长、并发重启客户端、使用单独的协调节点等方案优化连接分布,详情请参见长连接不均匀

    • 确保cluster.routing.allocation.enable配置项设置为all(即允许ES自动分配分片),否则可能导致变更过程出现阻塞。

      可通过GET _cluster/settings命令查看相关配置。若cluster.routing.allocation.enable的取值不为all,可参考如下命令设置。

      PUT _cluster/settings
      {
        "transient": {
          "cluster.routing.allocation.enable": "all"
        }
      }

迁移可用区

您可按照如下步骤,完成可用区的迁移:

重要

迁移可用区会触发集群重启,重启过程中集群可持续提供服务,但可能会导致服务不稳定,建议在业务低峰期操作。

  1. 进入实例详情页。

    1. 登录阿里云Elasticsearch控制台
    2. 在左侧导航栏,单击Elasticsearch实例
    3. 在顶部菜单栏选择资源组和地域,单击目标实例ID,进入实例详情页。

  2. 在实例的基本信息页面下方的节点可视化区域,将鼠标移动至需要迁移的可用区上,单击迁移

    image

  3. 可用区节点迁移对话框中,选择目标可用区虚拟交换机

    参数

    说明

    目标可用区

    选择节点需要迁移到的新的可用区。

    • 选择的目标可用区可能没有库存或显示暂不支持该可用区,换一个可用区即可。

    • 为尽可能实现节点部署的高可用性,不能选择已经部署了该ES集群节点的其他可用区。

    虚拟交换机

    对于单可用区的ES实例,需要选择新的虚拟交换机进行可用区迁移,一般选择默认提供的交换机。

    说明
    • 双可用区、三可用区实例或金融云实例,无须指定新的虚拟交换机

    • 若没有可用的交换机,可参考创建和管理交换机新建。

  4. 勾选数据迁移服务协议,单击确认

    确认后,集群会重启。重启成功,即可完成迁移任务。

    重要
    • 可用区迁移过程中,需要先在新的目标可用区购买新的Master节点,会临时出现2个可用区共存的现象。

    • 迁移成功后,ES集群节点将迁移到新可用区下。但控制台基本信息和升降配页面可能会因为信息更新不及时依旧显示旧可用区,此显示不影响在新可用区下使用ES集群。您可在控制台的节点可视化区域,查看集群节点所在的真实可用区。

    • 迁移后集群中的节点IP地址会发生变化。如果您在集群配置中指定了节点的IP地址,需要在迁移后更新。

升级可用区

您可按照如下步骤,完成可用区的升级:

说明

升级过程可能会出现负载不均衡问题,可参考集群负载不均问题的分析方法及解决方案处理。

  1. 进入Elasticsearch实例列表。

    1. 登录阿里云Elasticsearch控制台
    2. 在左侧导航栏,单击Elasticsearch实例
    3. 在顶部菜单栏处,选择资源组和地域。

  2. 单击目标实例操作列的升配

  3. 变配页面的可用区数量区域,按需选择升级为两个可用区或三个可用区(推荐),按照界面指引完成购买。

    说明

    其他配置可保持默认,也可按需配置。系统将按照您实际使用的节点数量收费,具体费用请以实际账单为准。计费详情,请参见阿里云ES计费

后续步骤

迁移或升级完成后,您可进入实例详情页,查看变更后的可用区详细信息。