diff --git a/roles/redis_replica.rb b/roles/redis_replica.rb new file mode 100644 index 0000000..ddcc9d1 --- /dev/null +++ b/roles/redis_replica.rb @@ -0,0 +1,15 @@ +name "redis_replica" + +run_list %w( + kosmos_redis::replica + kosmos_redis::firewall +) + +default_attributes({ + 'redisio' => { + 'default_settings' => { + 'slaveservestaledata' => 'yes', + 'slavereadonly' => 'yes' + } + } +}) diff --git a/roles/redis_server.rb b/roles/redis_server.rb index f7fb88e..e50219b 100644 --- a/roles/redis_server.rb +++ b/roles/redis_server.rb @@ -7,6 +7,7 @@ default_run_list = %w( production_run_list = %w( kosmos_redis::default kosmos_redis::firewall + kosmos_redis::backup ) env_run_lists( @@ -14,5 +15,3 @@ env_run_lists( 'development' => default_run_list, 'production' => production_run_list ) - -default_attributes({}) diff --git a/site-cookbooks/kosmos_redis/recipes/backup.rb b/site-cookbooks/kosmos_redis/recipes/backup.rb new file mode 100644 index 0000000..44041f6 --- /dev/null +++ b/site-cookbooks/kosmos_redis/recipes/backup.rb @@ -0,0 +1,11 @@ +# +# Cookbook Name:: kosmos_redis +# Recipe:: backup +# + +databases = node['redisio']['servers'].map do |server, _| + "dump-#{server['port']}" +end +node.override["backup"]["redis"]["databases"] = databases + +include_recipe "backup" diff --git a/site-cookbooks/kosmos_redis/recipes/default.rb b/site-cookbooks/kosmos_redis/recipes/default.rb index 7153aca..dfc0031 100644 --- a/site-cookbooks/kosmos_redis/recipes/default.rb +++ b/site-cookbooks/kosmos_redis/recipes/default.rb @@ -3,16 +3,10 @@ # Recipe:: default # +node.normal['redisio']['servers'] = [{ + 'port' => '6379', + 'protected_mode' => 'no' +}] + include_recipe 'redisio::default' include_recipe 'redisio::enable' - -unless node.chef_environment == "development" - include_recipe "kosmos_redis::firewall" - - # Backup the databases to S3 - databases = node['redisio']['servers'].map do |server, _| - "dump-#{server['port']}" - end - node.override["backup"]["redis"]["databases"] = databases - include_recipe "backup" -end diff --git a/site-cookbooks/kosmos_redis/recipes/replica.rb b/site-cookbooks/kosmos_redis/recipes/replica.rb new file mode 100644 index 0000000..d968c7b --- /dev/null +++ b/site-cookbooks/kosmos_redis/recipes/replica.rb @@ -0,0 +1,19 @@ +# +# Cookbook Name:: kosmos_redis +# Recipe:: replica +# + +primary_host = search(:node, 'role:redis_server').first['knife_zero']['host'] rescue nil + +if primary_host.nil? + Chef::Log.warn("No node found with 'redis_server' role. Stopping here.") + return +end + +node.normal['redisio']['servers'] = [{ + 'port' => '6379', + 'replicaof' => { 'address' => primary_host, 'port' => '6379' } +}] + +include_recipe 'redisio::default' +include_recipe 'redisio::enable'