Rails, Redis и Sentinel

У меня есть кластер Redis, состоящий из 4 узлов, 1 главного и 3 подчиненных, контролируемых Sentinel.

Теперь в rails мне нужно подключиться к этому кластеру, читать из ближайшей реплики и записывать в мастер, так же, как я это делаю с MongoDB.

С использованием redis-rails драгоценный камень, как можно настроить cache_store указать Sentinels вместо одного узла?

1 ответ

Решение

Возможно, я пропустил это, но я не знал, что вы можете настроить его для чтения от рабов? Тем не менее, это моя конфигурация master + 2 slave:

config.cache_store = :redis_store, {
    url: 'redis://prestwick/1',
    sentinels: [{host: 'prestwick.i', port: 26379}, {host: 'carnoustie.i', port: 26379}, {host: 'birkdale.i', port: 26379}],
    role: 'master',
    expires_in: 1.hour
  }

И в случае, если это полезно, моя конфигурация для универсального объекта REDIS и Sidekiq (это в config/initializers/001_redis.rb):

redis_options = {
  url: 'redis://prestwick/0',
  sentinels: [{host: 'prestwick.i', port: 26379}, {host: 'carnoustie.i', port: 26379}, {host: 'birkdale.i', port: 26379}],
  role: 'master'
}
redis_sidekiq_options = {
  url: 'redis://prestwick/2',
  sentinels: [{host: 'prestwick.i', port: 26379}, {host: 'carnoustie.i', port: 26379}, {host: 'birkdale.i', port: 26379}],
  role: 'master'
}

REDIS = Redis.new(redis_options)

Sidekiq.configure_server do |config|
  config.redis = redis_sidekiq_options
end
Sidekiq.configure_client do |config|
  config.redis = redis_sidekiq_options
end
Другие вопросы по тегам