You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

AWS ElastiCache Redis:将所有节点部署至单一AZ以避免数据传输成本

可以将AWS ElastiCache Redis集群所有节点置于同一AZ吗?

当然可以!不过你遇到的「禁用Multi-AZ仍分配多AZ」的情况,大概率是创建集群时的配置选项没选对,而且ElastiCache确实不支持直接迁移现有节点到其他AZ,所以得通过重新创建集群的方式来实现。下面一步步给你说清楚:

为什么禁用Multi-AZ后还是多AZ?

最常见的原因是这两个场景之一:

  • 集群模式开启(Cluster Mode Enabled):如果你的Redis集群是分片式的(多个分片),AWS默认会把不同分片分散到不同AZ来提升可用性,哪怕你禁用了Multi-AZ复制。
  • 未指定具体AZ:创建集群时如果选择了「让AWS自动选择可用区」,即使禁用Multi-AZ,AWS也可能会把节点分配到不同AZ(尤其是当你有多个副本节点时)。

如何创建全节点在同一AZ的Redis集群?

根据你的集群模式,操作略有不同:

1. 集群模式禁用(单分片)

  • 控制台创建:在「节点配置」环节,不要勾选「Multi-AZ」,然后在「可用区」下拉框里手动选择你EC2所在的AZ,所有主节点和副本节点都指定这个AZ(不要选「自动分配」)。
  • CLI创建:使用create-replication-group命令,指定--multi-az-enabled false,同时通过--availability-zones参数重复指定同一个AZ,比如:
    aws elasticache create-replication-group \
      --replication-group-id my-single-az-cluster \
      --replication-group-description "Single AZ Redis cluster" \
      --cache-node-type cache.t3.medium \
      --engine redis \
      --engine-version 7.0 \
      --num-cache-clusters 2 \
      --multi-az-enabled false \
      --availability-zones us-east-1a us-east-1a
    

2. 集群模式开启(多分片)

虽然集群模式默认跨AZ分片,但你可以强制所有分片都放在同一AZ:

  • 控制台创建:在「分片配置」里,为每个分片的主节点和副本节点都选择同一个AZ(不要用自动分配),同时确保「Multi-AZ」选项是禁用状态。
  • CLI创建:使用create-replication-group命令,开启集群模式(--cluster-mode-enabled),并为每个分片指定同一个AZ,比如:
    aws elasticache create-replication-group \
      --replication-group-id my-clustered-single-az \
      --replication-group-description "Clustered Redis in single AZ" \
      --cache-node-type cache.t3.medium \
      --engine redis \
      --engine-version 7.0 \
      --num-node-groups 2 \
      --replicas-per-node-group 1 \
      --multi-az-enabled false \
      --availability-zones us-east-1a us-east-1a us-east-1a us-east-1a
    
    这里--num-node-groups 2是2个分片,每个分片1个副本,所以总共4个节点,全部指定us-east-1a

现有集群怎么处理?

ElastiCache目前不支持直接将现有节点迁移到其他AZ,所以你需要:

  1. 先创建符合要求的单AZ新集群。
  2. 将旧集群的数据迁移到新集群:
    • 简单场景:用Redis的BGSAVE生成RDB文件,然后RESTORE到新集群(注意大内存场景可能耗时久)。
    • 生产场景:使用AWS DMS(数据库迁移服务)或者第三方工具如RedisShake来做在线迁移,减少 downtime。
  3. 验证数据无误后,切换应用的Redis连接地址到新集群,然后删除旧集群。

注意事项

  • 单AZ集群会失去跨AZ的高可用性,如果该AZ出现故障,你的Redis集群会不可用,所以要根据业务的可用性需求权衡。
  • 确保新集群的配置(节点类型、内存大小、引擎版本等)和旧集群一致,避免兼容性问题。

内容的提问来源于stack exchange,提问作者numX

火山引擎 最新活动