

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

# Amazon ElastiCache Well-Architected 镜头可靠性支柱
<a name="ReliabilityPillar"></a>

可靠性支柱的侧重点是执行预期功能的工作负载以及如何从故障中快速恢复以满足需求。关键主题包括分布式系统设计、恢复规划和适应不断变化的需求。

**Topics**
+ [REL 1：您如何支持高可用性（HA）架构部署？](#ReliabilityPillarREL1)
+ [REL 2：您是如何实现恢复点目标 (RPO) 的 ElastiCache？](#ReliabilityPillarREL2)
+ [REL 3：您如何支持灾难恢复（DR）要求？](#ReliabilityPillarREL3)
+ [REL 4：如何有效地规划失效转移？](#ReliabilityPillarREL4)
+ [REL 5：您的 ElastiCache 组件是否专为可扩展而设计？](#ReliabilityPillarREL5)

## REL 1：您如何支持高可用性（HA）架构部署？
<a name="ReliabilityPillarREL1"></a>

**Question-level 简介：**了解 Amazon 的高可用性架构 ElastiCache 将使您能够在可用性事件期间以弹性状态运行。

**Question-level 好处：**对ElastiCache 集群进行架构使其能够抵御故障，可确保您的 ElastiCache 部署具有更高的可用性。
+ **[必需]** 确定您的 ElastiCache 集群所需的可靠性级别。不同的工作负载具有不同的弹性标准，从完全的临时工作负载到任务关键型工作负载。定义您运行的每种环境类型（例如开发、测试和生产）的需求。

  缓存引擎： ElastiCache 适用于 Memcached 与 V ElastiCache alkey 和 Redis OSS

  1. ElastiCache for Memcached 不提供任何复制机制，主要用于临时工作负载。

  1. ElastiCache 适用于 Valkey 和 Redis 的 OSS 提供的高可用性功能如下所述
+ **[最佳]** 对于需要 HA 的工作负载，可在集群模式下使用ElastiCache ，每个分片至少有两个副本，即使对于只需要一个分片的小吞吐量要求工作负载也是如此。

  1. 如果启用了集群模式，将自动启用多可用区。

     Multi-AZ 在进行任何计划内或计划外维护的情况下，通过执行从主节点到副本的自动故障转移以及缓解可用区故障，最大限度地减少停机时间。

  1. 对于分片工作负载，由于 Valkey 或 Redis OSS 集群协议要求大多数主节点可用才能实现仲裁，因此至少有三个分片可以在失效转移事件期间提供更快的恢复。

  1. 跨可用性设置两个或更多副本。

     拥有两个副本可以提高读取可扩展性，也可以在一个副本处于维护状态的场景中提供读取可用性。

  1. 使用 Graviton2-based 节点类型（大多数地区的默认节点）。

     ElastiCache 在这些节点上增加了优化的性能。因此，您可以获得更佳的复制和同步性能，从而提高整体可用性。

  1. 监控并适当调整规模以应对预期的流量高峰：在高负载下，引擎可能会变得无响应，从而影响可用性。`BytesUsedForCache` 和 `DatabaseMemoryUsagePercentage` 是衡量内存使用情况的良好指标，而 `ReplicationLag` 是基于写入速率衡量复制运行状况的指标。您可以使用这些指标来触发集群扩展。

  1. 通过[在生产失效转移事件之前使用失效转移 API](https://docs.amazonaws.cn/en_us/AmazonElastiCache/latest/APIReference/API_TestFailover.html) 进行测试，确保客户端恢复能力。

  **[资源]：**
  + [针对 Redis OSS ElastiCache 进行配置以获得更高的可用性](https://aws.amazon.com/blogs/database/configuring-amazon-elasticache-for-redis-for-higher-availability/)
  + [使用复制组时的高可用性](Replication.md)

## REL 2：您是如何实现恢复点目标 (RPO) 的 ElastiCache？
<a name="ReliabilityPillarREL2"></a>

**Question-level 简介：**了解工作负载 RPO，为 ElastiCache 备份和恢复策略决策提供依据。

**Question-level 好处：**制定就位的 RPO 策略可以改善灾难恢复情况下的业务连续性。设计备份和还原策略可以帮助您实现 ElastiCache 数据的恢复点目标 (RPO)。 ElastiCache 提供存储在 Amazon S3 中的快照功能以及可配置的保留策略。这些快照是在定义的备份时段内拍摄的，并由服务自动处理。如果您的工作负载需要额外的备份粒度，则可以选择每天创建多达 20 个手动备份。手动创建的备份没有服务保留策略，可以无限期保留。
+ **[必需]** 了解并记录 ElastiCache 部署的 RPO。
  + 请注意，Memcached 不提供任何备份流程。
  + 查看 ElastiCache Backup 和 Restore 功能的功能。
+ **[最佳] **制定一个沟通良好的集群备份流程。
  + 根据需要启动手动备份。
  + 查看自动备份的保留策略。
  + 请注意，手动备份将会无限期保留。
  + 将自动备份安排在使用率比较低的时段内进行。
  + 对只读副本执行备份操作，以确保将对集群性能的影响降至最低。
+ **[良好]** 利用的 ElastiCache 定时备份功能在定义的时间段内定期备份数据。
  + 定期测试从备份中执行的还原。
+ **[资源]：**
  + [Redis OSS](https://aws.amazon.com/elasticache/faqs/#Redis)
  + [的备份和恢复 ElastiCache](backups.md)
  + [进行手动备份](backups-manual.md)
  + [计划自动备份](backups-automatic.md)
  + [Backup 和恢复 ElastiCache 集群](https://aws.amazon.com/blogs/aws/backup-and-restore-elasticache-redis-nodes/)

## REL 3：您如何支持灾难恢复（DR）要求？
<a name="ReliabilityPillarREL3"></a>

**Question-level 简介：**灾难恢复是任何工作负载规划的重要方面。 ElastiCache 提供了多种选项，可根据工作负载弹性要求实施灾难恢复。借助 Amazon ElastiCache Global Datastore，您可以写入位于一个区域的集群，并从另外两个跨区域副本集群中读取数据，从而实现低延迟读取和跨区域灾难恢复。

**Question-level 好处：**了解和规划各种灾难情景可以确保业务连续性。灾难恢复策略必须在成本、性能影响和数据丢失可能性之间达到平衡。
+ **[必需]** 根据工作负载要求为所有 ElastiCache 组件制定并记录灾难恢复策略。 ElastiCache 的独特之处在于，有些用例完全是短暂的，不需要任何灾难恢复策略，而另一些用例则处于另一端，需要极其强大的灾难恢复策略。所有选项都必须针对成本优化进行权衡 – 恢复能力越高，则需要的基础设施就越多。

  了解区域级别和多区域级别上可用的灾难恢复选项。
  + Multi-AZ 建议进行部署以防出现可用区故障。请务必在 Multi-AZ架构中 Cluster-Mode 启用时进行部署，至少有 3 个可用区可用。
  + 建议使用全局数据存储以防出现区域故障。
+ **[最佳] **为需要区域级恢复能力的工作负载启用全局数据存储。
  + 制定计划，以便在主区域出现性能下降时失效转移到辅助区域。
  + 在生产环境中进行失效转移之前，测试多区域失效转移过程。
  + 监控 `ReplicationLag` 指标，以了解失效转移事件期间数据丢失带来的潜在影响。
+ **[资源]：**
  + [缓解故障](disaster-recovery-resiliency.md#FaultTolerance)
  + [使用全球数据存储跨 AWS 区域复制](Redis-Global-Datastore.md)
  + [从备份还原（可选择调整集群大小）](backups-restoring.md)
  + [ ElastiCache 使用 Valkey 和 Redis OSS 最大限度地缩短停机时间 Multi-AZ](AutoFailover.md)

## REL 4：如何有效地规划失效转移？
<a name="ReliabilityPillarREL4"></a>

**Question-level 简介：**启用具有自动故障转移功能的多可用区是一种最佳实践。 ElastiCache 在某些情况下，ElastiCache 对于 Valkey 和 Redis，作为服务操作的一部分，OSS 会替换主节点。这些情况包括计划维护事件，以及节点故障或可用区出现问题等此类不太可能发生的情况。成功的故障转移取决于两者 ElastiCache 以及您的客户端库配置。

**Question-level 好处：**将 ElastiCache 故障转移最佳实践与您的特定 ElastiCache客户端库结合使用，可帮助您最大限度地减少故障转移事件期间的潜在停机时间。
+ **[必需] **如果禁用集群模式，请使用超时，以便客户端检测是否需要断开与旧的主节点的连接，然后使用更新后的主端点 IP 地址重新连接到新的主节点。如果启用了集群模式，则客户端库负责检测底层集群拓扑的变化。这通常是通过 ElastiCache 客户端库中的配置设置来完成的，这些设置还允许您配置刷新频率和方法。每个客户端库都提供自己的设置，更多详细信息可在相应的文档中找到。

  **[资源]：**
  + [ ElastiCache 使用 Valkey 和 Redis OSS 最大限度地缩短停机时间 Multi-AZ](AutoFailover.md)
  + 查看您的 ElastiCache 客户库的最佳实践。
+ **[必需] **失效转移的成功取决于主节点和副本节点之间运行状况正常的复制环境。查看并了解 Valkey 和 Redis OSS 复制的异步性质，以及报告主节点和副本节点之间复制延迟的可用 CloudWatch 指标。对于需要更高数据安全性的使用案例，请利用 WAIT 命令强制副本在响应连接的客户端之前确认写入。

  **[资源]：**
  + [Valkey 或 Redis OSS 的指标](CacheMetrics.Redis.md)
  +  [监控 ElastiCache 使用 Amazon 的最佳实践 CloudWatch](https://aws.amazon.com/blogs/database/monitoring-best-practices-with-amazon-elasticache-for-redis-using-amazon-cloudwatch/)
+ **[最佳]** 使用 ElastiCache测试故障转移 API 定期验证应用程序在故障转移期间的响应能力。

  **[资源]：**
  + [在上测试自动故障转移到只读副本 ElastiCache](https://aws.amazon.com/blogs/database/testing-automatic-failover-to-a-read-replica-on-amazon-elasticache-for-redis/)
  + [测试自动失效转移](AutoFailover.md#auto-failover-test)

## REL 5：您的 ElastiCache 组件是否专为可扩展而设计？
<a name="ReliabilityPillarREL5"></a>

**Question-level 简介：**通过了解扩展功能和可用的部署拓扑，您的 ElastiCache组件可以随着时间的推移进行调整以满足不断变化的工作负载要求。 ElastiCache提供 4 向缩放： in/out （水平）和 up/down （垂直）。

**Question-level 好处：**遵循 ElastiCache 部署最佳实践可以最大限度地提高扩展灵活性，并符合横向扩展以最大限度地减少故障影响的 Well Architected 原则。
+ **[必需]** 了解 Cluster-mode 启用和 Cluster-mode 禁用拓扑之间的区别。几乎在所有情况下，都建议在 Cluster-mode 启用状态下进行部署，因为这样可以随着时间的推移实现更大的可扩展性。 Cluster-mode 通过添加只读副本，禁用的组件的水平扩展能力受到限制。
+ **[必需] **了解何时以及如何扩展。
  + 要获得更多 READIOPS：添加副本
  + 要获得更多 WRITEOPS：添加分片（横向扩展）
  + 要获得更多网络 IO：使用网络优化型实例，纵向扩展
+ **[最佳]** 在 Cluster-mode 启用状态下部署 ElastiCache 组件，偏向于更多、更小的节点，而不是更少、更大的节点。这可有效地限制节点故障的影响范围。
+ **[最佳] **在集群中加入副本，以增强扩展事件期间的响应能力
+ **[良好] 如果**禁用了集群模式，请利用只读副本来增加总体读取容量。 ElastiCache 在集群模式下支持最多 5 个只读副本，并支持垂直扩展。
+ **[资源]：**
  + [扩展ElastiCache 集群](Scaling.md)
  + [在线纵向扩展](redis-cluster-vertical-scaling.md#redis-cluster-vertical-scaling-scaling-up)