1

我已经开始探索 Redis 集群,它是 C 客户端(hiredis)。我一直无法找到有关客户端与 Redis 集群交互的大量信息。在这方面我有一些疑问:

  • 客户端是否一开始就与集群的所有节点(主节点和从节点)建立连接?

  • 是否有任何协调节点将客户端的请求代理到正确的节点?

  • 如果没有,客户端是否会定期获取有关集群中每个节点的哈希槽持有量的信息(以便将其请求发送到正确的节点)?

  • 哪些客户端-集群连接特定参数是可配置的?

4

1 回答 1

1

客户端是否与所有节点建立连接?

是的,客户端至少与所有主服务器保持连接。

是否有一个协调器节点将客户端的请求代理到正确的节点?

不,没有。根据设计,redis 集群没有代理。(旁白:有一些关于为 redis 开发代理解决方案的讨论——但我预计它不会很快发布。)

客户端是否定期获取有关哈希槽绑定的信息?

当客户端启动时,它会建立一个哈希槽映射缓存。然后,在运行时,如果一个 slot 被迁移到另一个 master,redis cluster 将返回一个特定的错误,告诉客户端该 slot 的新所有者。然后期望客户端缓存新所有者,并针对新节点重试请求。

由于这种设计,客户端通常对每个插槽及其所有者都有很好的缓存,并且开销很小。

哪些客户端连接参数是可配置的?

最重要的参数是连接到集群的服务器节点列表。您不必指定所有节点 - 客户端可以自动发现所有主节点。只要一个节点处于活动状态,客户端就会发现所有其他节点。

除此之外,您还有连接超时参数、控制 TLS 的参数。

于 2019-03-28T03:30:43.833 回答