Amazon ElastiCache
ElastiCache for Memcached 用户指南 (API 版本 2015-02-02)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

访问您的集群

您的 Amazon ElastiCache 实例设计用于通过 Amazon EC2 实例进行访问。

如果您在 Amazon Virtual Private Cloud (Amazon VPC) 中启动了 ElastiCache 实例,您可以从同一 Amazon VPC 中的 Amazon EC2 实例访问 ElastiCache 实例。或者,通过使用 VPC 对等,您可以从不同 Amazon VPC 中的 Amazon EC2 访问您的 ElastiCache 实例。

如果您已在 EC2 Classic 中启动 ElastiCache 实例,则可以通过向与该实例关联的 Amazon EC2 安全组授予对您的缓存安全组的访问权限来允许 EC2 实例访问您的集群。默认情况下,仅启动了集群的账户能够访问集群。

确定集群的平台

在继续下一步之前,请确定集群是在 EC2-VPC 中还是在 EC2-Classic 中启动的。

有关更多信息,请参阅检测支持的平台以及是否具有默认 VPC

使用 ElastiCache 控制台确定您的集群平台

以下过程使用 ElastiCache 控制台确定您是否已经将集群启动到 EC2-VPC 或 EC2-Classic 中。

使用 ElastiCache 控制台确定集群平台

  1. 登录 AWS 管理控制台 并通过以下网址打开 ElastiCache 控制台:https://console.amazonaws.cn/elasticache/

  2. 要查看运行 Memcached 引擎的集群的列表,请在左侧导航窗格中选择 Memcached

  3. 在集群列表中,通过选择集群名称左侧的框,展开要授权访问的集群。

  4. 找到 Subnet group:

有关更多信息,请参阅检测支持的平台以及是否具有默认 VPC

使用 AWS CLI 确定您的集群平台

以下过程使用 AWS CLI 确定您是否已经将集群启动到 EC2-VPC 或 EC2-Classic 中。

使用 AWS CLI 确定集群平台

  1. 打开一个命令窗口。

  2. 在命令提示符下,运行以下命令。

    对于 Linux, OS X, or Unix:

    aws elasticache describe-cache-clusters \ --show-cache-cluster-details \ --cache-cluster-id my-cluster

    对于 Windows:

    aws elasticache describe-cache-clusters ^ --show-cache-cluster-details ^ --cache-cluster-id my-cluster

    该命令的 JSON 输出内容如下所示。某些输出会省略,以节省空间。

    { "CacheClusters": [ { "Engine": "memcached", "AuthTokenEnabled": false, "CacheParameterGroup": { "CacheNodeIdsToReboot": [], "CacheParameterGroupName": "default.memcached1.4", "ParameterApplyStatus": "in-sync" }, "CacheClusterId": "my-cluster-001", "CacheSecurityGroups": [], "NumCacheNodes": 1, "AtRestEncryptionEnabled": false, "CacheClusterCreateTime": "2018-01-16T20:09:34.449Z", "ReplicationGroupId": "my-cluster", "AutoMinorVersionUpgrade": true, "CacheClusterStatus": "available", "PreferredAvailabilityZone": "us-east-2a", "ClientDownloadLandingPage": "https://console.aws.amazon.com/elasticache/home#client-download:", "SecurityGroups": [ { "Status": "active", "SecurityGroupId": "sg-e8c03081" } ], "TransitEncryptionEnabled": false, "CacheSubnetGroupName": "default", "EngineVersion": "3.2.10", "PendingModifiedValues": {}, "PreferredMaintenanceWindow": "sat:05:30-sat:06:30", "CacheNodeType": "cache.t2.medium" } ] }

授予访问您的集群的权限

您在 EC2-VPC 中启动了集群

如果在 Amazon Virtual Private Cloud (Amazon VPC) 中启动了集群,则只能从正在该 Amazon VPC 中运行的 Amazon EC2 实例连接到您的 ElastiCache 集群。在此情况下,您需要向集群授予网络进入。

授予从 Amazon VPC 安全组到集群的网络进入

  1. 登录 AWS 管理控制台并通过以下网址打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中的 Network & Security 下,选择 Security Groups

  3. 从安全组列表中,选择 Amazon VPC 对应的安全组。除非创建安全组供 ElastiCache 使用,否则此安全组将命名为 default

  4. 选择 Inbound 选项卡,然后执行以下操作:

    1. 选择 Edit

    2. 选择 Add rule

    3. Type 列中,选择 Custom TCP rule

    4. Port range 框中,为您的集群节点键入端口号。此端口号必须与启动集群时指定的端口号相同。Memcached 的默认端口是 11211

    5. Source (源) 框中,选择端口范围为 (0.0.0.0/0) 的 Anywhere (任何位置),以便从 Amazon VPC 中启动的任何 Amazon EC2 实例都可以连接到您的 ElastiCache 节点。

      重要

      向 0.0.0.0/0 公开 ElastiCache 集群(步骤 4.e.)时,不会在 Internet 上公开集群,因为它没有公有 IP 地址,因此无法从 VPC 外部访问。但是,默认安全组可以应用到客户账户中的其他 Amazon EC2 实例,这些实例可能具有公有 IP 地址。如果这些实例碰巧在端口 6379 上运行某些内容,则该服务可能会意外暴露。因此,我们建议创建将由 ElastiCache 独占使用的 VPC 安全组。有关更多信息,请参阅自定义安全组

    6. 选择 Save

当您将 Amazon EC2 实例启动到您的 Amazon VPC 中时,该实例将能够连接到您的 ElastiCache 集群。

您在 EC2-Classic 中启动了集群

如果您在 EC2-Classic 中启动了集群,若要允许 Amazon EC2 实例访问您的集群,您将需要向与该实例关联的 Amazon EC2 安全组授予对您的缓存安全组的访问权限。

向集群授予对 Amazon EC2 安全组的访问权限

  1. 登录 AWS 管理控制台 并通过以下网址打开 ElastiCache 控制台:https://console.amazonaws.cn/elasticache/

  2. 要查看安全组列表,请从左侧导航窗格中,选择 Security Groups

    重要

    如果 Security Groups 未在导航窗格列出,则说明您在 EC2-VPC 中而不是 EC2-Classic 中启动了集群,应遵循您在 EC2-VPC 中启动了集群中的说明。

  3. 选择 default 安全组左侧的框。

  4. 从屏幕底部的列表中选择要授权的 EC2 Security Group Name

  5. 要授予访问权限,请选择 Add

    与安全组关联的 Amazon EC2 实例现在获得授权,可以连接到您的 ElastiCache 集群。

要撤销某一安全组的访问权限,请在授权安全组列表中找到相应安全组,然后选择 Remove

有关 ElastiCache 安全组的更多信息,请参阅安全组:EC2-Classic

从外部 AWS 访问 ElastiCache 资源

Amazon ElastiCache 是提供基于云的内存中键值存储的 AWS 服务。该服务设计为只能从 AWS 中访问。但是,如果 ElastiCache 集群托管在 VPC 中,则可以使用网络地址转换 (NAT) 实例来提供外部访问。

要求

您必须满足以下要求才能从外部 AWS 访问您的 ElastiCache 资源:

  • 集群必须驻留在 VPC 中,并且可以通过网络地址转换 (NAT) 实例访问。此要求不存在例外情况。

  • NAT 实例必须在与集群相同的 VPC 中启动。

  • NAT 实例必须在与集群分开的公有子网中启动。

  • 弹性 IP 地址 (EIP) 必须与 NAT 实例关联。iptables 的端口转发功能用于将 NAT 实例上的端口转发到 VPC 中的缓存节点端口。

注意事项

从外部 ElastiCache 访问您的 ElastiCache 资源时,必须牢记以下注意事项。

  • 客户端连接到 NAT 实例的 EIP 和缓存端口。NAT 实例上的端口转发功能会将流量转发到相应的缓存集群端口。

  • 如果添加或替换集群节点,则需要更新 iptables 规则以反映此更改。

限制

此方法应仅应用于测试和开发用途。由于以下限制,不建议将其用于生产用途:

  • NAT 实例用作客户端与多个集群之间的代理。添加代理会影响到缓存集群的性能。这种影响会随着您通过 NAT 实例访问的缓存集群数量增加而增大。

  • 从客户端到 NAT 实例的流量未加密。因此,您应当避免通过 NAT 实例发送敏感数据。

  • NAT 实例增加了维护另一实例的开销。

  • NAT 实例会成为单点故障。有关如何在 VPC 上设置高可用性 NAT 的信息,请参阅 Amazon VPC NAT 实例的高可用性:示例

如何从外部 AWS 访问 ElastiCache 资源

以下步骤演示了如何使用 NAT 实例连接到您的 ElastiCache 资源。

这些步骤假定以下各项:

  • 您可以使用以下项访问 Memcached 集群:

    • IP 地址 – 10.0.1.230

    • 默认 Memcached 端口 – 11211

    • 安全组 – sg-bd56b7da

  • 您的可信客户端使用 IP 地址 198.51.100.27

  • 您的 NAT 实例具有弹性 IP 地址 203.0.113.73

  • 您的 NAT 实例具有安全组 sg-ce56b7a9

使用 NAT 实例连接您的 ElastiCache 资源

  1. 在与缓存集群相同的 VPC 中创建 NAT 实例,但位于公有子网上。

    默认情况下,VPC 向导将启动 cache.m1.small 节点类型。您应该根据需求选择节点大小。

    有关创建 NAT 实例的信息,请参阅 AWS VPC 用户指南中的 NAT 实例

  2. 为缓存集群和 NAT 实例创建安全组规则。

    NAT 实例安全组应具有以下规则:

    • 两个入站规则

      • 一个用于允许从可信客户端到每个缓存端口的 TCP 连接,这些缓存端口是从 NAT 实例 (11211 - 11213) 转发的。

      • 第二个用于允许通过 SSH 访问可信客户端。

      NAT 实例安全组 - 入站规则

      类型 协议 端口范围
      自定义 TCP 规则 TCP 11211-11213 198.51.100.27/32
      SSH TCP 22 203.0.113.73/32
    • 一个允许与缓存端口 (11211) 建立 TCP 连接的出站规则。

      NAT 实例安全组 - 出站规则

      类型 协议 端口范围
      自定义 TCP 规则 TCP 11211 sg-ce56b7a9(NAT 实例安全组)
    • 集群安全组的入站规则,允许从 NAT 实例到缓存端口 (11211) 的 TCP 连接。

      集群实例安全组 - 入站规则

      类型 协议 端口范围
      自定义 TCP 规则 TCP 11211 sg-bd56b7da(集群安全组)
  3. 验证规则。

    • 确认可信客户端可以通过 SSH 连接到 NAT 实例。

    • 确认可信客户端能够从 NAT 实例连接到集群。

  4. 将 iptables 规则添加到 NAT 实例。

    必须为集群中的每个节点将 iptables 规则添加到 NAT 表,以便将缓存端口从 NAT 实例转发到集群节点。示例如下所示:

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 11211 -j DNAT --to 10.0.1.230:11211

    集群中每个节点的端口号必须唯一。例如,如果处理使用端口 11211 - 11213 的三个节点的 Memcached 集群,则规则将如下所示:

    iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 11211 -j DNAT --to 10.0.1.230:11211 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 11212 -j DNAT --to 10.0.1.231:11211 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 11213 -j DNAT --to 10.0.1.232:11211
  5. 确认可信客户端能够连接到集群。

    可信客户端应连接到与 NAT 实例关联的 EIP 以及对应于相应集群节点的集群端口。例如,PHP 的连接字符串如下所示:

    $memcached->connect( '203.0.113.73', 11211 ); $memcached->connect( '203.0.113.73', 11212 ); $memcached->connect( '203.0.113.73', 11213 );

    也可以使用 telnet 客户端来验证连接。例如:

    telnet 203.0.113.73 11211 telnet 203.0.113.73 11212 telnet 203.0.113.73 11213
  6. 保存 iptables 配置。

    在您测试和验证规则之后保存规则。如果您使用基于 Redhat 的 Linux 分发(例如 Amazon Linux),请运行以下命令:

    service iptables save

相关主题

下列主题可能会有用处。