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