访问您的集群或复制组 - ElastiCache 适用于 Redis 的 Amazon
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

访问您的集群或复制组

您的 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 中

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

注意

如果您正在使用 Local Zones,请确保已启用它。有关更多信息,请参阅启用 Local Zones。通过这样做,您的 VPC 将扩展到该 Local Zone,您的 VPC 会将子网视为任何其他可用区中的任何子网,并且相关网关、路由表和其他安全组注意事项将自动调整。

授予从 Amazon VPC 安全组到集群的网络入口
  1. 登录到 Amazon Web Services Management Console 并打开 Amazon EC2 控制台(https://console.aws.amazon.com/ec2/)。

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

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

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

    1. 选择 Edit(编辑)。

    2. 选择添加规则

    3. Type 列中,选择 Custom TCP rule

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

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

      重要

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

    6. 选择 Save(保存)。

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

从 Amazon 外部访问 ElastiCache 资源

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

要求

您必须满足以下要求才能从 Amazon 外部访问您的 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 实例的高可用性:示例

从 Amazon 外部访问 ElastiCache 资源的方法

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

这些步骤假定以下各项:

  • iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6380 -j DNAT --to 10.0.1.231:6379

  • iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 6381 -j DNAT --to 10.0.1.232:6379

接下来,您需要相反方向的 NAT:

iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 10.0.0.55

您还需要启用 IP 转发,该功能默认情况下处于禁用状态:

sudo sed -i 's/net.ipv4.ip_forward=0/net.ipv4.ip_forward=1/g' /etc/sysctl.conf sudo sysctl --system

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

    • IP 地址 – 10.0.1.230

    • 默认 Redis 端口 – 6379

    • 安全组 – sg-bd56b7da

    • Amazon 实例 IP 地址: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 节点类型。您应该根据需求选择节点大小。您必须使用 EC2 NAT AMI 才能从 Amazon 外部访问 ElastiCache。

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

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

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

    • 两个入站规则

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

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

      NAT 实例安全组 – 入站规则
      类型 协议 端口范围 来源
      自定义 TCP 规则 TCP 6379-6380 198.51.100.27/32
      SSH TCP 22 203.0.113.73/32
    • 一个允许与缓存端口 (6379) 建立 TCP 连接的出站规则。

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

      集群实例安全组 – 入站规则
      类型 协议 端口范围 来源
      自定义 TCP 规则 TCP 6379 sg-bd56b7da(集群安全组)
  3. 验证规则。

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

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

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

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

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

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

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

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

    redis->connect( '203.0.113.73', 6379 ); redis->connect( '203.0.113.73', 6380 ); redis->connect( '203.0.113.73', 6381 );

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

    telnet 203.0.113.73 6379 telnet 203.0.113.73 6380 telnet 203.0.113.73 6381
  6. 保存 iptables 配置。

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

    service iptables save

相关 主题

下列主题可能会有用处。