集群和节点规范

本页面介绍了 Memorystore for Redis Cluster 实例的集群和节点规范。如需了解如何创建实例,请参阅创建实例。

选择节点类型

集群中的所有分片都使用您选择的相同节点类型。集群的最佳节点类型取决于您对价格、性能和键空间容量的要求。

redis-shared-core-nano 节点类型适用于小型工作负载。此类节点提供可变的性能,且没有 SLA,因此不适合生产工作负载。

借助 redis-standard-small 节点类型,您可以预配小型集群,并以较小的增量扩展集群,与使用其他节点类型相比,成本可能更低。redis-standard-small 还具有以下优势:可将键空间分布到更多节点,从而提高 vCPU 总数。只要较小节点的总键空间容量足以满足您的数据需求,这种配置就能提供比 redis-highmem-medium 更好的性价比。

如果您的工作负载需要相对较高的处理能力与内存比率,请选择 redis-highcpu-medium 节点类型。如果您需要的容量比 redis-highmem-medium 提供的容量更大,建议选择 redis-standard-large、redis-highmem-xlarge 或 redis-highmem-2xlarge 节点类型。向越来越大的节点(纵向扩容)添加 vCPU 时,Redis 性能可能不会线性伸缩。不过,为了获得更好的价格性能比,我们建议您通过向集群添加更多节点来横向扩容。

节点类型规范

节点容量和特征取决于您选择的节点类型:

键空间容量和预留的开销

节点类型 默认可写入键空间容量 节点总容量
redis-shared-core-nano 1.12 GB 1.4 GB
redis-standard-small 5.2 GB 6.5 GB
redis-highmem-medium 10.4 GB 13 GB
redis-highcpu-medium 10.4 GB 13 GB
redis-standard-large 20.8 GB 26 GB
redis-highmem-xlarge 46.4 GB 58 GB
redis-highmem-2xlarge 88 GB 110 GB

Memorystore 会自动预留一部分实例容量,以帮助防止出现内存不足 (OOM) 错误。这可确保顺畅地读取和写入密钥。内存限制和存储空间详情如下:

  • 自定义存储空间:虽然我们建议使用默认设置,但您也可以使用 maxmemory 配置来调整预留的存储空间量。如需了解 maxmemory,请参阅受支持的实例配置。

  • 您可获得多少存储空间?请参阅上表的默认可写入键空间容量列。此属性显示了密钥默认可用的存储空间。

  • 最大限度地利用存储空间:如果您希望尽可能地利用存储空间,则当您将 maxmemory 配置设置为 100% 时,节点总容量列会显示存储空间上限。不过,不建议选择高于默认设置的 maxmemory 值。

  • redis-shared-core-nano 节点类型的硬性限制为 1.12 GB,无法通过 maxmemory 配置进行更改。

节点特征

节点类型 vCPU 数量 提供的 SLA 默认的客户端连接数 客户端连接数上限 客户端的最大内存(maxmemory-clients 配置)
redis-shared-core-nano 0.5 否 5,000 5,000 12%
redis-standard-small 2 是 16,000 32000 7%
redis-highmem-medium 2 是 32000 64,000 7%
redis-highcpu-medium 8 是 32000 64,000 7%
redis-standard-large 8 是 32000 64,000 7%
redis-highmem-xlarge 8 是 64,000 64,000 4%
redis-highmem-2xlarge 16 是 64,000 64,000 4%

为集群选择的虚拟 CPU (vCPU) 越多,性能就越好。如果集群运行资源密集型工作负载,请选择具有较高 vCPU 的节点类型(例如 redis-highmem-xlarge)。如果集群执行的任务对资源的要求较低,请选择具有较低 vCPU 的节点类型(例如 redis-highmem-medium)。

扩缩实例

在创建 Memorystore for Redis Cluster 实例时,您需要为该实例选择节点类型并指定分片数量。创建实例后,随着实例的容量需求发生变化,您可能需要通过以下方式扩缩实例:

  • 更改实例的分片数量。这称为横向伸缩。 您可以通过执行以下任一操作来横向扩缩实例:
    • 向实例添加分片。这表示实例正在伸缩。
    • 从实例中移除分片。这是入伸缩实例。
  • 更改实例的节点类型。这称为纵向伸缩。如需纵向扩缩实例,请将实例的节点类型更改为以下节点类型之一:
    • 改为使用更大的节点类型。这是在向上伸缩实例。
    • 改用较小的节点类型。这表示实例正在伸缩。

集群规范

此部分显示了在给定集群形状、节点类型和副本数量的情况下,集群的最小和最大容量。

最小可写入容量

可写入容量是指可用于写入密钥的存储空间量。它等于一个实例节点的大小。因此,根据节点类型的不同,最小可写入容量介于 1.4 GB 和 110 GB 之间。最小可写入容量不受您选择的副本数量的影响。

最大可写入容量

节点类型和大小 在集群形状为 250 个主节点且每个节点 0 个副本的情况下,最大容量 在集群形状为 125 个主节点且每个节点有 1 个副本的情况下,最大容量 在集群形状为 83 个主节点且每个节点有 2 个副本的情况下,最大容量 在集群形状为 62 个主节点且每个节点有 3 个副本的情况下,最大容量 在集群形状为 50 个主节点且每个节点有 4 个副本的情况下,最大容量 在集群形状为 41 个主节点且每个节点有 5 个副本的情况下,最大容量
redis-shared-core-nano - 1.4 GB 350 GB 175 GB 116.2 GB 86.8 GB 70 GB 57.4 GB
redis-standard-small - 6.5 GB 1,625 GB 812.5 GB 539.5 GB 403 GB 325 GB 266.5 GB
redis-highmem-medium - 13 GB 3,250 GB 1,625 GB 1,079 GB 806 GB 650 GB 533 GB
redis-highcpu-medium - 13 GB 3,250 GB 1,625 GB 1,079 GB 806 GB 650 GB 533 GB
redis-standard-large - 26 GB 6,500 GB 3,250 GB 2,158 GB 1,612 GB 1300 GB 1,066 GB
redis-highmem-xlarge - 58 GB 14,500 GB 7,250 GB 4,814 GB 3,596 GB 2,900 GB 2,378 GB
redis-highmem-2xlarge - 110 GB 27,500 GB 13,750 GB 9,130 GB 6,820 GB 5,500 GB 4,510 GB

性能

在 us-central1 区域中使用 OSS memtier 基准测试工具,每个 2 vCPU 节点(redis-standard-small 和 redis-highmem-medium)每秒可执行 12 万到 13 万次操作,延迟时间为微秒级,数据大小为 1KiB。

我们建议您使用真实工作负载或类似于生产流量的合成工作负载自行进行基准比较。此外,我们建议您在确定集群规模时留出缓冲空间(或“余量”),以应对工作负载高峰或意外流量。如需了解更多指导,请参阅 Memorystore for Redis Cluster 最佳实践。

集群端点

本部分将介绍每个实例的两个端点。

发现端点

每个实例都有一个发现端点,您的客户端会连接到该端点。它是 IP 地址和端口号的组合。如需了解如何查找集群的发现端点,请参阅查看集群的发现端点。

您的客户端还使用它进行节点发现。您的客户端使用发现端点检索实例的集群拓扑,以引导 OSS Redis 集群客户端,并在稳定状态下保持这些客户端处于最新状态。生成的集群拓扑结构提供 Redis 节点端点(IP 和端口组合),供 Redis 集群客户端在内存中缓存。然后,您的客户会自动处理更新和重定向,无需进行任何其他应用更改。如需了解客户端发现行为和最佳实践,请参阅客户端发现。

发现端点具有高可用性,因为它由多个可用区中的多个 Redis 节点提供支持,可用于提供集群拓扑。即使在后端节点发生故障或节点更新时,通过端点提供的服务拓扑也依然稳健。

您的发现端点具有以下行为:

  1. 在集群实例的整个生命周期内,即使在维护期间或您执行任何其他操作(例如缩减或扩容或更改副本数量)时,集群的发现端点也会保持不变。

  2. Redis 节点端点可能会发生变化,并且随着时间的推移,当添加和移除节点时,这些端点可能会被回收。理想情况下,您应该使用能够通过拓扑刷新和重定向自动处理这些更改的 Redis 集群客户端。如需查看 Redis 集群客户端的示例,请参阅客户端库代码示例。您的应用不应依赖于或假设给定集群的节点端点将保持不变。

数据端点

除了发现端点之外,每个集群都有一个数据端点。此端点专供 Memorystore for Redis Cluster 用于将客户端连接到集群中的节点。因此,请勿直接连接到此端点。