【问题标题】:Using endpoints of AWS ElastiCache for Redis使用 AWS ElastiCache for Redis 的终端节点
【发布时间】:2022-04-29 21:43:35
【问题描述】:
我将AWS ElastiCache 用于Redis 作为我的spring-boot 应用程序的缓存解决方案。我正在使用spring-boot-starter-data-redis 和jedis 客户端连接我的缓存。
想象一下我的缓存在启用集群模式和 3 个分片,每个分片有 2 个节点。我同意那么最好的方法是使用配置端点.或者,我可以列出所有节点的所有端点并让工作完成。
但是,即使我使用来自其中一个分片的单个节点的端点,我的缓存解决方案仍然有效。这对我来说不合适。我觉得即使它有效,从长远来看,这也可能会导致集群出现问题。当所有 6 个节点一起划分为 3 个分片但仅使用一个节点的端点时。我有以下问题。
使用一个节点的端点是否会在集群中造成不平衡?
或者
这是由AWS ElastiCache 为Redis 自动处理的吗?
如果我只使用一个节点的端点,这是否意味着永远不会使用其他节点?
谢谢!
标签:
spring-data-redis
amazon-elasticache
redis-cluster
aws-elasticache
【解决方案1】:
回答您的问题;
-
使用一个节点的端点是否会在集群中造成不平衡?
不
-
这是否由 AWS ElastiCache for Redis 自动处理?
有些
-
如果我只使用一个节点的端点,这是否意味着永远不会使用其他节点?
不,所有节点都在使用中。
这就是启用集群模式的工作方式。在您的情况下,您有 3 个分片,这意味着您的所有插槽(存储键值数据的位置)都分为 3 个子集群,即。碎片。
这在这个答案中也得到了解释 - https://stackoverflow.com/a/72058580/6024431
因此,从本质上讲,您的节点足够聪明,可以将您的请求重定向到具有需要存储数据的密钥槽的节点。所以,没有不平衡。 Redis 为您处理重定向。
现在,在使用 Node 端点时,您将面临其他问题。
Elasticache 在云(本质上是 AWS 硬件)上运行。所有硬件都面临问题。您有 3 个主副本(1p、2p、3p)和 3 个(1r、2r、3r)副本。
因此,如果主节点由于硬件问题(比如说 1p)而宕机,则副本将被提升为集群的新主节点(1r)。
现在的问题是,您的应用程序直接连接到现在已降级为副本的 1p。所以,所有的 WRITE 操作都会失败。
每当发生这种情况时,您都必须手动更改应用程序代码。
或者,如果您使用配置端点(或其他集群级别端点)而不是节点端点,则此问题最多只会对您的应用程序造成影响,可能持续 1-2 秒。
干杯!