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