在复制的Redis集群中连接主节点和从节点

7

我正在设置一个简单的1主-N从Redis集群(写入较少,读取次数较高)。在Redis网站上已经有关于如何设置它的详细文档,但是没有任何关于客户端(在我这种情况下是Node.js服务器)如何处理集群的信息(或者我已经错过了)。我的服务器需要打开2个Redis连接吗:一个用于Master(写入),另一个连接到读取负载均衡器的Slave?Redis驱动程序是否会自动处理并将读取发送至从节点,将写入发送至Master?


1
这取决于您使用的驱动程序。Redis没有规定客户端应如何访问主服务器和从服务器。我建议您检查该驱动程序的文档。此外,为此帖子添加一个新标签,例如 node-redis(如果这是您使用的驱动程序)。 - for_stack
@for_stack 谢谢,我认为这本身就是一个有效的答案。 - Nepoxx
2个回答

1
我发现唯一的方法是使用thunk-redis库。该库支持连接到Redis master-slave,而无需配置集群或使用哨兵。
您只需将多个IP地址添加到客户端即可:
const client = redis.createClient(['127.0.0.1:6379', '127.0.0.1:6380'], {onlyMaster: false});

这个程序能自动检测哪个 Redis 主机是主节点,哪些是从节点,并将所有写操作定向到主节点,允许读操作被分配到从节点吗?我希望看到一个客户端,它允许读取命令带有额外的参数,使它们可以强制执行到主节点(需要立即一致性)或者分配到从节点(可以接受最终一致性)。 - rstaveley
根据我从库中看到的,我会说它并不是很复杂。例如,我不得不自己实现主重新连接。文档也不是很描述,并且也没有介绍这些情况。 - Oresztesz

0

您不需要特别连接到特定的实例,redis集群中的每个实例都有集群信息。因此,即使您连接到一个主节点,您的客户端也会连接到集群中的任何实例。因此,如果您尝试更新存在于不同主节点(而非您连接的那个)中的键,则redis客户端通过使用服务器提供的重定向来处理它。

回答您的第二个问题,您可以通过READONLY命令启用从节点读取。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接