Configure redis
Redis cluster replication adopts a slave-master architecture. This module configure the master that slave will link to.
module.exports = (service) ->
service = migration.call @, service, 'ryba/redis/master', ['ryba', 'redis', 'master'], require('nikita/lib/misc').merge require('.').use,
iptables: key: ['iptables']
yum: key: ['yum']
redis_master: key: ['ryba', 'redis', 'master']
@config.ryba.redis ?= {}
options = @config.ryba.redis.master ?= service.options
Identities
The Redis package does create the redis user.
# Group
options.group = name: options.group if typeof options.group is 'string'
options.group ?= {}
options.group.name ?= 'redis'
options.group.system ?= true
# User
options.user = name: options.user if typeof options.user is 'string'
options.user ?= {}
options.user.name ?= 'redis'
options.user.system ?= true
options.user.comment ?= 'Redis Database Server'
options.user.home ?= "/var/lib/#{options.user.name}"
options.user.groups ?= []
options.user.gid = options.group.name
Master Configuration
# Misc
options.fqdn ?= service.node.fqdn
options.hostname = service.node.hostname
options.iptables ?= service.use.iptables and service.use.iptables.options.action is 'start'
options.clean_logs ?= false
options.conf_dir ?= "/etc/redis"
options.pid_dir ?= '/var/run/redis'
options.log_dir ?= '/var/log/redis'
Configuration
options.conf ?= {}
options.host ?= @config.host
options.conf['port'] ?= '6379'
options.conf['pidfile'] ?= "#{options.pid_dir}/redis.pid"
options.conf['daemonize'] ?= 'no'
options.conf['tcp-backlog'] ?= '511' #somaxconn #tcp_max_syn_backlog
options.conf['bind'] ?= '0.0.0.0'
options.conf['timeout'] ?= '0'
options.conf['loglevel'] ?= 'notice'
options.conf['logfile'] ?= "#{options.log_dir}/redis.log"
options.conf['databases'] ?= '16'
Snapshotting
options.conf['save'] ?= '900 1' #save <seconds> <changes>
options.conf['stop-writes-on-bgsave-error'] ?= 'yes'
options.conf['rdbcompression'] ?= 'yes'
options.conf['rdbchecksum'] ?= 'yes'
options.conf['dbfilename'] ?= 'dump.rdb'
options.conf['dir'] ?= "#{options.user.home}/snapshots"
Replication
Options by default configured from Redis Official documentation
options.conf['slave-serve-stale-data'] ?= 'yes'
options.conf['min-slaves-to-write'] ?= '1'
options.conf['min-slaves-max-lag'] ?= '30'
Security
Add password authentication
options.slave_password ?= 'redis123'
throw Error 'Missing Redis master password' unless options.slave_password?
options.conf['requirepass'] ?= options.slave_password
options.conf['slaveof'] ?= "#{service.use.redis_master[0].node.fqdn} #{service.use.redis_master[0].options.conf['port']}"
options.conf['masterauth'] ?= "#{service.use.redis_master[0].options.conf['requirepass']}"
Dependencies
quote = require 'regexp-quote'
migration = require 'masson/lib/migration'
{merge} = require '@nikitajs/core/lib/misc'