Node.js 连接到Redis群集失败

Node.js 连接到Redis群集失败,node.js,redis,cluster-computing,node-redis,google-cloud-console,Node.js,Redis,Cluster Computing,Node Redis,Google Cloud Console,我已按选项设置Redis群集。现在我想使用“ioredis”从我的节点js代码连接到这个redis服务器这里是我连接到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

我已按选项设置Redis群集。现在我想使用“ioredis”从我的节点js代码连接到这个redis服务器这里是我连接到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群集:


好的,我想这里有点混乱

部署与部署不同。两件截然不同的事情

GCE的点击部署选项部署了大量受Sentinel而非Redis Cluster保护的标准Redis实例

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'
});
当然,检查sentinel端口和主机的名称。ioredis将在主实例出现故障时自动管理到从实例的切换,sentinel将确保在主实例出现故障之前将从实例升级为主实例


请注意,由于使用pub/sub,您将需要几个redis连接。

您安装了什么版本的ioredis?@Michelem它是1.7.5,最新版本。您正在运行什么版本的redis(应该是3+),并且您是否正确配置了redis群集?@ItamarHaber Haber它看起来像是旧的2.8.6。所以我需要更新它或任何继续使用它吗?我在google compute中单击部署,他们进行集群设置。对不起,我的错误,您可能不需要升级,正在考虑另一个集群。不管怎样,IIUC,您不需要使用ioredis.Cluster之类的东西-只需使用主节点的端点进行连接(子节点也可以是任何一个从节点)。如何获取主节点名称?假设您可以使用redis cli连接到任何sentinel实例,命令sentinel MASTERS将返回一个已配置主节点的列表。我希望这里只定义一个。这行不通。上面写着未知命令。我的redis版本是2.8.6。哟,成功了!我之前尝试过sentinel代码,但我使用的端口6379不是sentinel端口。谢谢好的,那么主节点的名称就是“主节点”-您应该能够从node.js使用它进行连接。