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

时间:2018-04-19 19:15:41

标签: amazon-web-services redis aws-sdk

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

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

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

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

2 个答案:

答案 0 :(得分:0)

刚刚从链接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 :(得分:0)

就像在支持群集的客户端中一样,如果客户端足够聪明,它可以使用配置终结点来发现所有主服务器/从服务器,然后由您来连接和维护它们,因此此类支持群集的客户端确实有一些选择:

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

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