복붙노트

[REDIS] 레디 스 클러스터에 연결 실패

REDIS

레디 스 클러스터에 연결 실패

나는 배포 옵션을 클릭하여 구글 컴퓨 트 엔진에 설치 레디 스 클러스터가 있습니다. 지금은 여기에 ioredis '를 사용하여 내 노드 JS 코드에서이 레디 스 서버에 연결하려는 것은 레디 스의 단일 인스턴스에 연결하는 내 코드입니다

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);

그리고 그것은했다. 지금은 내가 같은 코드를 변경할 수 있도록, 클러스터와 레디 스에 연결하려면

/**
 * 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

지금은이 오류를 던져 :

여기 내 구글 컴퓨팅 콘솔에서 내 레디 스 클러스터는 다음과 같습니다

해결법

  1. ==============================

    1.좋아, 내가 여기에 혼란이 있다고 생각합니다.

    좋아, 내가 여기에 혼란이 있다고 생각합니다.

    레디 스 클러스터 배포 센티넬에 의해 보호 표준 레디 스 인스턴스의 수보다 동일하지 않습니다. 두 개의 매우 다른 것.

    GCE의 클릭 투 배포 옵션은 센티넬하지 레디 스 클러스터에 의해 보호 표준 레디 스 인스턴스의 수를 배포합니다.

    ioredis은 배포의 두 종류를 처리 할 수 ​​있지만 해당 API를 사용합니다. 여기에서, 당신이 오류 (클러스터 관련 명령은 표준 레디 스 인스턴스 활성화되지 않음)의 결과로, 레디 스 클러스터 API를 사용하고있었습니다.

    ioredis 문서에 따르면, 당신은과 연결되어있다 :

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

    물론, 마스터의 감시 포트와 이름을 확인합니다. 마스터가 실패 할 때 ioredis 자동으로 슬레이브 인스턴스에 스위치를 관리하고 감시 슬레이브가 직전 마스터로 추진되도록해야합니다.

    당신이 술집 / 서브를 사용하기 때문에, 여러 레디 스 연결을해야한다는 점에 유의하십시오.

  2. from https://stackoverflow.com/questions/32088363/connection-to-redis-cluster-failed by cc-by-sa and MIT license