我已经开始探索Redis Cluster,它是C客户端(hiredis)。我一直无法找到有关客户端与Redis集群交互的更多信息。在这方面,我有一些疑问:
客户端一开始是否与集群的所有节点(主节点和从节点)建立连接?
是否存在将客户请求代理到正确节点的协调器节点?
如果没有,客户端是否定期获取有关集群中每个节点的哈希槽拥有量的信息(以便将其请求发送到正确的节点)?
哪些客户端群集连接特定参数是可配置的?
答案 0 :(得分:1)
客户端是否与所有节点建立连接?
是的,客户端至少与所有主服务器保持连接。
是否有一个代理节点将客户的请求代理到正确的节点?
不,没有。根据设计,redis群集没有代理。 (此外:有人在谈论为redis开发代理解决方案-但我不希望它很快就会发布。)
客户端是否定期获取有关哈希槽绑定的信息?
客户端启动时,将建立哈希槽映射的缓存。然后,在运行时,如果将插槽迁移到另一个主服务器,则redis集群将返回特定错误,该错误将告诉客户端该插槽的新所有者。然后,希望客户端缓存新所有者,然后针对新节点重试请求。
这种设计的结果是,客户端通常对每个插槽及其拥有者都有很好的缓存,并且开销很小。
哪些客户端连接参数是可配置的?
最重要的参数是连接到集群的服务器节点列表。您不必指定所有节点-客户端可以自动发现所有主节点。只要一个节点处于活动状态,客户端都将发现所有其他节点。
除此之外,您还有连接超时参数,这些参数用于控制TLS。