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

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

访问您的集群或复制组

您的亚马逊 ElastiCache 实例旨在通过亚马逊 EC2 实例进行访问。

如果您在亚马逊虚拟私有云 (Amazon VPC) 中启动 ElastiCache实 ElastiCache 例,则可以从同一亚马逊 VPC 中的亚马逊 EC2 实例访问您的实例。或者,通过使用 VPC 对等互连,您可以从另一个 Amazon VPC 中的 Amazon EC2 访问您的 ElastiCache 实例。

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

授予访问您的集群或复制组的权限

您将集群启动到 EC2-VPC 中

如果您在亚马逊虚拟私有云 (Amazon VPC) 中启动 ElastiCache集群,则只能从在同一 Amazon VPC 中运行的 Amazon EC2 实例连接到您的集群。在此情况下,您需要向集群授予网络进入。

注意

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

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

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

  3. 从安全组列表中,为 Amazon VPC 选择安全组。除非您创建了供 ElastiCache 使用的安全组,否则该安全组将被命名为 de fault

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

    1. 选择 Edit(编辑)。

    2. 选择 添加规则

    3. Type 列中,选择 Custom TCP rule

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

    5. 框中,选择端口范围为 (0.0.0.0/0) 的任何地方,这样您在亚马逊 VPC 中启动的任何 Amazon EC2 实例都可以连接到您的节点。 ElastiCache

      重要

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

    6. 选择保存

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

从外部访问 ElastiCache 资源 Amazon

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

要求

要从外部访问您的 ElastiCache 资源,必须满足以下要求 Amazon:

  • 集群必须驻留在 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 实例的高可用性:示例

如何从外部访问 ElastiCache 资源 Amazon

以下过程演示如何使用 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-bd 56b7da

  • 您的可信客户端使用 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 才能 ElastiCache 从外部进行访问 Amazon。

    有关创建 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

相关 主题

下列主题可能会有用处。