AWS Redis - 已启用/禁用集群模式.它如何分配流量?



我们最近选择在我们的应用程序中使用 Amazon 弹性缓存 redis,同时浏览文档时有些事情不清楚。

1) Redis 的集群模式已禁用集群在集群的 AWS 控制台中具有主终端节点,当我们使用 jedis 客户端连接到主终端节点时,此主终端节点是否会将读取流量分发到集群的只读副本?或者应用程序显式必须连接到群集中的只读副本?例如。杰迪斯客户端

2) 为 redis 启用的集群模式在 Redis 的 AWS 控制台中具有配置终端节点,因此当我们使用客户端连接到此配置终端节点时,配置终端节点是否会在集群中的分片之间分配写入和读取流量?或者应用程序必须使用 JedisCluster 对象显式连接到每个分片,传递分片的主端点?

3) 对于为 Redis 启用的集群模式,弹性缓存如何在分片之间拆分密钥?

刚刚从链接中注意到: https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Endpoints.html,看起来您可以使用它们的 https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/Endpoints.html#Endpoints.Find.CLI.ReplGroups 并发现实际的端点,并将它们视为常规分片/副本节点,或使用它们的端点:

Redis 独立节点,使用节点的终端节点进行读取和写入 操作。

Redis (已禁用集群模式) 集群,将主终端节点用于 所有写入操作。使用读取器端点均匀拆分传入 在所有只读副本之间连接到终端节点。使用 用于读取操作的单个节点端点(在 API/CLI 中,这些 称为读取终结点)。 块引用

因此,看起来主端点将充当代理,读取器端点执行相同的操作以及一些负载平衡,包括根据密钥将密钥路由到正确的分片。读取客户端将仅连接到一个终结点。

Redis (已启用集群模式) 集群,使用集群的配置 所有操作的终结点。您必须使用支持 Redis 的客户端 集群(Redis 3.2)。您仍然可以从单个节点终端节点读取数据 (在 API/CLI 中,这些终结点称为读取终结点)。

与以前相同,但使用单个终结点进行读取和写入。这样做可能是为了使其透明可用性,并在发生某些事情时失败。

看起来在群集感知客户端中,如果客户端足够智能,它可以使用配置端点来发现所有主/从,然后由您来连接和维护它们,因此此类群集感知客户端确实有一些选择:

  1. 在任何种子节点(在本例中为协调器节点)上调用群集插槽命令并发现整个拓扑 https://redis.io/commands/cluster-slots
  2. 调用任何端点,如果他们查询或从具有不属于该节点的无效哈希的错误节点中进行选择,则返回 MOVE 响应:https://redis.io/topics/cluster-spec 客户端可能会使用重定向错误 -MOVE 和 -ASK 重定向到其他节点。从理论上讲,客户端可以自由地向集群中的所有节点发送请求,并在需要时重定向,因此客户端不需要保存集群的状态。但是,能够在键和节点之间缓存映射的客户端可以以合理的方式提高性能。

一旦发现拓扑,关于哪个主节点拥有哪个插槽分区的插槽所有权信息,客户端可以选择标准的CRC哈希来查找插槽并直接转到该节点。

最新更新