Terraform部署Redis集群报错:engine "redis"不支持num_cache_nodes>1
解决Terraform部署Redis集群时的
engine "redis" does not support num_cache_nodes > 1报错 嘿,这个问题我之前折腾过,马上给你捋清楚!
为什么会报这个错?
AWS ElastiCache里,Redis的多节点集群(不管是主从复制还是分片集群),不能直接用aws_elasticache_cluster资源来配置多个节点。这个资源本质上是给Memcached设计的,或者仅用于创建单个Redis节点。当你给Redis引擎设置num_cache_nodes > 1时,Terraform就会抛出这个错误,因为这个资源压根不支持Redis这么玩。
正确的做法:用aws_elasticache_replication_group资源
要搭建多节点的Redis集群,你得切换到aws_elasticache_replication_group资源,这才是AWS官方用来管理Redis复制组(包括主从和分片集群)的正确方式。
示例1:创建主从复制的Redis集群(1主2从)
# 先创建子网组(需要包含多个可用区) resource "aws_elasticache_subnet_group" "redis_subnet" { name = "redis-subnet-group" subnet_ids = [aws_subnet.private_az1.id, aws_subnet.private_az2.id, aws_subnet.private_az3.id] } # 创建安全组(开放Redis默认端口6379) resource "aws_security_group" "redis_sg" { name = "redis-security-group" description = "Allow Redis traffic" ingress { from_port = 6379 to_port = 6379 protocol = "tcp" cidr_blocks = ["10.0.0.0/16"] # 替换成你的业务网段 } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } } # 主从Redis复制组 resource "aws_elasticache_replication_group" "redis_cluster" { replication_group_id = "my-redis-primary-replica" replication_group_description = "Redis主从复制集群" engine = "redis" engine_version = "7.0" # 选你需要的版本 node_type = "cache.t3.micro" # 按需选择节点规格 number_cache_clusters = 3 # 1个主节点 + 2个从节点 parameter_group_name = "default.redis7.x" subnet_group_name = aws_elasticache_subnet_group.redis_subnet.name security_group_ids = [aws_security_group.redis_sg.id] }
示例2:创建分片式Redis集群(Cluster Mode Enabled)
如果需要分片集群(水平扩展存储和性能),要在cluster_mode块里配置分片数和每个分片的从节点数:
resource "aws_elasticache_replication_group" "redis_sharded_cluster" { replication_group_id = "my-sharded-redis-cluster" replication_group_description = "分片式Redis集群" engine = "redis" engine_version = "7.0" node_type = "cache.t3.micro" parameter_group_name = "default.redis7.x.cluster.on" # 注意要用支持集群模式的参数组 subnet_group_name = aws_elasticache_subnet_group.redis_subnet.name security_group_ids = [aws_security_group.redis_sg.id] cluster_mode { num_node_groups = 2 # 分片数量 replicas_per_node_group = 1 # 每个分片的从节点数量 } }
几个关键注意点
- 分片集群必须使用带
.cluster.on后缀的参数组,否则会报错 - 子网组一定要包含多个可用区,这样节点可以分布在不同AZ提升可用性
- 安全组要根据你的业务需求配置允许访问的网段,别随便开0.0.0.0/0
内容的提问来源于stack exchange,提问作者Iulian
相关产品推荐
相关产品推荐

