3

У меня есть кластер Redis в Google compute Engine по click to deploy. Теперь я хочу, чтобы подключиться к этому серверу Redis из кода моего узла, используя расслоение плотной «ioredis» вот мой код для подключения к одному экземпляру из 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 

Теперь бросить эту ошибку: enter image description here

Вот мой Redis кластер в моем Google Compute консоли:

enter image description here

+0

Какую версию ioredis вы установили? –

+0

@Michelem It's 1.7.5 Что является последним – Max

+0

Какая версия Redis работает (должна быть 3+), и вы правильно настроили кластер Redis? –

ответ

8

Хорошо, я думаю, здесь есть путаница.

A Redis Cluster развертывание не совпадает с number of standard Redis instances protected by Sentinel. Две очень разные вещи.

Опция «щелчок к развертыванию» GCE развертывает ряд стандартных экземпляров Redis, защищенных Sentinel, а не Redis Cluster.

ioredis может обрабатывать оба типа развертываний, но вы должны использовать соответствующий API. Здесь вы пытались использовать API-интерфейс Redis Cluster, в результате чего эта ошибка (связанные с кластером команды не активируются для стандартных экземпляров Redis).

Согласно ioredis документации, вы должны связаться с:

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

Конечно, проверьте порты дозорных и имя мастера. ioredis автоматически управляет переключателем на подчиненный экземпляр, когда мастер терпит неудачу, а контрольная система гарантирует, что ведомый будет продвигаться как ведущий непосредственно перед этим.

Обратите внимание, что, поскольку вы используете pub/sub, вам понадобятся несколько соединений redis.

+0

Как я могу получить имя мастера? – Max

+0

Предположим, вы можете подключиться к любому экземпляру отправителя, используя redis-cli, команда SENTINEL MASTERS вернет список настроенных мастеров. Я ожидаю, что здесь будет определен только один. –

+0

Это не сработает. Он говорит неизвестную команду. Моя версия redis - 2.8.6. http://prntscr.com/888wvy – Max