访问您的 ElastiCache 集群或复制组 - 亚马逊 ElastiCache

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

访问您的 ElastiCache 集群或复制组

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

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

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

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

您将集群启动到 EC2-VPC

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

注意

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

向集群授予从 Amazon VPC 安全组的网络入口权限
  1. 登录 AWS Management Console 并打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

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

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

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

    1. 选择 Edit(编辑)。

    2. 选择 添加规则

    3. 类型列中,选择自定义TCP规则

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

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

      重要

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

    6. 选择保存

当您在亚马逊上启动一个 A EC2 mazon 实例时VPC,该实例将能够连接到您的 ElastiCache 集群。

从外部访问 ElastiCache 资源 AWS

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

要求

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

  • 集群必须位于VPC并可通过网络地址转换 (NAT) 实例进行访问。此要求不存在例外情况。

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

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

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

注意事项

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

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

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

限制

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

  • 该NAT实例充当客户端和多个集群之间的代理。添加代理会影响到缓存群集的性能。影响会随着您通过NAT实例访问的缓存集群的数量而增加。

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

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

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

如何从外部访问 ElastiCache 资源 AWS

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

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

    • IP 地址 – 10.0.1.230

    • 默认 Memcached 端口 – 11211

    • 安全组:*10\.0\.0\.55*

  • 你正在通过以下方式访问 Valkey 或 Redis OSS 集群:

    • IP 地址 – 10.0.1.230

    • 默认端口 — 6379

    • 安全组 – sg-bd56b7da

    • AWS 实例 IP 地址 — sg-bd 56b7da

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

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

  • 您的NAT实例具有安全组 sg-c e56b7a9。

使用NAT实例连接到您的 ElastiCache 资源
  1. 在与您的缓存集群VPC相同但在公有子网中创建NAT实例。

    默认情况下,VPC向导将启动 cache.m1.sm all 节点类型。您应该根据需求选择节点大小。您必须使用EC2NATAMI才能 ElastiCache 从外部访问 AWS。

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

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

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

    • 两个入站规则

      • 对于 Memcached,第一条规则是允许从受信任的客户端TCP连接到从NAT实例转发的每个缓存端口(11211-11213)。

      • 对于 Valkey 和 RedisOSS,第一条规则是允许从受信任的客户端TCP连接到从NAT实例转发的每个缓存端口 (6379-6381)。

      • 第二条规则是允许SSH访问受信任的客户端。

      NAT实例安全组-带有 Memcached 的入站规则
      类型 协议 端口范围 来源
      自定义TCP规则 TCP 11211-11213 198.51.100.27/32
      SSH TCP 22 198.51.100.27/32
      NAT实例安全组-带有 Valkey 或 Redis 的入站规则 OSS
      类型 协议 端口范围 来源
      自定义TCP规则 TCP 6379-6380 198.51.100.27/32
      SSH TCP 22 203.0.113.73/32
    • 在 Memcached 中,这是一条允许TCP连接到缓存端口 (11211) 的出站规则。

      NAT实例安全组-出站规则
      类型 协议 端口范围 目标位置
      自定义TCP规则 TCP 11211 sg-ce56b7a9(集群实例安全组)
    • 对于 Valkey 或 RedisOSS,这是一条允许TCP连接到缓存端口 (6379) 的出站规则。

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

      集群实例安全组 – 入站规则
      类型 协议 端口范围 来源
      自定义TCP规则 TCP 11211 sg-bd56b7da(安全组)NAT
    • 使用 Valkey 或 RedisOSS,这是集群安全组的入站规则,允许从NAT实例TCP连接到缓存端口 (6379)。

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

    • 确认受信任的客户端SSH能够访问该NAT实例。

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

  4. 内存缓存

    向NAT实例添加 iptables 规则。

    必须将集群中每个节点的 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

    确认可信客户端能够连接到集群。

    受信任的客户端应连接到与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

    Valkey 或 Redis OSS

    向NAT实例添加 iptables 规则。

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

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

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

    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

    确认可信客户端能够连接到集群。

    受信任的客户端应连接到与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
  5. 保存 iptables 配置。

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

    service iptables save

相关 主题

下列主题可能会有用处。