Add support for Redis replication, set up in production #540
| @ -1,5 +1,6 @@ | ||||
| { | ||||
|   "name": "redis-1", | ||||
|   "chef_environment": "production", | ||||
|   "normal": { | ||||
|     "knife_zero": { | ||||
|       "host": "10.1.1.225" | ||||
| @ -8,7 +9,7 @@ | ||||
|   "automatic": { | ||||
|     "fqdn": "redis-1", | ||||
|     "os": "linux", | ||||
|     "os_version": "5.4.0-1090-kvm", | ||||
|     "os_version": "5.4.0-1104-kvm", | ||||
|     "hostname": "redis-1", | ||||
|     "ipaddress": "192.168.122.83", | ||||
|     "roles": [ | ||||
| @ -22,6 +23,8 @@ | ||||
|       "kosmos_kvm::guest", | ||||
|       "kosmos_redis", | ||||
|       "kosmos_redis::default", | ||||
|       "kosmos_redis::firewall", | ||||
|       "kosmos_redis::backup", | ||||
|       "apt::default", | ||||
|       "timezone_iii::default", | ||||
|       "timezone_iii::debian", | ||||
| @ -43,7 +46,6 @@ | ||||
|       "redisio::disable_os_default", | ||||
|       "redisio::configure", | ||||
|       "redisio::enable", | ||||
|       "kosmos_redis::firewall", | ||||
|       "backup::default", | ||||
|       "logrotate::default" | ||||
|     ], | ||||
|  | ||||
| @ -1,5 +1,6 @@ | ||||
| { | ||||
|   "name": "redis-2", | ||||
|   "chef_environment": "production", | ||||
|   "normal": { | ||||
|     "knife_zero": { | ||||
|       "host": "10.1.1.208" | ||||
| @ -8,17 +9,20 @@ | ||||
|   "automatic": { | ||||
|     "fqdn": "redis-2", | ||||
|     "os": "linux", | ||||
|     "os_version": "5.4.0-1090-kvm", | ||||
|     "os_version": "5.4.0-1104-kvm", | ||||
|     "hostname": "redis-2", | ||||
|     "ipaddress": "192.168.122.98", | ||||
|     "roles": [ | ||||
|       "base", | ||||
|       "kvm_guest" | ||||
|       "kvm_guest", | ||||
|       "redis_replica" | ||||
|     ], | ||||
|     "recipes": [ | ||||
|       "kosmos-base", | ||||
|       "kosmos-base::default", | ||||
|       "kosmos_kvm::guest", | ||||
|       "kosmos_redis::replica", | ||||
|       "kosmos_redis::firewall", | ||||
|       "apt::default", | ||||
|       "timezone_iii::default", | ||||
|       "timezone_iii::debian", | ||||
| @ -32,7 +36,14 @@ | ||||
|       "postfix::_common", | ||||
|       "postfix::_attributes", | ||||
|       "postfix::sasl_auth", | ||||
|       "hostname::default" | ||||
|       "hostname::default", | ||||
|       "redisio::default", | ||||
|       "redisio::_install_prereqs", | ||||
|       "redisio::install", | ||||
|       "redisio::ulimit", | ||||
|       "redisio::disable_os_default", | ||||
|       "redisio::configure", | ||||
|       "redisio::enable" | ||||
|     ], | ||||
|     "platform": "ubuntu", | ||||
|     "platform_version": "20.04", | ||||
| @ -51,6 +62,7 @@ | ||||
|   }, | ||||
|   "run_list": [ | ||||
|     "role[base]", | ||||
|     "role[kvm_guest]" | ||||
|     "role[kvm_guest]", | ||||
|     "role[redis_replica]" | ||||
|   ] | ||||
| } | ||||
							
								
								
									
										15
									
								
								roles/redis_replica.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								roles/redis_replica.rb
									
									
									
									
									
										Normal file
									
								
							| @ -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' | ||||
|     } | ||||
|   } | ||||
| }) | ||||
| @ -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({}) | ||||
|  | ||||
							
								
								
									
										11
									
								
								site-cookbooks/kosmos_redis/recipes/backup.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								site-cookbooks/kosmos_redis/recipes/backup.rb
									
									
									
									
									
										Normal file
									
								
							| @ -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" | ||||
| @ -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 | ||||
|  | ||||
							
								
								
									
										19
									
								
								site-cookbooks/kosmos_redis/recipes/replica.rb
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								site-cookbooks/kosmos_redis/recipes/replica.rb
									
									
									
									
									
										Normal file
									
								
							| @ -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' | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user