当前位置:  开发笔记 > 编程语言 > 正文

与Redis群集的连接失败

如何解决《与Redis群集的连接失败》经验,为你挑选了1个好方法。

我通过点击部署选项在Google compute Engine中设置了Redis群集.现在我想从我的节点js代码连接到这个redis服务器使用'ioredis'这里是我的代码连接到redis的单个实例

var Redis = require("ioredis");

var store = new Redis(6379, 'redis-ob0g');//to store the keys
var pub =   new Redis(6379, 'redis-ob0g');//to publish a message to all workers
var sub =   new Redis(6379, 'redis-ob0g');//to subscribe a message 

var onError = function (err) {
    console.log('fail to connect to redis ',err);
};
store.on('error',onError);
pub.on('error',onError);
sub.on('error',onError);

它奏效了.现在我想连接到redis作为集群,所以我将代码更改为

/**
 * list of server in replica set
 * @type {{port: number, host: string}[]}
 */
var nodes =[
    {   port: port,    host: hostMaster},
    {   port: port,    host: hostSlab1},
    {   port: port,    host: hostSlab2}
];
var store =  new Redis.Cluster(nodes);//to store the keys
var pub =   new Redis.Cluster(nodes);//to publish a message to all workers
var sub =    new Redis.Cluster(nodes);//to subscribe a message channel

现在它抛出这个错误: 在此输入图像描述

这是我的谷歌计算控制台中的Redis群集:

在此输入图像描述



1> Didier Spezi..:

好吧,我觉得这里有一个混乱.

一个Redis的集群部署不比相同数量的受Sentinel保护标准的Redis实例.两件非常不同的事情.

GCE的click-to-deploy选项部署了许多受Sentinel保护的标准Redis实例,而不是Redis Cluster.

ioredis可以处理这两种部署,但您必须使用相应的API.在这里,您尝试使用Redis Cluster API,导致此错误(标准Redis实例未激活与集群相关的命令).

根据ioredis文档,您应该连接:

var redis = new Redis({
    sentinels: [{ host: hostMaster, port: 26379 },
                { host: hostSlab1, port: 26379 },
                { host: hostSlab2, port: 26379 } ],
    name: 'mymaster'
});

当然,请检查标记端口和主控名称.当主设备发生故障时,ioredis将自动管理切换到从设备实例,并且Sentinel将确保从设备在之前被提升为主设备.

请注意,由于您使用pub/sub,因此需要多个redis连接.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有