当前位置: 首页 > 知识库问答 >
问题:

Terraform:具有指定可用性区域的ElastiCache Redis集群?

周辉
2023-03-14

我使用这个Terraform示例创建一个ElastiCache Redis集群(启用集群模式):https://www.terraform.io/docs/providers/aws/r/elasticache_replication_group.html#redis-cluster-mode-enabled

resource "aws_elasticache_replication_group" "example" {
  replication_group_id = "example-group"
  engine_version = "5.0.5"
  node_type = "cache.r5.large"
  port = 6379
  automatic_failover_enabled = true

  cluster_mode {
    replicas_per_node_group = 1
    num_node_groups = 6
  }
}

但是如何为群集和副本指定可用性节点呢?通过AWS控制台是可能的。我希望添加availability_zones=[us-East 1a, us-East 1c]来指定所有主节点必须在us-East 1a和us-East 1c中的所有副本,但是得到了错误创建弹性复制组:无效参数组合:PreferredCacheClusterAZs只能为一个节点组指定。

我使用Terraform v0。12.17和aws供应商v2。34.0.


共有2个答案

濮升
2023-03-14

如本文所述,为问题添加描述。

出现这种情况的原因是,availability_zones参数与支持Redis群集模式的复制组不兼容,其中有多个碎片。

在Elasticache SDK中,这是可用性_zones设置的参数的完整文档:

// A list of EC2 Availability Zones in which the replication group's clusters
// are created. The order of the Availability Zones in the list is the order
// in which clusters are allocated. The primary cluster is created in the first
// AZ in the list.
//
// This parameter is not used if there is more than one node group (shard).
// You should use NodeGroupConfiguration instead.
//
// If you are creating your replication group in an Amazon VPC (recommended),
// you can only locate clusters in Availability Zones associated with the subnets
// in the selected subnet group.
//
// The number of Availability Zones listed must equal the value of NumCacheClusters.
//
// Default: system chosen Availability Zones.
PreferredCacheClusterAZs []*string `locationNameList:"AvailabilityZone" type:"list"`

因此,为了显式地多次为Redis群集模式禁用或单个分片复制组的相同可用性区域配置availability_zones,该属性确实需要像aws_elasticache_cluster资源的preferred_availability_zones那样进行迁移。

对于支持Redis群集模式的复制组(例如,在Terraform中使用Cluster_模式时),我们目前无法通过节点组配置参数设置可用区域,这可能需要更改群集模式参数。

终安和
2023-03-14

在我看来,目前的Terraform aws提供商不可能做到这一点(https://github.com/terraform-providers/terraform-provider-aws/issues/5104)

然而,我发现了一个有用的解决方案(它不允许像AWS控制台那样为每个特定节点设置任意AZ,但它涵盖了最常见的用例):如果您通过subnet_group_name键为复制组指定VPC子网,缓存实例将在这些子网的AZ中创建(子网组中子网的顺序很重要)。

地形配置示例:

resource "aws_elasticache_subnet_group" "redis_subnet_group" {
  name       = "example-subnet-group"
  subnet_ids = ["subnet-123", "subnet-456"]
}        

resource "aws_elasticache_replication_group" "redis_replication_group" {
  replication_group_id          = "example-replication-group"
  engine_version                = "5.0.5"
  node_type                     = "cache.r5.large"
  port                          = 6379
  automatic_failover_enabled    = true
  subnet_group_name             = aws_elasticache_subnet_group.redis_subnet_group.name

  cluster_mode {
    replicas_per_node_group = 1
    num_node_groups         = 6
  }
}

结果:我得到了一个6分片集群,其中子网123的所有主节点位于AZ,子网456的所有副本位于AZ。我还没有对每个节点组使用多个副本进行测试。

 类似资料:
  • 语境 App Engine服务是区域性的。Cloud Datastore虽然具有多区域位置,其中数据在同一位置内的多个区域复制,但尚不清楚当使用其中一个多区域位置时,App Engine service是否也具有多区域可用性。我们理解App Engine在一个区域中使用多个区域来提供高可用性,但需求文档要求设置多区域(主动-主动)App Engine。 使用2个不同的GCP项目在2个不同的地区承载

  • 我们正在使用Spring数据,并试图创建一个带有子查询的自定义查询,结果投影有一个数组和其他属性,我们的问题是子查询数组。 预测如下:

  • 以下是具有负值的区域图的示例。 我们已经在Google Charts Configuration Syntax一章中看到了用于绘制图表的配置 。 现在,让我们看一个带负值的区域图的示例。 配置 (Configurations) 我们使用AreaChart类来显示具有负值的基于区域的图表。 // area chart AreaChart chart = new AreaChart(); 例子 (E

  • 我们已经在Highcharts Configuration Syntax一章中看到了用于绘制此图表的配置 。 现在让我们考虑以下示例来进一步理解基本面积图。 例子 (Example) HelloWorld.java package com.wenjiangs.client; import org.moxieapps.gwt.highcharts.client.Chart; import org.m

  • 以下是具有负值的面积图的示例。 我们已经在Highcharts Configuration Syntax一章中看到了用于绘制图表的配置 。 现在,让我们讨论具有负值的面积图的示例。 例子 (Example) highcharts_area_negative.htm <html> <head> <title>Highcharts Tutorial</title> <sc

  • 本文向大家介绍js如何实现打印指定的区域?相关面试题,主要包含被问及js如何实现打印指定的区域?时的应答技巧和注意事项,需要的朋友参考一下 css setting query print , hidden unwanted print DOM; call , OR using Chrome right-click menu js https://developer.mozilla.org/en-U