部署和使用跨可用区实例

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

应用场景

跨可用区部署支持单可用区、跨2个可用区、跨3个可用区三种部署方式,各部署方式的适用场景如下:

  • 单可用区:普通部署模式,适用于非关键任务型的工作(默认)。

  • 跨2个可用区:跨可用区容灾部署模式,适用于生产型的工作。

  • 跨3个可用区:高可用部署模式,适用于具有更高可用性要求的生产型的工作。

部署

部署操作

在购买阿里云Elasticsearch实例时,您可以选择可用区数量。当选择两个或三个可用区时,系统将部署跨可用区的Elasticsearch实例。部署时,系统会自动配置对应个数的可用区,无需手动选择。详细信息,请参见创建阿里云Elasticsearch实例ES实例节点配置说明

重要

如果选择多可用区,您所选的以及控制台上显示的是集群流量入口所在的可用区(例如杭州可用区I)。实际部署时,系统会在所选规格机器库存充足的可用区(例如杭州可用区H和杭州可用区J)部署实例。

注意事项

类别

注意事项

节点

  • 必须购买3个专有主节点。

  • 所选择的数据节点、冷数据节点及协调节点个数必须为可用区个数的整数倍。有关可用区的详细信息,请参见ES实例节点配置说明

  • 在购买跨2个可用区实例时,阿里云Elasticsearch采取如下部署方案:

    • 如果该地域存在至少3个可用区,且ECS库存充足,专有主节点会被部署在3个可用区中。保证当任意一个可用区出现故障时,集群依然可以选出主节点。

    • 如果当前地域仅有2个可用区,或者ECS库存不充足时,专有主节点会被部署在2个可用区中。如果存在1个主节点的可用区出现故障,集群依然可以选出主节点。如果存在2个主节点的可用区出现故障,需要在控制台上进行切流操作来恢复,在故障恢复前集群将不支持写操作,读操作不受影响。

      说明

      重要的生产业务,不建议选择仅存在1~2个可用区的地域。

索引副本

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

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

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

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

    PUT _template/template_1
    {
      "template": "*",
      "settings": {
        "number_of_replicas": 2
      }
    }                                
说明

如果实例内存在0副本索引,使用切流和恢复功能可能存在数据丢失风险。请确认实例内索引已按照上述建议配置完毕,并在日常使用中做好运维排查。

配置说明

部署时,系统会自动为跨可用区实例配置与分片分配策略相关的集群配置。详细信息,请参见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实例中单击目标实例ID。
  4. 基本信息页面底部的节点可视化页签中,完成切流操作。

    1. 将鼠标移动到需要切流的可用区上,单击切流

      image

    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会自动将被移除的数据节点中的数据迁移到其他数据节点中。