2

自動フェイルオーバーを使用して、socket.io とマスター/スレーブ Redis 構成を統合するにはどうすればよいですか?

4

1 に答える 1

0

次の構成を使用しました。

  1. マスター redis インスタンスを作成します。
  2. 3 つの redis-sentinel-client プロセスを作成し、それらをマスター redis インスタンスに向けます。クライアントが残りを入力するため、以下の構成でそれらの 1 つだけを参照する必要があります。
  3. スレーブ redis インスタンスを作成し、それをマスターに向けます。

以下を使用して、socket.io で RedisStore を構成します。

var redisOptions = {
  host: 'localhost', // || redisSentinelHost,
  port: 26379, // Default sentinel port.
  masterName: 'mymaster'
};

var RedisStore = require('socket.io/lib/stores/redis'),
  // The redis-sentinel-client requires a forked redis client
  // that is available here:
  redis = require('redis-sentinel-client/node_modules/redis'),

  // A sentinel client is required to back each of the redis
  // clients below. The sentinel clients handle the fail-overs.
  sentinel = require('redis-sentinel-client'),
  redisPubSentinel = sentinel.createClient(redisOptions),
  redisSubSentinel = sentinel.createClient(redisOptions),
  redisClientSentinel = sentinel.createClient(redisOptions),
  redisPub = redisClientSentinel.getMaster(),
  redisSub = redisSubSentinel.getMaster(),
  redisClient = redisPubSentinel.getMaster();

// We must be robust to connection errors in order to allow
// for a reconnect. We therefore prevent redis client errors
// from stopping the application.
[ redisPubSentinel,
  redisSubSentinel,
  redisClientSentinel,
  redisPub,
  redisSub,
  redisClient ].forEach(function(c) {
  c.on('error', function(err) {
    logger.log(err);
  });
});

io.set('store', new RedisStore({
  redis: redis,
  redisPub: redisPub,
  redisSub: redisSub,
  redisClient: redisClient
  })
);
于 2013-07-15T20:17:59.957 に答える