web-dev-qa-db-ja.com

AWSクラウドフォーメーション:redisキャッシュクラスターを適切に作成する方法

Redisを使用してelasticacheインスタンスを作成したいと思います。

すべてが1つのサーバーに収まるので、「クラスターモード無効」で使用する必要があると思います。 SPOFを持たないようにするために、マスターに障害が発生した場合にAWSによってプロモートされるリードレプリカを作成したいと思います。可能であれば、マスターとスレーブの間で読み取り専用操作のバランスを取るのは素晴らしいことですが、必須ではありません。

Awsコンソールを使用して機能するマスター/リードレプリカを作成し、cloudformerを使用してcloudformation jsonconfを作成しました。 Cloudformerは、リンクされていない2つのAWS::ElastiCache::CacheClusterを作成しましたが、ドキュメントを読んでいます。それらをリンクする方法がわかりません...今のところ私はこの構成を持っています:

{
    "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のドキュメントを理解できません。まず、次の間に使用するタイプがわかりません。

CloudformerがAWS::ElastiCache::CacheClusterを作成したので、それを使用しますが、1つのリソースのみを作成し、2つのリソースを作成するためにNumCacheNodesパラメーターを使用する必要があると感じました。

redisは使用できません:

  • NumCacheNodes
  • AZModeおよびPreferredAvailabilityZones

したがって、このソリューションをマルチAZにする方法がわかりません...

7
Bruno

AWS::ElastiCache::ReplicationGroupを使用してこれを行うことができました。NumCacheClustersパラメーターは、多数のサーバーを持つ可能性を提供します。注意:マスター/スレーブへの接続を自分で処理する必要があるようです(ただし、マスターに障害が発生した場合、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"] } ]
      }
    },
4
Bruno