Skip to content
Browse files

updated the redis cookbook

  • Loading branch information...
1 parent de82bba commit beb175c7591c270e4768a14b8312c53bc01337bc @sandfish8 sandfish8 committed Sep 14, 2012
View
12 redis/README.md
@@ -0,0 +1,12 @@
+Description
+===========
+
+Requirements
+============
+
+Attributes
+==========
+
+Usage
+=====
+
View
29 redis/attributes/default.rb
@@ -1,33 +1,14 @@
-#
-# Cookbook Name:: redis
-# Attributes:: default
-#
-# Copyright 2010, Blue Box Group, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
# Installation requirements.
-default[:redis][:version] = "2.0.3"
+default[:redis][:version] = "2.4.8"
default[:redis][:dir] = "/usr/local/redis"
-default[:redis][:dirs] = [ "#{default[:redis][:dir]}/bin", "#{default[:redis][:dir]}/etc", "#{default[:redis][:dir]}/log", "/var/run/redis/" ]
-default[:redis][:binaries] = %w(redis-benchmark redis-cli redis-server)
+default[:redis][:dirs] = %w(bin etc log run)
+default[:redis][:binaries] = %w(redis-benchmark redis-cli redis-server redis-check-aof redis-check-dump)
# Configuration requirements.
default[:redis][:daemonize] = "yes"
-default[:redis][:pidfile] = "/var/run/redis/redis.pid"
+default[:redis][:pidfile] = "#{node[:redis][:dir]}/run/redis.pid"
default[:redis][:port] = "6379"
-default[:redis][:bind] = "127.0.0.1"
+default[:redis][:bind] = "0.0.0.0"
default[:redis][:timeout] = "300"
default[:redis][:loglevel] = "notice"
default[:redis][:logfile] = "#{default[:redis][:dir]}/log/redis.log"
View
143 redis/metadata.rb
@@ -1,140 +1,7 @@
maintainer "Blue Box Group, LLC"
-maintainer_email "support@blueboxgrp.com"
-license "Apache v2.0"
-description "Installs and configures Redis."
-long_description IO.read(File.join(File.dirname(__FILE__), 'README.rdoc'))
-version "0.1.0"
-recipe "redis", "Installs Redis with a base configuration and init script."
-
+maintainer_email "support@bluebox.net"
+license "Apache 2.0"
+description "Installs/Configures redis"
+long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
+version "0.0.1"
depends "build-essential"
-
-%w{centos redhat debian ubuntu}.each do |os|
- supports os
-end
-
-attribute "redis",
- :display_name => "Redis Hash",
- :description => "Hash of Redis attributes",
- :type => "hash"
-
-attribute 'redis/version',
- :display_name => "Redis Version",
- :description => "The version of Redis to install",
- :default => "2.0.3"
-
-attribute 'redis/dir',
- :display_name => "Redis Directory",
- :description => "The Redis installation directory",
- :default => "/usr/local/redis"
-
-attribute 'redis/dirs',
- :display_name => "Redis Directories",
- :description => "Additional directories that must be created for a successful installation",
- :type => "array",
- :default => [ "#{default[:redis][:dir]}/bin", "#{default[:redis][:dir]}/etc", "#{default[:redis][:dir]}/log", "/var/run/redis/" ]
-
-attribute 'redis/binaries',
- :display_name => "Redis Binaries",
- :description => "Binaries created after compile that should be installed"
- :type => "array",
- :default => [ "redis-benchmark", "redis-cli", "redis-server" ]
-
-attribute 'redis/daemonize',
- :display_name => "Redis Daemonize",
- :description => "Run Redis as a daemon",
- :default => "yes"
-
-attribute 'redis/pidfile',
- :display_name => "Redis PID File",
- :description => "Path to Redis PID file",
- :default => "/var/run/redis/redis.pid"
-
-attribute 'redis/port',
- :display_name => "Redis Port",
- :description => "Accept Redis connections on this port",
- :default => "6379"
-
-attribute 'redis/bind',
- :display_name => "Redis Interface",
- :description => "Interface Redis will bind to",
- :default => "127.0.0.1"
-
-attribute 'redis/timeout',
- :display_name => "Redis Timeout",
- :description => "Close the connection after a client is idle for N seconds",
- :default => "300"
-
-attribute 'redis/loglevel',
- :display_name => "Redis Log Level",
- :description => "Level of logging to be done by Redis",
- :default => "notice"
-
-attribute 'redis/logfile',
- :display_name => "Redis Log File",
- :description => "Path to Redis log file",
- :default => "#{default[:redis][:dir]}/log/redis.log"
-
-attribute 'redis/databases',
- :display_name => "Redis Databases",
- :description => "Number of Redis databases",
- :default => "16"
-
-attribute 'redis/appendonly',
- :display_name => "Redis Append Only"
- :description => "Append write operations to file on disk",
- :default => "no"
-
-attribute 'redis/appendfsync',
- :display => "Redis Append Fsync",
- :description => "Redis fsync mode",
- :default => "everysec"
-
-attribute 'redis/vm_enabled',
- :display "Redis Enable VM",
- :description => "Redis virtual memory",
- :default => "no"
-
-attribute 'redis/vm_swap_file',
- :display => "Redis VM Swap File",
- :description => "Path to Redis swap file",
- :default => "/tmp/redis.swap"
-
-attribute 'redis/vm_max_memory',
- :display => "Redis VM Max Memory",
- :description => "Configures the VM to use at max the specified amount of RAM",
- :default => "0"
-
-attribute 'redis/vm_page_size',
- :display => "Redis VM Page Size",
- :description => "Size of Redis VM Pages",
- :default => "32"
-
-attribute 'redis/vm_pages',
- :display => "Redis VM Pages",
- :description => "Number of total memory pages in Redis swap file",
- :default => "134217728"
-
-attribute 'redis/vm_max_threads',
- :display => "Redis VM Max Threads",
- :description => "Max number of VM I/O threads running at the same time",
- :default => "4"
-
-attribute 'redis/glueoutputbuf',
- :display => "Redis Glue Output Buffer",
- :description => "Glue small output buffers together in order to send small replies in a single TCP packet",
- :default => "yes"
-
-attribute 'redis/hash_max_zipmap_entries',
- :display => "Redis Hash Max ZipMap Entries",
- :description => "Max number of elements to store in Redis hash",
- :default => "64"
-
-attribute 'redis/hash_max_zipmap_value',
- :display => "Redis Hash Max ZipMap Value",
- :description => "Max size of element(s) stored in Redis hash",
- :default => "512"
-
-attribute 'redis/activerehashing',
- :display "Redis Active Rehashing",
- :description => "Active rehashing against the main Redis hash table",
- :default => "yes"
View
128 redis/recipes/default.rb
@@ -1,108 +1,122 @@
-#
-# Cookbook Name:: redis
-# Recipe:: default
-#
-# Copyright 2010, Blue Box Group, LLC
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# Make sure we can build Redis from source.
include_recipe "build-essential"
+include_recipe "blocks_firewall"
-# Create the redis group.
-group "redis" do
- action :create
-end
-
-# Create the redis user.
user "redis" do
comment "Redis Administrator"
system true
shell "/sbin/nologin"
end
-# Create the root of our installation.
directory "#{node[:redis][:dir]}" do
owner "redis"
- group "redis"
+ #group "redis" # See issue below.
mode "0755"
- action :create
end
# Create the rest of the directories.
node[:redis][:dirs].each do |dir|
- unless File.directory? dir
- directory dir do
+ unless File.directory? node[:redis][:dir] + "/" + dir
+ directory node[:redis][:dir] + "/" + dir do
owner "redis"
- group "redis"
+ #group "redis" # See issue below.
mode "0755"
recursive true
- action :create
end
end
end
+
+# Unfortunately we're hitting a bug in Chef that they've yet to resolve. This means we can't use the 'group' attribute to set proper ownership
+# on the directories we created above. We'll have to use this until the resolve the issue.
+# Bug report: http://tickets.opscode.com/browse/CHEF-1699
+execute "chown-redis-dir" do
+ user "root"
+ command "chown redis:redis #{node[:redis][:dir]}"
+end
+
+node[:redis][:dirs].each do |dir|
+ execute "chown-redis-#{dir}" do
+ user "root"
+ command "chown redis:redis #{node[:redis][:dir]}/#{dir}"
+ end
+end
-# Grab the tarball for our specified version.
remote_file "/tmp/redis-#{node[:redis][:version]}.tar.gz" do
source "http://redis.googlecode.com/files/redis-#{node[:redis][:version]}.tar.gz"
backup false
action :create_if_missing
+ not_if "#{node[:redis][:dir]}/bin/redis-server --version | grep #{node[:redis][:version]}" # Don't download if we already have this version installed.
end
-# Compile redis.
bash "compile-redis" do
cwd "/tmp"
code <<-EOH
tar zxf redis-#{node[:redis][:version]}.tar.gz
cd redis-#{node[:redis][:version]} && make
EOH
- not_if "test -x #{node[:redis][:dir]}/bin/redis-server"
+ not_if "#{node[:redis][:dir]}/bin/redis-server --version | grep #{node[:redis][:version]}" # Don't compile if we already have this version installed.
end
-# Move our binaries to the specified redis directory.
-node[:redis][:binaries].each do |bin|
- execute "installing-#{bin}" do
- user "root"
- command "cp -a /tmp/redis-#{node[:redis][:version]}/#{bin} #{node[:redis][:dir]}/bin/#{bin}"
- creates "#{node[:redis][:dir]}/bin/#{bin}"
+ruby_block "installing-binaries" do
+ block do
+ node[:redis][:binaries].each do |bin|
+ if File.exist?(node[:redis][:dir] + "/bin/" + bin) # If destination binary exists, then we need to compare our fresh compile w/ what's there.
+ unless File.read("/tmp/redis-#{node[:redis][:version]}/src/#{bin}") == File.read("#{node[:redis][:dir]}/bin/#{bin}") # Unless the files are the same...
+ system("cp -a /tmp/redis-#{node[:redis][:version]}/src/#{bin} #{node[:redis][:dir]}/bin/#{bin}") # Copy them over.
+ end
+ else
+ system("cp -a /tmp/redis-#{node[:redis][:version]}/src/#{bin} #{node[:redis][:dir]}/bin/#{bin}") # These were safe to move w/o comparing.
+ end
+ end
end
-end
+end
# Create profile.d script to add redis directory to $PATH.
template "/etc/profile.d/redis.sh" do
- source "redis.sh"
- mode "0755"
- backup false
- not_if "echo $PATH | grep '#{node[:redis][:dir]}/bin'"
-end
-
-# Create init script.
-template "/etc/init.d/redis-server" do
- source "redis-init"
+ owner "root"
+ group "root"
+ source "redis.sh.erb"
mode "0755"
backup false
end
-# Define our new service.
-service "redis-server" do
- supports :start => true, :stop => true, :restart => true
- action :nothing
+# setup and start init per platform
+case node[:platform]
+when "centos","redhat","scientific"
+ template "/etc/init.d/redis-server" do
+ owner "root"
+ group "root"
+ source "redis-init.erb"
+ mode "0755"
+ backup false
+ end
+
+ service "redis-server" do
+ supports :start => true, :stop => true, :restart => true
+ action :enable
+ end
+when "ubuntu"
+ template "/etc/init/redis-server.conf" do
+ owner "root"
+ group "root"
+ source "redis-upstart.conf.erb"
+ mode "0755"
+ backup false
+ end
+
+ link "/etc/init.d/redis-server" do
+ to "/lib/init/upstart-job"
+ end
+
+ service "redis-server" do
+ provider Chef::Provider::Service::Upstart
+ supports :status => true, :restart => true, :reload => true
+ action [ :enable, :start ]
+ end
end
# Create configuration file.
template "#{node[:redis][:dir]}/etc/redis.conf" do
- source "redis.conf"
+ source "redis.conf.erb"
mode "0644"
backup false
notifies :restart, "service[redis-server]", :immediately
View
102 redis/templates/default/redis-init.erb
@@ -0,0 +1,102 @@
+#!/bin/sh
+#
+# redis - this script starts and stops the redis-server daemon
+#
+# chkconfig: - 85 15
+# description: Redis is a persistent key-value database
+# processname: redis-server
+# config: <%= node[:redis][:dir] %>/etc/redis.conf
+# config: /etc/sysconfig/redis
+# pidfile: <%= node[:redis][:dir] %>/run/redis.pid
+
+# Source function library.
+. /etc/rc.d/init.d/functions
+
+# Source networking configuration.
+. /etc/sysconfig/network
+
+# Check that networking is up.
+[ "$NETWORKING" = "no" ] && exit 0
+
+redis="<%= node[:redis][:dir] %>/bin/redis-server"
+prog=$(basename $redis)
+
+REDIS_CONF_FILE="<%= node[:redis][:dir] %>/etc/redis.conf"
+
+[ -f /etc/sysconfig/redis ] && . /etc/sysconfig/redis
+
+lockfile=/var/lock/subsys/redis
+
+start() {
+ [ -x $redis ] || exit 5
+ [ -f $REDIS_CONF_FILE ] || exit 6
+ echo -n $"Starting $prog: "
+ daemon $redis $REDIS_CONF_FILE
+ retval=$?
+ echo
+ [ $retval -eq 0 ] && touch $lockfile
+ return $retval
+}
+
+stop() {
+ echo -n $"Stopping $prog: "
+ killproc $prog -QUIT
+ retval=$?
+ echo
+ [ $retval -eq 0 ] && rm -f $lockfile
+ return $retval
+}
+
+restart() {
+ stop
+ start
+}
+
+reload() {
+ echo -n $"Reloading $prog: "
+ killproc $redis -HUP
+ RETVAL=$?
+ echo
+}
+
+force_reload() {
+ restart
+}
+
+rh_status() {
+ status $prog
+}
+
+rh_status_q() {
+ rh_status >/dev/null 2>&1
+}
+
+case "$1" in
+ start)
+ rh_status_q && exit 0
+ $1
+ ;;
+ stop)
+ rh_status_q || exit 0
+ $1
+ ;;
+ restart|configtest)
+ $1
+ ;;
+ reload)
+ rh_status_q || exit 7
+ $1
+ ;;
+ force-reload)
+ force_reload
+ ;;
+ status)
+ rh_status
+ ;;
+ condrestart|try-restart)
+ rh_status_q || exit 0
+ ;;
+ *)
+ echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
+ exit 2
+esac
View
10 redis/templates/default/redis-upstart.conf.erb
@@ -0,0 +1,10 @@
+description "redis-server"
+
+start on startup
+stop on shutdown
+
+expect fork
+
+exec sudo -u redis <%= node[:redis][:dir] %>/bin/redis-server <%= node[:redis][:dir] %>/etc/redis.conf
+
+respawn
View
313 redis/templates/default/redis.conf.erb
@@ -0,0 +1,313 @@
+# Redis configuration file example
+
+# Note on units: when memory size is needed, it is possible to specifiy
+# it in the usual form of 1k 5GB 4M and so forth:
+#
+# 1k => 1000 bytes
+# 1kb => 1024 bytes
+# 1m => 1000000 bytes
+# 1mb => 1024*1024 bytes
+# 1g => 1000000000 bytes
+# 1gb => 1024*1024*1024 bytes
+#
+# units are case insensitive so 1GB 1Gb 1gB are all the same.
+
+# By default Redis does not run as a daemon. Use 'yes' if you need it.
+# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
+daemonize <%= @node[:redis][:daemonize] %>
+
+# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
+# default. You can specify a custom pid file location here.
+pidfile <%= @node[:redis][:pidfile] %>
+
+# Accept connections on the specified port, default is 6379
+port <%= @node[:redis][:port] %>
+
+# If you want you can bind a single interface, if the bind option is not
+# specified all the interfaces will listen for incoming connections.
+#
+# bind 127.0.0.1
+bind <%= @node[:redis][:bind] %>
+
+# Close the connection after a client is idle for N seconds (0 to disable)
+timeout <%= @node[:redis][:timeout] %>
+
+# Set server verbosity to 'debug'
+# it can be one of:
+# debug (a lot of information, useful for development/testing)
+# verbose (many rarely useful info, but not a mess like the debug level)
+# notice (moderately verbose, what you want in production probably)
+# warning (only very important / critical messages are logged)
+loglevel <%= @node[:redis][:loglevel] %>
+
+# Specify the log file name. Also 'stdout' can be used to force
+# Redis to log on the standard output. Note that if you use standard
+# output for logging but daemonize, logs will be sent to /dev/null
+logfile <%= @node[:redis][:logfile] %>
+
+# Set the number of databases. The default database is DB 0, you can select
+# a different one on a per-connection basis using SELECT <dbid> where
+# dbid is a number between 0 and 'databases'-1
+databases <%= @node[:redis][:databases] %>
+
+################################ SNAPSHOTTING #################################
+#
+# Save the DB on disk:
+#
+# save <seconds> <changes>
+#
+# Will save the DB if both the given number of seconds and the given
+# number of write operations against the DB occurred.
+#
+# In the example below the behaviour will be to save:
+# after 900 sec (15 min) if at least 1 key changed
+# after 300 sec (5 min) if at least 10 keys changed
+# after 60 sec if at least 10000 keys changed
+#
+# Note: you can disable saving at all commenting all the "save" lines.
+
+save 900 1
+save 300 10
+save 60 10000
+
+# Compress string objects using LZF when dump .rdb databases?
+# For default that's set to 'yes' as it's almost always a win.
+# If you want to save some CPU in the saving child set it to 'no' but
+# the dataset will likely be bigger if you have compressible values or keys.
+rdbcompression yes
+
+# The filename where to dump the DB
+dbfilename dump.rdb
+
+# The working directory.
+#
+# The DB will be written inside this directory, with the filename specified
+# above using the 'dbfilename' configuration directive.
+#
+# Also the Append Only File will be created inside this directory.
+#
+# Note that you must specify a directory here, not a file name.
+dir <%= @node[:redis][:dir] %>
+
+################################# REPLICATION #################################
+
+# Master-Slave replication. Use slaveof to make a Redis instance a copy of
+# another Redis server. Note that the configuration is local to the slave
+# so for example it is possible to configure the slave to save the DB with a
+# different interval, or to listen to another port, and so on.
+#
+# slaveof <masterip> <masterport>
+
+# If the master is password protected (using the "requirepass" configuration
+# directive below) it is possible to tell the slave to authenticate before
+# starting the replication synchronization process, otherwise the master will
+# refuse the slave request.
+#
+# masterauth <master-password>
+
+################################## SECURITY ###################################
+
+# Require clients to issue AUTH <PASSWORD> before processing any other
+# commands. This might be useful in environments in which you do not trust
+# others with access to the host running redis-server.
+#
+# This should stay commented out for backward compatibility and because most
+# people do not need auth (e.g. they run their own servers).
+#
+# Warning: since Redis is pretty fast an outside user can try up to
+# 150k passwords per second against a good box. This means that you should
+# use a very strong password otherwise it will be very easy to break.
+#
+# requirepass foobared
+
+################################### LIMITS ####################################
+
+# Set the max number of connected clients at the same time. By default there
+# is no limit, and it's up to the number of file descriptors the Redis process
+# is able to open. The special value '0' means no limits.
+# Once the limit is reached Redis will close all the new connections sending
+# an error 'max number of clients reached'.
+#
+# maxclients 128
+
+# Don't use more memory than the specified amount of bytes.
+# When the memory limit is reached Redis will try to remove keys with an
+# EXPIRE set. It will try to start freeing keys that are going to expire
+# in little time and preserve keys with a longer time to live.
+# Redis will also try to remove objects from free lists if possible.
+#
+# If all this fails, Redis will start to reply with errors to commands
+# that will use more memory, like SET, LPUSH, and so on, and will continue
+# to reply to most read-only commands like GET.
+#
+# WARNING: maxmemory can be a good idea mainly if you want to use Redis as a
+# 'state' server or cache, not as a real DB. When Redis is used as a real
+# database the memory usage will grow over the weeks, it will be obvious if
+# it is going to use too much memory in the long run, and you'll have the time
+# to upgrade. With maxmemory after the limit is reached you'll start to get
+# errors for write operations, and this may even lead to DB inconsistency.
+#
+# maxmemory <bytes>
+
+############################## APPEND ONLY MODE ###############################
+
+# By default Redis asynchronously dumps the dataset on disk. If you can live
+# with the idea that the latest records will be lost if something like a crash
+# happens this is the preferred way to run Redis. If instead you care a lot
+# about your data and don't want to that a single record can get lost you should
+# enable the append only mode: when this mode is enabled Redis will append
+# every write operation received in the file appendonly.aof. This file will
+# be read on startup in order to rebuild the full dataset in memory.
+#
+# Note that you can have both the async dumps and the append only file if you
+# like (you have to comment the "save" statements above to disable the dumps).
+# Still if append only mode is enabled Redis will load the data from the
+# log file at startup ignoring the dump.rdb file.
+#
+# IMPORTANT: Check the BGREWRITEAOF to check how to rewrite the append
+# log file in background when it gets too big.
+
+appendonly <%= @node[:redis][:appendonly] %>
+
+# The name of the append only file (default: "appendonly.aof")
+# appendfilename appendonly.aof
+
+# The fsync() call tells the Operating System to actually write data on disk
+# instead to wait for more data in the output buffer. Some OS will really flush
+# data on disk, some other OS will just try to do it ASAP.
+#
+# Redis supports three different modes:
+#
+# no: don't fsync, just let the OS flush the data when it wants. Faster.
+# always: fsync after every write to the append only log . Slow, Safest.
+# everysec: fsync only if one second passed since the last fsync. Compromise.
+#
+# The default is "everysec" that's usually the right compromise between
+# speed and data safety. It's up to you to understand if you can relax this to
+# "no" that will will let the operating system flush the output buffer when
+# it wants, for better performances (but if you can live with the idea of
+# some data loss consider the default persistence mode that's snapshotting),
+# or on the contrary, use "always" that's very slow but a bit safer than
+# everysec.
+#
+# If unsure, use "everysec".
+
+# appendfsync always
+appendfsync <%= @node[:redis][:appendfsync] %>
+# appendfsync no
+
+################################ VIRTUAL MEMORY ###############################
+
+# Virtual Memory allows Redis to work with datasets bigger than the actual
+# amount of RAM needed to hold the whole dataset in memory.
+# In order to do so very used keys are taken in memory while the other keys
+# are swapped into a swap file, similarly to what operating systems do
+# with memory pages.
+#
+# To enable VM just set 'vm-enabled' to yes, and set the following three
+# VM parameters accordingly to your needs.
+
+vm-enabled <%= @node[:redis][:vm_enabled] %>
+# vm-enabled yes
+
+# This is the path of the Redis swap file. As you can guess, swap files
+# can't be shared by different Redis instances, so make sure to use a swap
+# file for every redis process you are running. Redis will complain if the
+# swap file is already in use.
+#
+# The best kind of storage for the Redis swap file (that's accessed at random)
+# is a Solid State Disk (SSD).
+#
+# *** WARNING *** if you are using a shared hosting the default of putting
+# the swap file under /tmp is not secure. Create a dir with access granted
+# only to Redis user and configure Redis to create the swap file there.
+vm-swap-file <%= @node[:redis][:vm_swap_file] %>
+
+# vm-max-memory configures the VM to use at max the specified amount of
+# RAM. Everything that deos not fit will be swapped on disk *if* possible, that
+# is, if there is still enough contiguous space in the swap file.
+#
+# With vm-max-memory 0 the system will swap everything it can. Not a good
+# default, just specify the max amount of RAM you can in bytes, but it's
+# better to leave some margin. For instance specify an amount of RAM
+# that's more or less between 60 and 80% of your free RAM.
+vm-max-memory <%= @node[:redis][:vm_max_memory] %>
+
+# Redis swap files is split into pages. An object can be saved using multiple
+# contiguous pages, but pages can't be shared between different objects.
+# So if your page is too big, small objects swapped out on disk will waste
+# a lot of space. If you page is too small, there is less space in the swap
+# file (assuming you configured the same number of total swap file pages).
+#
+# If you use a lot of small objects, use a page size of 64 or 32 bytes.
+# If you use a lot of big objects, use a bigger page size.
+# If unsure, use the default :)
+vm-page-size <%= @node[:redis][:vm_page_size] %>
+
+# Number of total memory pages in the swap file.
+# Given that the page table (a bitmap of free/used pages) is taken in memory,
+# every 8 pages on disk will consume 1 byte of RAM.
+#
+# The total swap size is vm-page-size * vm-pages
+#
+# With the default of 32-bytes memory pages and 134217728 pages Redis will
+# use a 4 GB swap file, that will use 16 MB of RAM for the page table.
+#
+# It's better to use the smallest acceptable value for your application,
+# but the default is large in order to work in most conditions.
+vm-pages <%= @node[:redis][:vm_pages] %>
+
+# Max number of VM I/O threads running at the same time.
+# This threads are used to read/write data from/to swap file, since they
+# also encode and decode objects from disk to memory or the reverse, a bigger
+# number of threads can help with big objects even if they can't help with
+# I/O itself as the physical device may not be able to couple with many
+# reads/writes operations at the same time.
+#
+# The special value of 0 turn off threaded I/O and enables the blocking
+# Virtual Memory implementation.
+vm-max-threads <%= @node[:redis][:vm_max_threads] %>
+
+############################### ADVANCED CONFIG ###############################
+
+# Glue small output buffers together in order to send small replies in a
+# single TCP packet. Uses a bit more CPU but most of the times it is a win
+# in terms of number of queries per second. Use 'yes' if unsure.
+glueoutputbuf <%= @node[:redis][:glueoutputbuf] %>
+
+# Hashes are encoded in a special way (much more memory efficient) when they
+# have at max a given numer of elements, and the biggest element does not
+# exceed a given threshold. You can configure this limits with the following
+# configuration directives.
+hash-max-zipmap-entries <%= @node[:redis][:hash_max_zipmap_entries] %>
+hash-max-zipmap-value <%= @node[:redis][:hash_max_zipmap_value] %>
+
+# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in
+# order to help rehashing the main Redis hash table (the one mapping top-level
+# keys to values). The hash table implementation redis uses (see dict.c)
+# performs a lazy rehashing: the more operation you run into an hash table
+# that is rhashing, the more rehashing "steps" are performed, so if the
+# server is idle the rehashing is never complete and some more memory is used
+# by the hash table.
+#
+# The default is to use this millisecond 10 times every second in order to
+# active rehashing the main dictionaries, freeing memory when possible.
+#
+# If unsure:
+# use "activerehashing no" if you have hard latency requirements and it is
+# not a good thing in your environment that Redis can reply form time to time
+# to queries with 2 milliseconds delay.
+#
+# use "activerehashing yes" if you don't have such hard requirements but
+# want to free memory asap when possible.
+activerehashing <%= @node[:redis][:activerehashing] %>
+
+################################## INCLUDES ###################################
+
+# Include one or more other config files here. This is useful if you
+# have a standard template that goes to all redis server but also need
+# to customize a few per-server settings. Include files can include
+# other files, so use this wisely.
+#
+# include /path/to/local.conf
+# include /path/to/other.conf
View
2 redis/templates/default/redis.sh.erb
@@ -0,0 +1,2 @@
+PATH=<%= @node[:redis][:dir] %>/bin:$PATH
+export PATH

0 comments on commit beb175c

Please sign in to comment.
Something went wrong with that request. Please try again.