跨可用区部署可提升集群的容灾能力,系统会自动选择库存充足的可用区创建集群。在索引配置了副本的情况下,当某一可用区出现故障时,剩余的可用区依然可以不间断地提供服务,显著增强了集群的可用性。同时,您可以通过控制台的切流操作,将出现故障的可用区隔离,这时系统会自动在剩余的可用区中补充计算资源,满足业务对资源的需求。本文介绍如何部署和使用(切流和恢复)跨可用区实例。

场景

跨可用区部署支持单可用区、跨2个可用区、跨3个可用区三种部署方式,各部署方式的适用场景如下:
  • 单可用区:普通部署模式,适用于非关键任务型的工作(默认)。
  • 跨2个可用区:跨可用区容灾部署模式,适用于生产型的工作。
  • 跨3个可用区:高可用部署模式,适用于具有更高可用性要求的生产型的工作。

部署

  • 部署操作
    在购买阿里云Elasticsearch实例时,您可以选择可用区数量。当选择两个或三个可用区时,系统将部署跨可用区的Elasticsearch实例。部署时,系统会自动配置对应个数的可用区,无需手动选择。详细信息,请参见创建阿里云Elasticsearch实例购买页面参数(商业版)跨可用区部署
    注意 当选择多可用区时,您所选的以及控制台上显示的是集群流量入口所在的可用区(例如杭州可用区I)。实际部署时,系统会在所选规格机器库存充足的可用区(例如北京可用区H和北京可用区J)部署实例。
  • 注意事项
    类别 注意事项
    节点
    • 必须购买3个专有主节点。
    • 所选择的数据节点、冷数据节点及协调节点个数必须为可用区个数的整数倍。有关可用区的详细信息,请参见地域和可用区
    • 在购买跨2个可用区实例时,阿里云Elasticsearch采取如下部署方案:
      • 如果该区域存在至少3个可用区,且ECS库存充足,专有主节点会被部署在3个可用区中。保证当任意一个可用区出现故障时,集群依然可以选出主节点。
      • 如果当前区域仅有2个可用区,或者ECS库存不充足时,专有主节点会被部署在2个可用区中。当存在1个主节点的可用区出现故障时,集群依然可以选出主节点。当存在2个主节点的可用区出现故障时,需要在控制台上进行切流操作来恢复。
    索引副本
    • 对于跨两个可用区的实例,当其中一个可用区为不可用时,剩下的可用区需要继续提供服务,因此索引的副本个数至少为1。

      由于实例默认的副本分片数为1个,因此如果您对读性能没有特殊要求,可以直接使用默认值。

    • 对于跨三个可用区的实例,当其中一个可用区或两个可用区不可用时,剩下的可用区需要继续提供服务,因此索引的副本个数至少为2。

      由于实例默认的副本分片数为1个,因此需要修改索引模板调整默认的副本数。详细信息,请参见索引模板。例如,使用索引模板设置副本数为2,示例代码如下。

      PUT _template/template_1
      {
        "template": "*",
        "settings": {
          "number_of_replicas": 2
        }
      }                                
  • 配置说明
    部署时,系统会自动为跨可用区实例配置与分片分配策略相关的集群配置。详细信息,请参见Shard allocation awareness。例如,跨可用区实例部署在可用区cn-hangzhou-f和cn-hangzhou-g,则集群配置相关的参数说明如下。
    参数 说明 示例值
    cluster.routing.allocation.awareness.attributes
    注意 不要通过API修改此参数值,否则会引起异常。

    用于告知Elasticsearch,使用哪些节点属性设置分片的分配策略。跨可用区实例通过在节点的启动参数中加入Enode.attr.zone_id,来标识节点的可用区(例如某个节点部署在cn-hangzhou-g可用区,则在该节点的启动参数中加入-Enode.attr.zone_id=cn-hangzhou-g),因此该参数值固定为zone_id

    zone_id
    cluster.routing.allocation.awareness.force.zone_id.values 用于告知Elasticsearch,在跨可用区部署时,强制均分shard。假设索引中包含了1个主分片,3个副本分片,并且部署在cn-hangzhou-f和cn-hangzhou-g两个可用区。按照分片分配策略,系统会在cn-hangzhou-f分配两个分片,在cn-hangzhou-g分配两个分片。如果指定了cluster.routing.allocation.awareness.force.zone_id.values参数,当cn-hangzhou-f不可用时,该可用区的两个分片不会自动迁移到cn-hangzhou-g。
    说明 该参数值支持修改,默认配置为不会自动迁移。
    ["cn-hangzhou-f", "cn-hangzhou-g"]

使用(切流与恢复)

跨可用区实例部署完成后,如果发现实例中某一可用区中的节点出现问题,可通过切流操作,将来自客户端的流量只传输到剩余的在线状态的可用区中,并从集群中隔离被切流可用区中的节点。当被切流的可用区恢复正常后,可通过恢复操作,将来自客户端的流量传输到所有正常状态的可用区中,并在集群中重新加入被恢复的可用区中的节点。
注意 为了保证切流后集群读写操作正常,切流前,需要确保集群中的索引是有副本的。
  1. 登录阿里云Elasticsearch控制台
  2. 在左侧导航栏,单击Elasticsearch实例
  3. 进入目标实例。
    1. 在顶部菜单栏处,选择资源组和地域。
    2. 在左侧导航栏,单击Elasticsearch实例,然后在Elasticsearch实例中单击目标实例ID。
  4. 基本信息页面底部的节点可视化页签中,完成切流操作。
    1. 将鼠标移动到需要切流的可用区上,单击切流
      切流操作
    2. 操作提示对话框中,单击确认
      确认后,集群会重启,重启成功后即可完成切流操作。切流成功后,被切流的可用区状态会从在线状态变为下线状态。
      说明 切流时,阿里云Elasticsearch会为其他在线状态的可用区自动补充相应的专有主节点协调节点数据节点等,以保证索引的正常读写,以及充足的计算资源。
    如果切流前,索引是有副本的,而切流后集群健康状态为非正常(黄色)。那么当确认完成切流后,您可以登录Kibana控制台,参考以下命令设置集群参数,使得被切流可用区中的分片分配到剩余的可用区中。分片分配完成后,集群的健康状态就会变为正常(绿色)。
    PUT /_cluster/settings
    {
        "persistent" : {
            "cluster.routing.allocation.awareness.force.zone_id.values" : {"0": null, "1": null, "2": null}
        }
    }
  5. 节点可视化页签中,恢复被切流的可用区中的节点。
    1. 将鼠标移动到需要恢复的可用区上,单击恢复
      恢复操作
    2. 操作提示对话框中,单击确认
      确认后,集群会重启,重启成功后即可完成恢复操作。恢复成功后,被恢复的可用区状态会从下线状态变为在线状态。
      说明 恢复时,阿里云Elasticsearch会将切流操作中补充的专有主节点协调节点数据节点等移除。移除过程中,阿里云Elasticsearch会自动将被移除的数据节点中的数据迁移到其他数据节点中。