Не удалось подключиться к кластеру Redis

Я настроил кластер Redis в Google Compute Engine с помощью нажмите, чтобы развернуть. Теперь я хочу подключиться к этому серверу Redis из кода js моего узла, используя «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);

И это сработало. Теперь я хочу подключиться к 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 в моей вычислительной консоли Google:

введите здесь описание изображения


person Max    schedule 19.08.2015    source источник
comment
Какая версия ioredis у вас установлена?   -  person michelem    schedule 19.08.2015
comment
@Michelem Это последняя версия 1.7.5.   -  person Max    schedule 19.08.2015
comment
Какую версию Redis вы используете (должна быть 3+) и правильно ли вы настроили кластер Redis?   -  person Itamar Haber    schedule 19.08.2015
comment
@ItamarHaber Haber Похоже, это старая версия 2.8.6. Так мне нужно обновить его или что-то еще, чтобы продолжать использовать это? Я сделал щелчок, чтобы развернуть его в Google, они выполняют настройку кластера. prntscr.com/86ff7b   -  person Max    schedule 19.08.2015
comment
Извините, моя ошибка, вам, вероятно, не нужно обновляться, я думал о другом кластере. В любом случае, IIUC, вам не нужно использовать ioredis.Cluster - просто используйте конечную точку мастера для ваших подключений (подпрограмма также может быть к любому из подчиненных).   -  person Itamar Haber    schedule 19.08.2015
comment
Как я узнаю, какой мастер и что, если мастер изменился?   -  person Max    schedule 20.08.2015


Ответы (1)


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

Развертывание Redis Cluster отличается от развертывания количество стандартных экземпляров Redis, защищенных Sentinel. Две очень разные вещи.

Вариант развертывания GCE по щелчку развертывает несколько стандартных экземпляров Redis, защищенных Sentinel, а не 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'
});

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

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

person Didier Spezia    schedule 24.08.2015
comment
Как я могу получить имя мастера? - person Max; 24.08.2015
comment
Предположим, вы можете подключиться к любому экземпляру Sentinel с помощью redis-cli, команда SENTINEL MASTERS вернет список настроенных мастеров. Я ожидаю, что здесь будет определен только один. - person Didier Spezia; 24.08.2015
comment
Это не сработает. Пишет неизвестная команда. Моя версия Redis 2.8.6. prntscr.com/888wvy - person Max; 24.08.2015
comment
Йо Это сработало! Раньше я пробовал этот дозорный код, но использовал порт 6379, который не является дозорным портом. Спасибо!! - person Max; 24.08.2015
comment
Итак, имя мастера просто «мастер» — с ним вы сможете подключиться из node.js. - person Didier Spezia; 24.08.2015
comment
Привет, я использую тот же код, что и выше, и использую ioredis, но не подключаюсь к серверу Redis. И это не бросает никаких событий. Нет возможности исследовать проблему. Как это исправить? - person rajeshpanwar; 29.07.2016