Amazon ElastiCache
用户指南 (API Version 2015-02-02)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

从外部 AWS 访问 ElastiCache 资源

Amazon ElastiCache 是提供基于云的内存中键值存储的 AWS 服务。它在后端使用 Memcached 或 Redis 引擎。该服务设计为只能从 AWS 中访问。但是,如果 ElastiCache 群集托管在 Amazon VPC 内部,则可通过多种方式从 AWS 外部访问群集,其中之一是使用网络地址转换 (NAT) 实例提供外部访问,如本主题中所述。有关其他模式,请参阅从在客户的数据中心中运行的应用程序访问 ElastiCache 群集

要求

必须满足以下要求,才能使用 NAT 实例从外部 AWS 访问您的 ElastiCache 资源。有关从外部 AWS 访问 ElastiCache 的其他方式,请参阅从在客户的数据中心中运行的应用程序访问 ElastiCache 群集

  • 群集必须驻留在 Amazon VPC 中,并且可以通过网络地址转换 (NAT) 实例访问。

  • NAT 实例必须在群集所在的 Amazon VPC 中启动。

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

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

注意事项

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

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

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

限制

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

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

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

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

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

如何从外部 AWS 访问 ElastiCache 资源

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

提示

您可以修改以下进程用于任何 Amazon ElastiCache 集群。只需使用集群的端口号替换示例中的端口号。

这些步骤假定以下各项:

  • 您可以使用 IP 地址 10.0.1.230、默认 Memcached 端口 11211 和安全组 sg-bd56b7da 访问 Memcached 集群。

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

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

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

在使用以下步骤创建完 NAT 实例后,将存在以下情况。

  • 为 NAT 实例启用 IP 转发。以下命令可用于确认这一点。

    Copy
    cat /proc/sys/net/ipv4/ip_forward
  • 已启用伪装。以下命令可用于启用伪装。

    Copy
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

使用 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 198.51.100.27/32
    • 一个允许与转发缓存端口 (11211-11213) 建立 TCP 连接的出站规则。

      NAT 实例安全组 - 出站规则

      类型 协议 端口范围 目标
      自定义 TCP 规则 TCP 11211-11213 sg-bd56b7da(缓存群集安全组)
    • 群集安全组的入站规则,允许在群集中的每个实例上建立从 NAT 实例到缓存端口 (11211-11213) 的 TCP 连接。

      缓存群集安全组 - 入站规则

      类型 协议 端口范围
      自定义 TCP 规则 TCP 11211-11213 sg-ce56b7a9(NAT 实例安全组)
  3. 验证规则。

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

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

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

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

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

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

    Copy
    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 的连接字符串如下所示:

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

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

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

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

    Copy
    service iptables save

相关主题