跨可用区部署可提升集群的容灾能力。本文介绍部署和使用跨可用区的阿里云Elasticsearch(简称ES)实例时的注意事项。

在购买阿里云ES实例时,您可以选择可用区数量。当选择两个或三个可用区时,系统将部署跨可用区的阿里云ES实例。部署时,您无需手动选择多个可用区,系统会自动配置对应个数的可用区,详情请参见创建阿里云Elasticsearch实例
注意 目前仅杭州、北京、上海和深圳四个区域支持部署跨三个可用区的阿里云ES实例。

节点

  • 必须购买专有主节点。
  • 所选择的数据节点、冷数据节点以及协调节点个数必须为可用区个数的整数倍。有关可用区的详细信息请参见地域和可用区

索引副本

  • 如果您使用跨两个可用区的阿里云ES实例,当其中一个可用区为不可用时,剩下的可用区需要继续提供服务,因此索引的副本个数至少为1。

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

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

    由于阿里云ES实例默认的主分片数为5个,副本数为1个,因此需要您通过修改索引模板调整索引默认的副本个数,详情请参见索引模板。例如,使用索引模板设置索引副本个数为2,示例代码如下。

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

集群配置

系统会自动为跨可用区的阿里云ES实例配置与分片分配策略相关的集群配置,详情请参见Shard allocation awareness

例如,跨可用区的阿里云ES实例部署在可用区cn-hangzhou-f和cn-hangzhou-g,则集群配置相关的参数配置如下。

参数 说明 示例值
cluster.routing.allocation.awareness.attributes
注意 请不要通过API修改此参数值,否则会引起异常。
用于告知阿里云ES,使用哪些节点属性来设置分片的分配策略。跨可用区的阿里云ES实例通过在节点的启动参数中加入Enode.attr.zone_id,来标识节点的可用区,因此该参数值固定为zone_id
说明 使用跨可用区的阿里云ES实例时,系统会在节点的启动参数中加入-Enode.attr.zone_id参数。例如某个节点部署在cn-hangzhou-g可用区,则在该节点的启动参数中加入-Enode.attr.zone_id=cn-hangzhou-g
"zone_id"
cluster.routing.allocation.awareness.force.zone_id.values 用于告知阿里云ES在跨可用区部署时,强制均分shard。假设阿里云ES实例的索引包含了1个主分片,3个副本分片,并且部署在cn-hangzhou-f和cn-hangzhou-g两个可用区。按照分片分配策略,系统会在cn-hangzhou-f分配两个分片,在cn-hangzhou-g分配两个分片。当cn-hangzhou-f不可用时,如果指定了cluster.routing.allocation.awareness.force.zone_id.values参数,则cn-hangzhou-f可用区的两个分片不会自动迁移到cn-hangzhou-g可用区。
说明 该参数值支持修改,默认配置为不会自动迁移。
["cn-hangzhou-f", "cn-hangzhou-g"]

切流与恢复

跨可用区的阿里云ES实例部署完成后,支持切流与恢复操作:
  • 当发现实例中某一可用区中的节点出现问题时,可以通过切流操作,隔离有问题的节点,详情请参见切流
  • 当被切流可用区中节点的状态恢复正常后,您可以通过恢复操作,恢复被切流的节点,详情请参见恢复