连接到 Redis 集群失败
Connection to Redis cluster failed
我在 Google compute Engine by click to deploy 选项中设置了 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
现在它抛出这个错误:
这是我的 google 计算控制台中的 Redis 集群:
好吧,我觉得这里有点混乱。
一个Redis Cluster deployment is not the same than a number of standard Redis instances protected by Sentinel。两种截然不同的东西。
GCE 的点击部署选项部署了一些受 Sentinel 保护的标准 Redis 实例,而不是 Redis Cluster。
ioredis 可以处理这两种部署,但您必须使用相应的 API。在这里,您尝试使用 Redis 集群 API,导致此错误(标准 Redis 实例未激活与集群相关的命令)。
根据 ioredis 文档,您应该连接:
var redis = new Redis({
sentinels: [{ host: hostMaster, port: 26379 },
{ host: hostSlab1, port: 26379 },
{ host: hostSlab2, port: 26379 } ],
name: 'mymaster'
});
当然要检查哨兵端口和master的名字。 ioredis 会自动管理当 master 失效时切换到 slave 实例,而 sentinel 会确保 slave 在之前被提升为 master。
请注意,由于您使用 pub/sub,您将需要多个 redis 连接。
我在 Google compute Engine by click to deploy 选项中设置了 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
现在它抛出这个错误:
这是我的 google 计算控制台中的 Redis 集群:
好吧,我觉得这里有点混乱。
一个Redis Cluster deployment is not the same than a number of standard Redis instances protected by Sentinel。两种截然不同的东西。
GCE 的点击部署选项部署了一些受 Sentinel 保护的标准 Redis 实例,而不是 Redis Cluster。
ioredis 可以处理这两种部署,但您必须使用相应的 API。在这里,您尝试使用 Redis 集群 API,导致此错误(标准 Redis 实例未激活与集群相关的命令)。
根据 ioredis 文档,您应该连接:
var redis = new Redis({
sentinels: [{ host: hostMaster, port: 26379 },
{ host: hostSlab1, port: 26379 },
{ host: hostSlab2, port: 26379 } ],
name: 'mymaster'
});
当然要检查哨兵端口和master的名字。 ioredis 会自动管理当 master 失效时切换到 slave 实例,而 sentinel 会确保 slave 在之前被提升为 master。
请注意,由于您使用 pub/sub,您将需要多个 redis 连接。