跨可用区部署可提升集群的容灾能力,系统会自动选择库存充足的可用区创建集群。在索引配置了副本的情况下,当某一可用区出现故障时,剩余的可用区依然可以不间断地提供服务,显著增强了集群的可用性。同时,您可以通过控制台的切流操作,将出现故障的可用区隔离,这时系统会自动在剩余的可用区中补充计算资源,满足业务对资源的需求。本文介绍如何部署和使用(切流和恢复)跨可用区实例。
场景
跨可用区部署支持单可用区、跨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"]
使用(切流与恢复)
跨可用区实例部署完成后,如果发现实例中某一可用区中的节点出现问题,可通过切流操作,将来自客户端的流量只传输到剩余的在线状态的可用区中,并从集群中隔离被切流可用区中的节点。当被切流的可用区恢复正常后,可通过恢复操作,将来自客户端的流量传输到所有正常状态的可用区中,并在集群中重新加入被恢复的可用区中的节点。
重要 为了保证切流后集群读写操作正常,切流前,需要确保集群中的索引是有副本的。