Max*_*Max 3 cluster-computing redis node.js node-redis google-cloud-console
我通过点击部署选项在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);
Run Code Online (Sandbox Code Playgroud)
它奏效了.现在我想连接到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
Run Code Online (Sandbox Code Playgroud)
这是我的谷歌计算控制台中的Redis群集:
好吧,我觉得这里有一个混乱.
一个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'
});
Run Code Online (Sandbox Code Playgroud)
当然,请检查标记端口和主控名称.当主设备发生故障时,ioredis将自动管理切换到从设备实例,并且Sentinel将确保从设备在之前被提升为主设备.
请注意,由于您使用pub/sub,因此需要多个redis连接.