Skip to content
This repository was archived by the owner on Mar 8, 2023. It is now read-only.

Commit 3a076a7

Browse files
authored
Merge pull request #79 from echocat/develop
backmerge for release 1.9.0
2 parents 6e4bd03 + e4b1aa4 commit 3a076a7

File tree

7 files changed

+249
-33
lines changed

7 files changed

+249
-33
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
sudo: false
33
language: ruby
44
cache: bundler
5+
env: BUNDLE_PATH=.bundle
56
bundler_args: --without system_tests
67
before_install: rm Gemfile.lock || true
78
script: bundle exec rake validate lint spec

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
## 2016-06-24 - 1.9.0 (Feature/Bugfix release)
2+
3+
#### Bugfixes:
4+
5+
- (734defe) redis-check-dump was renamed to redis-check-rdb in redis version 3.2
6+
7+
#### Features:
8+
9+
- (123f474) Add initial cluster support to redis::server
10+
111
## 2016-04-08 - 1.8.1 (Bugfix release)
212

313
#### Bugfixes:

README.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
2. [Setup - The basics of getting started with redis](#setup)
77
* [Beginning with redis - Installation](#beginning-with-redis)
88
* [Run multiple instances on same host](#run-multiple-instances-on-same-host)
9+
* [Create a cluster-enabled instance](#Create a cluster-enable instance)
910
* [Setting up sentinel with two monitors](#setting-up-sentinel-with-two-monitors)
1011
3. [Usage - The class and defined types available for configuration](#usage)
1112
* [Classes and Defined Types](#classes-and-defined-types)
@@ -139,6 +140,36 @@ node 'redis-slave.my.domain' {
139140
}
140141
```
141142

143+
###Create a cluster-enable instance
144+
145+
Please note that right now you can only create cluster-enabled instances
146+
but you cannot configure a Redis Cluster only with this module. You should
147+
still use `redis-trib.rb` from Redis source distribution or configure it
148+
by hand with redis cluster commands. Moreover, the cluster mode will be enabled
149+
only for Redis >= 3.0
150+
151+
A simple example of a cluster-enabled instance, with a timeout of 5 seconds to
152+
detect if another node is dead.
153+
154+
```puppet
155+
node 'redis-cluster.my.domain' {
156+
157+
# install latest stable build.
158+
class { 'redis::install': }
159+
160+
redis::server {
161+
'cluster-instance':
162+
redis_memory => '1g',
163+
redis_ip => '0.0.0.0',
164+
redis_port => 6379,
165+
running => true,
166+
enabled => true,
167+
cluster_enabled => true,
168+
cluster_node_timeout => '5000',
169+
}
170+
}
171+
```
172+
142173
### Example using Hiera
143174

144175
redis::install::redis_package: true
@@ -402,6 +433,28 @@ Configure Redis slave replication timeout in seconds. Default: 60 (number)
402433

403434
Configure Redis replication ping slave period in seconds. Default: 10 (number)
404435

436+
##### Cluster Options
437+
438+
#####`cluster_enabled`
439+
440+
Enable Redis Cluster. Supported only in Redis 3.x. Default: false
441+
442+
#####`cluster_node_timeout`
443+
444+
Timeout in ms to declare a node as failed.
445+
446+
#####`cluster_slave_validity_factor`
447+
448+
Configure slave validity factor. Please read the Redis documentation to learn more about this parameter.
449+
450+
#####`cluster_migration_barrier`
451+
452+
Slaves migrate to orphaned masters only if there are still at least this given number of other working slaves for their old master.
453+
454+
#####`cluster_require_full_coverage`
455+
456+
By default Redis Cluster nodes stop accepting queries if they detect there is at least an hash slot uncovered.
457+
405458
####Defined Type: `redis::sentinel`
406459

407460
Used to configure sentinel instances. You can setup multiple sentinel servers

manifests/install.pp

Lines changed: 39 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,20 @@
3131
$download_tool = $::redis::params::download_tool,
3232
$redis_user = $::redis::params::redis_user,
3333
$redis_group = $::redis::params::redis_group,
34-
$download_base = $::redis::params::download_base,
35-
) inherits redis {
36-
if ( $redis_package == true ) {
34+
$download_base = $::redis::params::download_base,) inherits redis {
35+
if ($redis_package == true) {
3736
case $::operatingsystem {
38-
'Debian', 'Ubuntu': {
39-
package { 'redis-server' : ensure => $redis_version, }
40-
service { 'redis-server' :
37+
'Debian', 'Ubuntu' : {
38+
package { 'redis-server': ensure => $redis_version, }
39+
40+
service { 'redis-server':
4141
ensure => stopped,
4242
subscribe => Package['redis-server']
4343
}
4444
}
45-
'Fedora', 'RedHat', 'CentOS', 'OEL', 'OracleLinux', 'Amazon', 'Scientific', 'SLES': {
46-
package { 'redis' : ensure => $redis_version, }
45+
'Fedora', 'RedHat', 'CentOS', 'OEL', 'OracleLinux', 'Amazon', 'Scientific', 'SLES' : {
46+
package { 'redis': ensure => $redis_version, }
47+
4748
# The SLES DatabaseServer repository installs a conflicting logrotation configuration
4849
if $::operatingsystem == 'SLES' {
4950
file { '/etc/logrotate.d/redis':
@@ -52,30 +53,29 @@
5253
}
5354
}
5455
}
55-
'Gentoo': {
56-
package { 'dev-db/redis' : ensure => $redis_version, }
56+
'Gentoo' : {
57+
package { 'dev-db/redis': ensure => $redis_version, }
5758
}
58-
default: {
59+
default : {
5960
fail('The module does not support this OS.')
6061
}
6162
}
6263
} else {
63-
6464
# install necessary packages for build.
6565
case $::operatingsystem {
66-
'Debian', 'Ubuntu': {
66+
'Debian', 'Ubuntu' : {
6767
ensure_packages('build-essential')
6868
Package['build-essential'] -> Anchor['redis::prepare_build']
6969
}
70-
'Fedora', 'RedHat', 'CentOS', 'OEL', 'OracleLinux', 'Amazon', 'Scientific', 'Sles': {
70+
'Fedora', 'RedHat', 'CentOS', 'OEL', 'OracleLinux', 'Amazon', 'Scientific', 'Sles' : {
7171
ensure_packages('make')
7272
Package['make'] -> Anchor['redis::prepare_build']
7373
ensure_packages('gcc')
7474
Package['gcc'] -> Anchor['redis::prepare_build']
7575
ensure_packages('glibc-devel')
7676
Package['glibc-devel'] -> Anchor['redis::prepare_build']
7777
}
78-
default: {
78+
default : {
7979
fail('The module does not support this OS.')
8080
}
8181
}
@@ -90,9 +90,7 @@
9090
before => File[$redis_build_dir]
9191
}
9292

93-
file { $redis_build_dir:
94-
ensure => directory,
95-
}
93+
file { $redis_build_dir: ensure => directory, }
9694

9795
$redis_download_url = "${download_base}/redis-${redis_version}.tar.gz"
9896

@@ -107,9 +105,7 @@
107105
group => 'root',
108106
}
109107

110-
anchor { 'redis::prepare_build':
111-
before => Exec['redis::compile'],
112-
}
108+
anchor { 'redis::prepare_build': before => Exec['redis::compile'], }
113109

114110
# if this fails, then a 'make distclean' can help
115111
exec { 'redis::compile':
@@ -127,18 +123,29 @@
127123
require => Exec['redis::compile']
128124
}
129125

130-
anchor { 'redis::install':
131-
require => File["${redis_build_dir}/redis"],
132-
}
126+
anchor { 'redis::install': require => File["${redis_build_dir}/redis"], }
133127

134-
$redis_binaries = [
135-
'redis-benchmark',
136-
'redis-check-aof',
137-
'redis-check-dump',
138-
'redis-cli',
139-
'redis-sentinel',
140-
'redis-server'
141-
]
128+
# issue #75 redis-check-dump was renamed to redis-check.rdb since 3.2
129+
case $redis_version {
130+
/^2\./, /^3\.0/, /^3\.1/ : {
131+
$redis_binaries = [
132+
'redis-benchmark',
133+
'redis-check-aof',
134+
'redis-check-dump',
135+
'redis-cli',
136+
'redis-sentinel',
137+
'redis-server']
138+
}
139+
default : {
140+
$redis_binaries = [
141+
'redis-benchmark',
142+
'redis-check-aof',
143+
'redis-check-rdb',
144+
'redis-cli',
145+
'redis-sentinel',
146+
'redis-server']
147+
}
148+
}
142149

143150
redis::installbinary { $redis_binaries:
144151
require => Anchor['redis::install'],

manifests/server.pp

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,25 @@
8686
#
8787
# [*manage_logrotate*]
8888
# Configure logrotate rules for redis server. Default: true
89+
#
90+
# [*cluster_enabled*]
91+
# Enable Redis Cluster. Supported only in Redis 3.x. Default: false
92+
#
93+
# [*cluster_node_timeout*]
94+
# Timeout in ms to declare a node as failed.
95+
#
96+
# [*cluster_slave_validity_factor*]
97+
# Configure slave validity factor. Please read the Redis documentation to learn more
98+
# about this parameter.
99+
#
100+
# [*cluster_migration_barrier*]
101+
# Slaves migrate to orphaned masters only if there are still at least this
102+
# given number of other working slaves for their old master.
103+
#
104+
# [*cluster_require_full_coverage*]
105+
# By default Redis Cluster nodes stop accepting queries if they detect there
106+
# is at least an hash slot uncovered.
107+
89108
define redis::server (
90109
$redis_name = $name,
91110
$redis_memory = '100mb',
@@ -126,6 +145,11 @@
126145
$hash_max_ziplist_entries = 512,
127146
$hash_max_ziplist_value = 64,
128147
$manage_logrotate = true,
148+
$cluster_enabled = false,
149+
$cluster_node_timeout = undef,
150+
$cluster_slave_validity_factor = undef,
151+
$cluster_migration_barrier = undef,
152+
$cluster_require_full_coverage = true,
129153
) {
130154
$redis_user = $::redis::install::redis_user
131155
$redis_group = $::redis::install::redis_group
@@ -139,6 +163,7 @@
139163
default => undef,
140164
}
141165
$redis_2_6_or_greater = versioncmp($::redis::install::redis_version,'2.6') >= 0
166+
$redis_with_cluster_support = versioncmp($::redis::install::redis_version,'3.0') >= 0
142167

143168
# redis conf file
144169
$conf_file_name = "redis_${redis_name}.conf"

metadata.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
}
3131
],
3232
"name": "dwerder-redis",
33-
"version": "1.8.1",
33+
"version": "1.9.0",
3434
"source": "https://github.com/echocat/puppet-redis.git",
3535
"author": "Daniel Werdermann",
3636
"license": "MPL-2.0",

0 commit comments

Comments
 (0)