如何最大限度地减少我的 ElastiCache for Redis 在扩缩时的停机时间?

1 分钟阅读
0

我希望最大限度地减少我的 Amazon ElastiCache for Redis 在扩缩时的停机时间。我该如何操作?

解决方法

要最大限度地减少停机时间,请考虑以下几点:

  • 要最大限度地减少同步的影响,请避免在高工作负载下进行扩缩。如果集群处于高工作负载状态且扩缩需要较长时间,请减少对 Redis 的传入请求以防止同步失败。在扩缩过程中,可能会触发同步(后台保存、分叉或无分叉)。同步是一项计算密集型操作,会消耗额外的内存。查看 Amazon CloudWatch 中的 SaveInProgress 指标,以了解同步发生的时间请记住,此指标每分钟收集一次数据。因此,该指标可能无法捕获不到一分钟内完成的同步。有关监控工作负载的更多信息,请参阅使用 Amazon CloudWatch 通过 Amazon ElastiCache for Redis 监控最佳实践
  • 根据扩缩类型的不同,可能会有新节点加入,可能会将节点从集群中移除,或者节点的 IP 可能会在扩缩过程中发生变化。Amazon ElastiCache for Redis 为连接到集群提供了不同类型的连接端点。根据应用要求选择连接端点的类型。最佳做法是在非生产环境中对扩缩进行测试,以识别连接 Redis 集群时由于客户端配置错误而导致的意外问题。
  • 如果客户端连接到正在进行同步的新副本,会出现“LOADING: Redis is loading the dataset in memory(正在加载:Redis 正在内存中加载数据集)”错误。配置 Redis 客户端或应用代码以在另一个副本上重试查询,或向主节点发送查询。加载数据集所需的时间取决于数据大小和节点的性能。在测试环境中进行测试,以确定这是否会导致问题。
  • 您可以将集群配置为自动扩缩,而不是手动扩缩。自动扩缩可防止因传入工作负载突然增加而导致的性能问题。有关更多信息,请参阅自动扩缩 ElastiCache for Redis 集群

扩缩操作停机时间概述

有四种扩缩操作:

  • 横向缩减。
  • 横向扩展。
  • 更改节点类型。
  • 更改节点组的数量。只有 Redis(已禁用集群模式)集群支持此功能。

有关更多信息,请参阅扩缩 ElastiCache for Redis 集群

通常,扩缩所需的停机时间最多可能只用几秒钟,具体取决于扩缩操作和集群配置。以下是每种集群类型和扩缩操作的停机时间说明:

Redis(已禁用集群模式)集群

**横向缩减:**横向缩减将从集群中移除副本节点。您可以通过这样做来降低成本。请记住,横向缩减也会降低数据持久性。如果您的应用仅使用主端点连接到集群,移除副本节点不会导致任何停机。这是因为主端点指向主节点。

但是,如果您的应用使用读取器端点或单个端点连接到该副本节点,则与已删除副本节点的原始连接将中断,并且应用必须与其他副本节点建立新的 TCP 连接。应用还必须再次执行 DNS 查找,以避免连接到已删除的副本节点。如果客户端使用读取器端点,读取器端点的 DNS 传播可能会导致几秒钟的停机。

**横向扩展:**横向扩展可在现有集群中添加一个副本节点。主节点会与新节点同步。为避免同步期间出现停机,请考虑在工作负载最小时进行横向扩展。

**更改节点类型:**更改节点类型时,将创建指定类型的新节点。旧主节点将与新主节点同步,新主节点将与新副本节点同步。在此扩缩过程中,请确保:

  • 工作负载不会过大,不会导致同步失败。
  • 新节点的 IP 可能与旧节点不同。您的应用可能需要再次在主端点或读取器端点上执行 DNS 查找,并建立与新节点的新连接。DNS 传播需要几秒钟,因此在客户端到达新节点之前,您的服务可能会中断。
    在 Redis 5.0.5 或更高版本中,中断最少。 如果由于旧节点终止而导致请求失败,Redis 客户端会重试对新节点的请求。最佳做法是升级到新的 Redis 版本,以便从 ElastiCache 服务的优化中受益。

Redis(已启用集群模式)集群

**横向缩减:**横向缩减意味着从集群中移除分片。在移除分片之前,该分片中的数据会迁移到其他节点。此过程称为“重新分片”。重新分片会在集群上产生额外的工作负载,并且客户端必须支持 Redis 集群。有关横向缩减期间最大限度地减少停机时间的信息,请参阅最佳实践:在线调整集群大小

要最大限度地减少由于过度横向缩减而导致的性能问题,请考虑逐步缩减。例如,如果目标是从 12 个分片横向缩减到 6 个分片,首先从 12 个分片横向缩减到 9 个分片。初始横向缩减后,检查集群在高峰时段的性能,然后再进一步缩减。

**横向扩展:**横向扩展会向集群添加分片。其他分片中的数据将迁移到新分片中。此过程称为“重新分片”。重新分片会在集群上产生额外的工作负载,并且客户端必须支持 Redis 集群。有关横向扩展期间最大限度地减少停机时间的信息,请参阅最佳实践:在线调整集群大小

**更改节点类型:**在“更改节点类型”期间,对于每个分片,旧主节点将与新主节点同步。然后,新主节点将与新副本节点同步。在此扩缩过程中,请确保:

  • 工作负载不会过大,不会导致同步失败。
  • 新节点的 IP 可能与旧节点不同。要确定 IP 地址,您的应用可能会使用 cluster nodescluster slots 命令从集群中获取更新后的拓扑信息。大多数支持 Redis 集群的 Redis 客户端都可以更新集群的拓扑。但是,您可能需要配置 Redis 客户端才能执行此操作。有关如何配置 Redis 客户端的信息,请参阅特定客户端类型对应的文档。

更改节点组的数量:更改节点组的数量会更改每个分片中副本节点的数量。当副本节点数量增加时,新的副本节点将加入集群,主节点将与新节点同步。因此,在添加其他副本节点之前,请先检查主节点的性能。当副本节点数量减少时,如果客户端需要从已移除的副本节点进行读取,必须将请求发送到其中一个新副本节点。客户端还必须更新集群的拓扑,以防止向移除的节点发送进一步的请求。


相关信息

复制:Redis(已禁用集群模式)与Redis(已启用集群模式)

第 4 步:连接到集群的节点 – 找到您的节点端点

扩缩 ElastiCache for Redis 集群

确保具有用于创建 Redis 快照的足够内存

AWS 官方
AWS 官方已更新 2 年前