AWS cloudformation:如何正确创建 redis 缓存集群
AWS cloudformation : how to properly create a redis cache cluster
我想使用redis创建一个elasticache实例。
我认为我应该使用它 "cluster mode disabled" 因为一切都适合一台服务器。
为了没有 SPOF,我想创建一个只读副本,在主服务器发生故障时由 AWS 提升。
如果可以的话,平衡master和slave之间的只读操作就好了,但不是强制性的。
我使用 aws 控制台创建了一个正常运行的 master/read-replica,然后使用 cloudformer 创建了 cloudformation json conf。 Cloudformer 通过阅读文档为我创建了两个未linked AWS::ElastiCache::CacheCluster
。我不明白如何 link 他们...现在我有这个配置:
{
"cachehubcache001": {
"Type": "AWS::ElastiCache::CacheCluster",
"Properties": {
"AutoMinorVersionUpgrade": "true",
"AZMode": "single-az",
"CacheNodeType": "cache.t2.small",
"Engine": "redis",
"EngineVersion": "3.2.4",
"NumCacheNodes": "1",
"PreferredAvailabilityZone": { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "Az1B"]},
"PreferredMaintenanceWindow": "sun:04:00-sun:05:00",
"CacheSubnetGroupName": {
"Ref": "cachesubnethubprivatecachesubnetgroup"
},
"VpcSecurityGroupIds": [
{
"Fn::GetAtt": [
"sgiHubCacheSG",
"GroupId"
]
}
]
}
},
"cachehubcache002": {
"Type": "AWS::ElastiCache::CacheCluster",
"Properties": {
"AutoMinorVersionUpgrade": "true",
"AZMode": "single-az",
"CacheNodeType": "cache.t2.small",
"Engine": "redis",
"EngineVersion": "3.2.4",
"NumCacheNodes": "1",
"PreferredAvailabilityZone": { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "Az1A"]},
"PreferredMaintenanceWindow": "sun:02:00-sun:03:00",
"CacheSubnetGroupName": {
"Ref": "cachesubnethubprivatecachesubnetgroup"
},
"VpcSecurityGroupIds": [
{
"Fn::GetAtt": [
"sgiHubCacheSG",
"GroupId"
]
}
]
}
},
}
我知道这是错误的,但我不知道如何创建正确的副本。我无法理解 AWS 文档,一开始我不知道我应该使用哪种类型:
- http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html
- http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html
由于 cloudformer 创建了 AWS::ElastiCache::CacheCluster
我会继续使用它,但我感觉它应该只创建一个资源,并使用 NumCacheNodes
参数来创建两个资源。
redis 无法使用:
NumCacheNodes
AZMode
和 PreferredAvailabilityZones
所以我不知道如何使这个解决方案成为多可用区...
我设法使用 AWS::ElastiCache::ReplicationGroup
做到了这一点,NumCacheClusters
参数提供了拥有大量服务器的可能性。当心:您似乎必须自己处理与 master/slave 的连接(但如果主服务器出现故障,aws 通常会检测到它并更改从服务器的 dns 以允许您指向不要更改您的配置)。这是一个示例:
"hubElastiCacheReplicationGroup" : {
"Type" : "AWS::ElastiCache::ReplicationGroup",
"Properties" : {
"ReplicationGroupDescription" : "Hub WebServer redis cache cluster",
"AutomaticFailoverEnabled" : "false",
"AutoMinorVersionUpgrade" : "true",
"CacheNodeType" : "cache.t2.small",
"CacheParameterGroupName" : "default.redis3.2",
"CacheSubnetGroupName" : { "Ref": "cachesubnethubprivatecachesubnetgroup" },
"Engine" : "redis",
"EngineVersion" : "3.2.4",
"NumCacheClusters" : { "Ref" : "ElasticacheRedisNumCacheClusters" },
"PreferredMaintenanceWindow" : "sun:04:00-sun:05:00",
"SecurityGroupIds" : [ { "Fn::GetAtt": ["sgHubCacheSG", "GroupId"] } ]
}
},
我想使用redis创建一个elasticache实例。
我认为我应该使用它 "cluster mode disabled" 因为一切都适合一台服务器。 为了没有 SPOF,我想创建一个只读副本,在主服务器发生故障时由 AWS 提升。 如果可以的话,平衡master和slave之间的只读操作就好了,但不是强制性的。
我使用 aws 控制台创建了一个正常运行的 master/read-replica,然后使用 cloudformer 创建了 cloudformation json conf。 Cloudformer 通过阅读文档为我创建了两个未linked AWS::ElastiCache::CacheCluster
。我不明白如何 link 他们...现在我有这个配置:
{
"cachehubcache001": {
"Type": "AWS::ElastiCache::CacheCluster",
"Properties": {
"AutoMinorVersionUpgrade": "true",
"AZMode": "single-az",
"CacheNodeType": "cache.t2.small",
"Engine": "redis",
"EngineVersion": "3.2.4",
"NumCacheNodes": "1",
"PreferredAvailabilityZone": { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "Az1B"]},
"PreferredMaintenanceWindow": "sun:04:00-sun:05:00",
"CacheSubnetGroupName": {
"Ref": "cachesubnethubprivatecachesubnetgroup"
},
"VpcSecurityGroupIds": [
{
"Fn::GetAtt": [
"sgiHubCacheSG",
"GroupId"
]
}
]
}
},
"cachehubcache002": {
"Type": "AWS::ElastiCache::CacheCluster",
"Properties": {
"AutoMinorVersionUpgrade": "true",
"AZMode": "single-az",
"CacheNodeType": "cache.t2.small",
"Engine": "redis",
"EngineVersion": "3.2.4",
"NumCacheNodes": "1",
"PreferredAvailabilityZone": { "Fn::FindInMap" : [ "RegionMap", { "Ref" : "AWS::Region" }, "Az1A"]},
"PreferredMaintenanceWindow": "sun:02:00-sun:03:00",
"CacheSubnetGroupName": {
"Ref": "cachesubnethubprivatecachesubnetgroup"
},
"VpcSecurityGroupIds": [
{
"Fn::GetAtt": [
"sgiHubCacheSG",
"GroupId"
]
}
]
}
},
}
我知道这是错误的,但我不知道如何创建正确的副本。我无法理解 AWS 文档,一开始我不知道我应该使用哪种类型:
- http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/aws-resource-elasticache-replicationgroup.html
- http://docs.aws.amazon.com/fr_fr/AWSCloudFormation/latest/UserGuide/aws-properties-elasticache-cache-cluster.html
由于 cloudformer 创建了 AWS::ElastiCache::CacheCluster
我会继续使用它,但我感觉它应该只创建一个资源,并使用 NumCacheNodes
参数来创建两个资源。
redis 无法使用:
NumCacheNodes
AZMode
和PreferredAvailabilityZones
所以我不知道如何使这个解决方案成为多可用区...
我设法使用 AWS::ElastiCache::ReplicationGroup
做到了这一点,NumCacheClusters
参数提供了拥有大量服务器的可能性。当心:您似乎必须自己处理与 master/slave 的连接(但如果主服务器出现故障,aws 通常会检测到它并更改从服务器的 dns 以允许您指向不要更改您的配置)。这是一个示例:
"hubElastiCacheReplicationGroup" : {
"Type" : "AWS::ElastiCache::ReplicationGroup",
"Properties" : {
"ReplicationGroupDescription" : "Hub WebServer redis cache cluster",
"AutomaticFailoverEnabled" : "false",
"AutoMinorVersionUpgrade" : "true",
"CacheNodeType" : "cache.t2.small",
"CacheParameterGroupName" : "default.redis3.2",
"CacheSubnetGroupName" : { "Ref": "cachesubnethubprivatecachesubnetgroup" },
"Engine" : "redis",
"EngineVersion" : "3.2.4",
"NumCacheClusters" : { "Ref" : "ElasticacheRedisNumCacheClusters" },
"PreferredMaintenanceWindow" : "sun:04:00-sun:05:00",
"SecurityGroupIds" : [ { "Fn::GetAtt": ["sgHubCacheSG", "GroupId"] } ]
}
},