【问题标题】:Connecting to both master and slave in a replicated Redis cluster连接到复制的 Redis 集群中的主从服务器
【发布时间】:2017-03-06 09:06:42
【问题描述】:

我正在设置一个简单的 1 Master - N Slaves Redis 集群(低写入轮次,高读取计数)。 Redis 网站上详细记录了如何设置它,但是,没有关于客户端(在我的例子中是 Node.js 服务器)如​​何处理集群的信息(或者我错过了它)。我的服务器是否需要打开 2 个 Redis 连接:一个用于 Master(写入),一个用于 Slave 负载均衡器用于读取? Redis 驱动程序是否会自动处理这个并将读取发送到从属并将写入发送到主控?

【问题讨论】:

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

标签: node.js redis node-redis


【解决方案1】:

我发现的唯一方法是使用 thunk-redis 库。该库支持连接到 Redis master-slave,而无需配置集群或使用哨兵。

您只需向客户端添加多个 IP 地址:

const client = redis.createClient(['127.0.0.1:6379', '127.0.0.1:6380'], {onlyMaster: false});

【讨论】:

  • 这是否会自动检测哪个 Redis 主机是主机,哪些是从机,并将所有写入目标定位到主机并允许拆分读取?我希望看到允许读取命令采用额外参数的客户端,该参数允许它们被强制到主服务器(需要立即完整性)或被拆分到从服务器(最终一致性是可以接受的)。
  • 根据我从图书馆看到的情况,我会说它没有那么复杂。例如,我必须自己实现主重新连接。文档没有那么描述性,也没有说明这些场景。
【解决方案2】:

你不需要专门连接特定的实例,redis集群中的每个实例都有集群的信息。因此,即使您连接到一个主服务器,您的客户端也将连接到集群中的任何实例。因此,如果您尝试更新存在于不同 master 中的密钥(除了您连接的那个),redis 客户端会使用服务器提供的重定向来处理它。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 1970-01-01
    • 2021-04-21
    • 1970-01-01
    • 2020-12-11
    • 2017-03-16
    • 1970-01-01
    相关资源
    最近更新 更多