Redis/Redis sentinel multiple instances installation and configuration module.
Redis
0.0.5 released.
This module requires Puppet >= 3.4.0 due to each function, need parser = future
in puppet.conf
.
In your puppet file
node default {
include redis
}
In your hieradata file
---
redis::version: 2.8.12
It will create /etc/redis/6379.conf
see file.
The default template configuration comes from redis.conf provided by the original package.
Only these default values are uncommented/added/changed:
daemonize yes
pidfile /var/run/redis_6379.pid
port 6379
logfile /var/log/redis_6379.log
dir /var/lib/redis/6379
Read Available redis properties for some properties hiera syntax
In your hieradata file
---
redis::version: 2.8.12
redis::servers:
redis_26389:
sentinel: true
conf:
sentinel monitor: mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds: mymaster 30000
sentinel parallel-syncs: mymaster 1
sentinel failover-timeout: mymaster 180000
It will create /etc/redis/26389.conf
see file.
The default template configuration comes from sentinel.conf provided by the original package.
Only these default values are uncommented/added/changed:
daemonize yes
pidfile /var/run/redis_26389.pid
port 26389
logfile /var/log/redis_26389.log
dir /var/lib/redis/26389
sentinel monitor mymaster 127.0.0.1 6379 2
sentinel down-after-milliseconds: mymaster 30000
sentinel parallel-syncs: mymaster 1
sentinel failover-timeout: mymaster 180000
Read Available redis properties for sentinel properties hiera syntax
redis::version
: version of Redis (required)redis::servers
: hash of servers instances, default{ redis_6379 => {} }
sentinel
: boolean, redis sentinel, defaultfalse
default_template
: boolean, use default redis template, defaulttrue
conf
: hash of redis properties, default{ daemonize => 'yes' }
redis::conf_dir
: configuration directory, default/etc/redis
redis::data_dir
: data directory, default/var/lib/redis
redis::sysctl
: boolean, apply sysctl overcommit conf, defaulttrue
redis::tmp
: tmp directory used by install, default/tmp
All properties can be added.
But due to the regex used, there are some restrictions:
Don't forget double-quotes ""
for "yes"
and "no"
otherwise puppet will understand true or false.
Some properties only work with default_template = true
:
rename-command
appendfsync
The key of some others must have two parts:
-
client-output-buffer-limit
client-output-buffer-limit normal: 64mb 0 0
client-output-buffer-limit slave: 128mb 64mb 60
client-output-buffer-limit pubsub: 64mb 8mb 60
-
save
save 900: 1
save 300: 10
save 60: 10000
-
sentinel
sentinel monitor: mymaster 127.0.0.1 6379 2
sentinel auth-pass: mymaster MySUPER--secret-0123passw0rd
sentinel down-after-milliseconds: mymaster 30000
sentinel parallel-syncs: mymaster 2
sentinel failover-timeout: mymaster 190000
sentinel notification-script: mymaster /var/redis/notify.sh
sentinel client-reconfig-script: mymaster /var/redis/reconfig.sh
---
redis::version: 2.8.12
redis::servers:
my_redis_1:
default_template: false
conf:
port: 9999
property_key: property_value
...
It will create /etc/redis/9999.conf
with these default values:
port 9999
logfile /var/log/redis_9999.log
dir /var/lib/redis/9999
pidfile /var/run/redis_9999.pid
daemonize yes
property_key property_value
...
---
redis::version: 2.8.12
redis::servers:
redis_7979:
conf:
port: 7979
bind: 127.0.0.1
loglevel: debug
appendonly: "no"
...
---
redis::version: 2.8.12
redis::servers:
my_redis_1:
default_template: false
conf:
port: 9999
"#slave-read-only": "yes"
"#min-slaves-to-write": 3
"#property_key": property_value
...
will give:
...
# slave-read-only yes
# min-slaves-to-write 3
# property_key property_value
...
---
redis::version: 2.8.12
redis::servers:
my_redis_1:
conf:
port: 9999
property_key: property_value
...
my_redis_3:
conf:
port: 8888
property_key: property_value
...
my_redis_2:
sentinel: true
conf:
port: 29999
property_key: property_value
...
$ service redis_${port} start/stop/restart
---
redis::version: 2.8.12
redis::servers:
redis_LRU_cache:
conf:
bind: 127.0.0.1
"#save 900": 1
"#save 300": 10
"#save 60": 10000
maxmemory: 100mb
maxmemory-policy: volatile-lru
maxmemory-samples: 5
---
redis::version: 2.8.12
redis::servers:
redis_sentinel:
sentinel: true
conf:
sentinel monitor: thor 192.168.0.12 6379 2
sentinel down-after-milliseconds: thor 30000
sentinel parallel-syncs: thor 1
sentinel failover-timeout: thor 180000
---
redis::version: 2.8.12
redis::servers:
redis_master:
conf:
port: 6379
redis_sentinel:
sentinel: true
conf:
sentinel monitor: thor 127.0.0.1 6379 2
sentinel down-after-milliseconds: thor 30000
sentinel parallel-syncs: thor 1
sentinel failover-timeout: thor 180000
redis_LRU_cache:
conf:
port: 7979
bind: 127.0.0.1
"#save 900": 1
"#save 300": 10
"#save 60": 10000
maxmemory: 100mb
maxmemory-policy: volatile-lru
maxmemory-samples: 5
$ puppet module install gsick-redis
Add in your Puppetfile
mod 'gsick/redis'
and run
$ librarian-puppet update
fix_future_test.sh
will be remove after the next release of puppet-lint and rspec-puppet.
$ ./fix_future_test.sh
$ bundle install
$ rake test
$ puppet apply tests/init.pp --noop
Gamaliel Sick
- Fork it
- Create your feature branch
git checkout -b my-new-feature
- Commit your changes
git commit -am 'Add some feature'
- Push to the branch
git push origin my-new-feature
- Create new Pull Request
The MIT License (MIT)
Copyright (c) 2014 gsick
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.