Giter Club home page Giter Club logo

puppet-redis's Introduction

#redis

####Table of Contents

  1. Overview - What is the redis module?
  2. Setup - The basics of getting started with redis
  3. Usage - The class and defined types available for configuration
  4. Requirements
  5. Limitations - OS compatibility, etc.
  6. Contributing to the redis module

##Overview

This module installs and makes basic configs for multiple redis instances on the same node. It installs redis via REPO or from source. (http://redis.io/) It also can configure the monitoring server Sentinel.

Puppet Forge Build Status Puppet Forge Downloads

##Setup

What redis affects:

  • packages/configuration to compile and install redis from source
  • services/configuration files to run multiple redis and sentinels

###Beginning with redis

To just compile and install redis binaries. As default the latest stable release will be used.

  class { 'redis::install': }

To install a specific redis version use the following parameters. Most of the time you will only need redis_version.

  class { 'redis::install':
    redis_version     => '2.8.8',
    redis_build_dir   => '/opt',
    redis_install_dir => '/usr/bin'
  }

To install redis from package use the following parameters. You will need redis_version and redis_package.

  class { 'redis::install':
    redis_version  => '2.8.18-1.el6.remi',
    redis_package  => true,
  }

###Run multiple instances on same host

As example run two redis instances on port 6379 and 6380.

node 'redis.my.domain' {

  # install latest stable build.
  class { 'redis::install': }

  redis::server {
    'instance1':
      redis_memory    => '1g',
      redis_ip        => '0.0.0.0',
      redis_port      => 6379,
      redis_mempolicy => 'allkeys-lru',
      redis_timeout   => 0,
      redis_nr_dbs    => 16,
      redis_loglevel  => 'notice',
      running         => true,
      enabled         => true
  }

  redis::server {
    'secondRedis':
      redis_memory    => '112m',
      redis_ip        => '0.0.0.0',
      redis_port      => 6380,
      redis_mempolicy => 'allkeys-lru',
      redis_timeout   => 0,
      redis_nr_dbs    => 2,
      redis_loglevel  => 'warning',
      running         => true,
      enabled         => true
  }
}

###Run highly available on different hosts

As example of running a high availability cluster with authentication enabled.

node 'redis-master.my.domain' {

  # install latest stable build.
  class { 'redis::install': }

  redis::server {
    'master':
      redis_memory               => '1g',
      redis_ip                   => '0.0.0.0',
      redis_port                 => 6379,
      running                    => true,
      enabled                    => true,
      requirepass                => 'some_really_long_random_password',
      client_output_buffer_limit => {
        'normal' => '0 0 0',
        'slave'  => '500000000 300000000 60',
      },
  }
}

node 'redis-slave.my.domain' {

  # install latest stable build.
  class { 'redis::install': }

  redis::server {
    'slave':
      redis_memory    => '1g',
      redis_ip        => '0.0.0.0',
      redis_port      => 6379,
      running         => true,
      enabled         => true,
      requirepass     => 'some_really_long_random_password',
      slaveof         => 'redis-master.my.domain 6379',
      masterauth      => 'some_really_long_random_password',
  }
}

###Create a cluster-enable instance

Please note that right now you can only create cluster-enabled instances but you cannot configure a Redis Cluster only with this module. You should still use redis-trib.rb from Redis source distribution or configure it by hand with redis cluster commands. Moreover, the cluster mode will be enabled only for Redis >= 3.0

A simple example of a cluster-enabled instance, with a timeout of 5 seconds to detect if another node is dead.

node 'redis-cluster.my.domain' {

  # install latest stable build.
  class { 'redis::install': }

  redis::server {
    'cluster-instance':
      redis_memory         => '1g',
      redis_ip             => '0.0.0.0',
      redis_port           => 6379,
      running              => true,
      enabled              => true,
      cluster_enabled      => true,
      cluster_node_timeout => '5000',
  }
}

Example using Hiera

redis::install::redis_package: true
redis::install::redis_version: '2:2.8.17-1+deb8u1'
redis::servers:
  'name_server':
    requirepass: 'strongpass'
    enabled: true
    redis_ip: '0.0.0.0'
    redis_port: '6800'
    redis_log_dir: '/var/log/redis/'

###Setting up sentinel with two monitors

You can create multiple sentinels on one node. But most of the time you will want to create a sentinel with one or more monitors configured.

node 'sentinel.my.domain' {

  # install latest stable build.
  class { 'redis::install': redis_version => '2.8.8' }

  redis::sentinel {'clusters':
    monitors => {
      'mymaster' => {
        master_host             => '127.0.0.1',
        master_port             => 6378,
        quorum                  => 2,
        down_after_milliseconds => 30000,
        parallel-syncs          => 1,
        failover_timeout        => 180000
      },
      'securetRedisCluster' => {
        master_host             => '10.20.30.1',
        master_port             => 6379,
        quorum                  => 2,
        down_after_milliseconds => 30000,
        parallel-syncs          => 5,
        failover_timeout        => 180000,
        auth-pass => 'secret_Password',
        notification-script => '/tmp/notify.sh',
        client-reconfig-script => '/tmp/reconfig.sh'
      }
    }
  }

##Usage

###Classes and Defined Types

This module compiles and installs redis with the class redis::install. The redis service(s) are configured with the defined type redis::server.

####Class: redis::install

This class downloads, compiles and installs redis. It does not configure any redis services. This is done by defined type redis::server.

Parameters within redis::install:

#####redis_version

The redis version to be installed. By default, the latest stable build will be installed.

#####redis_build_dir

Default is '/opt/' (string) The dir to store redis source code. This will result in a directoy like '/opt/redis-2.8.8/'

#####redis_install_dir

Default is '/usr/bin' (string). The dir to which the newly built redis binaries are copied.

#####redis_user

Redis system user. Default: undef (string) Default 'undef' results to 'root' as redis system user

Some redis install packages create the redis system user by default (at least SLES and Ubuntu provide redis install packages). Normally the log directory and the pid directory are created also by the redis install package. Therefor, these values must be adjusted too.

#####redis_group

Redis system group. Default: undef (string) Default 'undef' results to 'root' as redis system group

#####download_base

Url where to find the source tar.gz. Default value is 'http://download.redis.io/releases'

####Defined Type: redis::server

Used to configure redis instances. You can setup multiple redis servers on the same node. See the setup examples.

**Parameters within redis::server

#####redis_name

Name of Redis instance. Default: call name of the function. The name is used to create the init script(s), which follows the pattern redis-server_${redis_name}

#####redis_memory

Default is '100mb' (string). Sets amount of memory used. eg. 100mb or 4g.

#####redis_ip

Default is '127.0.0.1' (string). Listen IP of redis.

#####redis_port

Listen port of Redis. Default: 6379

#####redis_usesocket

To enable unixsocket options. Default: false

#####redis_socket

Unix socket to use. Default: /tmp/redis.sock

#####redis_socketperm

Permission of socket file. Default: 755

#####redis_mempolicy

Algorithm used to manage keys. See Redis docs for possible values. Default: allkeys-lru

#####redis_memsamples

Number of samples to use for LRU policies. Default: 3

#####redis_timeout

Default: 0

#####redis_nr_dbs

Number of databases provided by redis. Default: 1

#####redis_dbfilename

Name of database dump file. Default: dump.rdb

#####redis_dir

Default is '/var/lib' (string) Path for persistent data. Path is <redis_dir>/redis_<redis_name>/.

#####redis_pid_dir

Default is '/var/run' (string). Path for pidfile. Full pidfile path is <redis_pid_dir>/redis_<redis_name>.pid.

#####redis_log_dir

Default is '/var/log' (string). Path for log. Full log path is <redis_log_dir>/redis_<redis_name>.log.

#####redis_loglevel

Loglevel of Redis. Default: 'notice' (string)

#####running

Configure if Redis should be running or not. Default: true (boolean)

#####enabled

Configure if Redis is started at boot. Default: true (boolean)

#####requirepass

Supply a password if you want authentication with Redis. Default: undef (string)

#####maxclients

Max clients of Redis instance. Default: undef (number)

#####appendfsync_on_rewrite

Configure the no-appendfsync-on-rewrite variable. Set to yes to enable the option. Defaults off. Default: false (boolean)

#####aof_rewrite_percentage

Configure the percentage size difference between the last aof filesize and the newest to trigger a rewrite. Default 100

#####aof_rewrite_minsize

Configure the minimum size in mb of the aof file to trigger size comparisons for rewriting. Default: 64

#####redis_appendfsync

Configure the value for when an fsync should happen. Values are either everysec, always, or no. Default: everysec

#####redis_append_enable

Enable or disable the appendonly file option. Default: false (boolean)

#####redis_enabled_append_file

Enable custom append file. Default: false (boolean)

#####redis_append_file

Define the path for the append file. Optional. Default: undef

#####save

Configure Redis save snapshotting. Example: [[900, 1], [300, 10]]. Default: []

#####force_rewrite

Boolean. Default: false

Configure if the redis config is overwritten by puppet followed by a restart. Since redis automatically rewrite their config since version 2.8 setting this to true will trigger a redis restart on each puppet run with redis 2.8 or later.

#####client_output_buffer_limit

Hash containing 3 possible classes as keys (normal, slave, pubsub) and with the values set to the hard limit, soft limit and seconds. Default: empty

#####manage_logrotate

Configure logrotate rules for redis server. Default: true

High Availability Options

#####slaveof

Configure Redis Master on a slave. Default: undef (string)

#####masterauth

Password used when connecting to a master server which requires authentication. Default: undef (string)

#####slave_server_stale_data

Configure Redis slave to server stale data. Default: true (boolean)

#####slave_read_only

Configure Redis slave to be in read-only mode. Default: true (boolean)

#####repl_timeout

Configure Redis slave replication timeout in seconds. Default: 60 (number)

#####repl_backlog_size

Configure Redis slave backlog size in bytes. Default: undef

#####repl_ping_slave_period

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

Cluster Options

#####cluster_enabled

Enable Redis Cluster. Supported only in Redis 3.x. Default: false

#####cluster_node_timeout

Timeout in ms to declare a node as failed.

#####cluster_slave_validity_factor

Configure slave validity factor. Please read the Redis documentation to learn more about this parameter.

#####cluster_migration_barrier

Slaves migrate to orphaned masters only if there are still at least this given number of other working slaves for their old master.

#####cluster_require_full_coverage

By default Redis Cluster nodes stop accepting queries if they detect there is at least an hash slot uncovered.

####Defined Type: redis::sentinel

Used to configure sentinel instances. You can setup multiple sentinel servers on the same node. And you can configure multiple monitors within a sentinel. See the setup examples.

**Parameters within redis::sentinel

#####sentinel_name

Name of Redis instance. Default: call name of the function. The name is used to create the init script(s), which follows the pattern redis-sentinel_${sentinel_name}

#####sentinel_ip

Listen IP of sentinel. Default: 6379

#####sentinel_port

Listen port of sentinel. Default: 6379

#####sentinel_log_dir

Default is '/var/log' (string). Path for log. Full log path is sentinel_log_dir/sentinel_sentinel_name.log.

#####sentinel_pid_dir

Default is '/var/run' (string). Path for pid file. Full pid file path is sentinel_pid_dir/sentinel_sentinel_name.pid.

#####sentinel_run_dir

Default: /var/run/redis (string) Since sentinels automatically rewrite their config since version 2.8 the puppet managed config will be copied to this directory and than sentinel will start with this copy.

#####monitors

Default is

{
  'mymaster' => {
    master_host             => '127.0.0.1',
    master_port             => 6379,
    quorum                  => 2,
    down_after_milliseconds => 30000,
    parallel-syncs          => 1,
    failover_timeout        => 180000,
    ### optional
    auth-pass => 'secret_Password',
    notification-script => '/var/redis/notify.sh',
    client-reconfig-script => '/var/redis/reconfig.sh'
  },
}

Hashmap of monitors.

#####running

Configure if Redis should be running or not. Default: true (boolean)

#####enabled

Configure if Redis is started at boot. Default: true (boolean)

#####force_rewrite

Boolean. Default: false

Configure if the sentinels config is overwritten by puppet followed by a sentinel restart. Since sentinels automatically rewrite their config since version 2.8 setting this to true will trigger a sentinel restart on each puppet run with redis 2.8 or later.

#####manage_logrotate

Configure logrotate rules for redis server. Default: true

##Requirements

###Modules needed:

stdlib by puppetlabs

###Software versions needed:

facter > 1.6.2 puppet > 2.6.2

##Limitations

This module is tested on CentOS 6.5 and Debian 7 (Wheezy) and should also run without problems on

  • RHEL/CentOS/Scientific 6+
  • Debian 6+
  • Ubunutu 10.04 and newer
  • SLES 11 SP3

Limitation on SLES:

  • Installation from source is not tested
  • Redis sentinel configuration/management is not tested

##Contributing

Echocat modules are open projects. So if you want to make this module even better, you can contribute to this module on Github.

puppet-redis's People

Contributors

dwerder avatar voroniys avatar infraded avatar mwillson2 avatar vide avatar huandu avatar obliadp avatar matthiaswiesner avatar quixoten avatar bleuchtang avatar rubyisbeautiful avatar cdenneen avatar bovy89 avatar vchan-cylance avatar tomeklaskarzewski avatar zbstof avatar buzzdeee avatar pwx21 avatar pbrit avatar joshbeard avatar hskwirblies avatar barruumrex avatar derdanne avatar pulyaevskiy avatar

Watchers

James Cloos avatar Bill Moritz avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.