跨可用区部署与运维

当业务对可用性要求较高时,单可用区部署可能因物理数据中心故障而中断。跨可用区部署可将一个Elasticsearch实例的节点分散部署在同一地域的多个物理隔离的可用区(数据中心)中,实现数据中心级别的容灾。当某个可用区发生故障时,集群凭借在其他可用区的节点和数据副本,仍可提供服务,保障业务连续性。

工作原理

跨可用区部署利用Elasticsearch内置的分片分配感知(Shard Allocation Awareness)机制。

创建跨可用区实例时,系统会自动为部署在不同可用区的节点添加名为zone_id的属性。同时,集群会配置cluster.routing.allocation.awareness.attributes: zone_id,告知Elasticsearch在分配分片时考虑此节点属性。

该机制确保索引的主分片和副本分片分散到不同可用区,当某个可用区整体不可用时,该可用区的所有分片副本都在其他可用区存有备份,保证数据冗余和服务可用性。

部署模式选择

根据业务的可用性要求和成本预算,选择合适的部署模式。

部署模式

架构特点

容灾能力

推荐场景

单可用区

所有节点位于同一个可用区。

可用区故障将导致服务完全中断。

开发、测试等非关键业务。

2个可用区

节点分布在两个可用区。

单个可用区故障时,服务可持续。

对可用性有较高要求的生产环境。

3个可用区

节点分布在三个可用区。

单个可用区故障时,服务仍可持续。

对可用性要求高的核心生产业务。

创建跨可用区实例

  1. 访问创建阿里云Elasticsearch实例页面。

  2. 可用区数量配置项中,选择两个可用区或三个可用区。

    • 节点数量约束:数据节点、冷数据节点或协调节点的数量必须是所选可用区数量的整数倍,以确保节点均匀分配。

    • 专有主节点:为保证多可用区架构的稳定性,必须购买3个专有主节点。

    在控制台选择的可用区(例如可用区 A)将作为集群的主要访问入口。系统会根据各可用区的实时资源情况,将节点自动、均匀地部署到所选数量的可用区中(例如,若选择两个可用区,则可能部署在可用区 A 和 B)。

单可用区升级为多可用区(仅适用于V3部署架构集群)

  1. 升级前,确认以下条件:

    • 执行GET _cluster/health 确保集群为状态为GREEN。如遇集群状态不健康,请参照集群变更报错-集群状态不健康进行解决。

    • 优化客户端连接分布,避免长连接集中在某个单可用区,导致高负载区节点资源耗尽、低负载区节点闲置。可通过设置连接有效时长、 分批重启客户端、使用单独的协调节点等方案优化连接分布,请参见集群负载不均问题的分析方法及解决方案

    • 执行GET _cluster/settings确认结果为"cluster.routing.allocation.enable": "all" ,(即允许ES自动分配分片)。若结果不一致,执行以下命令强制开启分片自动分配。

      PUT _cluster/settings  
      {  
        "transient": {  
          "cluster.routing.allocation.enable": "all"  
        }  
      }  
  2. 实例列表,单击升配

    image

    更多操作入口:在基本信息页面,单击配置变更 > 集群升配

  3. 在变配页面的可用区数量区域,选择两个可用区或三个可用区,并完成支付。

    • 升级过程中,系统会自动启用专有主节点(若尚未启用),并可能根据可用区数量增加数据节点,以满足节点均匀分布的要求。同时因新增节点(为满足节点数均分或启用的专有主节点),将增加相应费用,具体以账单为准。

    • 例如,一个有2个数据节点的单可用区实例升级为3可用区时,系统会自动补充1个数据节点,使总数达到3个,确保每个可用区分配1个。

迁移可用区

当需要对集群进行升配但当前可用区资源不足时,可将节点迁移至资源充足的新可用区后再进行升配。

重要

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

  1. 迁移前,确认以下条件:

    • 执行GET _cluster/health 确保集群为状态为GREEN。如遇集群状态不健康,请参照集群变更报错-集群状态不健康进行解决。

    • 执行GET /_cat/indices?v检查是否存在状态为CLOSE的索引。如果存在,需执行POST /<index_name>/_open临时打开这些索引,否则升级操作可能失败。存在CLOSE状态的索引时,集群状态无法达到GREEN。

    • 执行GET _cluster/settings确认结果为"cluster.routing.allocation.enable": "all" ,(即允许ES自动分配分片)。若结果不一致,执行以下命令强制开启分片自动分配。

      PUT _cluster/settings  
      {  
        "transient": {  
          "cluster.routing.allocation.enable": "all"  
        }  
      }  
  2. 执行迁移操作:

    1. 进入目标实例的基本信息页面,在节点可视化区域,将鼠标悬停在待迁移的可用区上,单击迁移

      image

    2. 在弹出的对话框中,选择目标可用区和虚拟交换机。每次仅支持迁移单个可用区。

      image

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

      • 确认后,集群将重启,期间集群性能可能出现短暂波动。迁移过程中,系统将先在目标可用区购买新 Master节点,出现新旧可用区暂时共存。

      • 迁移完成后,集群即恢复正常,但控制台(实例信息/升降配页面)可能因更新延迟仍显示旧可用区,此显示不影响新可用区下集群使用,请注意节点 IP 会变更。

执行可用区故障切换(切流与恢复)

当监控到可用区故障时,通过切流将客户端流量切换到剩余可用区,待可用区恢复后,通过恢复操作将其重新纳入集群。

切流(隔离故障可用区)

  1. 在实例的节点可视化区域,将鼠标悬停在待隔离的可用区上,单击切流

    image

  2. 在弹出的对话框中,单击确认

    image

    重要

    可用区切流将隔离集群中位于被切流可用区的所有节点,切流后业务请求仅由剩余可用区的节点承担。系统会尝试为您在剩余可用区补充相应数量的资源,但受底层资源库存、调度并发度限制等多种因素影响,资源补足能力无法保证成功率,建议您结合集群负载情况及时进行业务限流等操作。

    如果切流前索引已配置副本,但切流完成后,集群状态显示为黄色(非健康状态),可通过Kibana连接集群执行以下命令临时覆盖分片分配策略(强制将被切流可用区的分片重新分配到剩余可用区):

    PUT /_cluster/settings
    {
        "persistent" : {
            "cluster.routing.allocation.awareness.force.zone_id.values" : {"0": null, "1": null, "2": null}
        }
    }

    分片分配完成后,集群的健康状态将恢复为正常(绿色)。

恢复(重新纳入可用区)

  1. 确认故障可用区恢复正常后,在实例的节点可视化区域,将鼠标悬停在已下线的可用区上,单击恢复

  2. 在弹出的对话框中,单击确认,集群将重启。恢复后,切流过程中临时补充的节点将被移除,集群架构复原。