Giter Club home page Giter Club logo

redis-cluster's Introduction

redis-cluster

Redis cluster with Docker Compose

Using Docker Compose to setup a redis cluster with sentinel.

This project was inspired by the project of @mdevilliers

Prerequisite

Install Docker and Docker Compose in testing environment.

If you are using Windows, please execute the following command before "git clone" to disable changing the line endings of script files into DOS format:

git config --global core.autocrlf false

Docker Compose template of Redis cluster

The template defines the topology of the Redis cluster:

version: '3.9'

services:
master:
image: redis:latest
container_name: redis-master

slave:
image: redis:latest
container_name: redis-slave
command: redis-server --slaveof redis-master 6379
depends_on:
- master

sentinel:
build:
context: ./sentinel
dockerfile: Dockerfile
container_name: redis-sentinel
environment:
- SENTINEL_DOWN_AFTER=5000
- SENTINEL_FAILOVER=5000
depends_on:
- master
- slave

Notes:

  1. Updated the version format to '3.9'.
  2. Added the container_name parameter for each service to specify container names.
  3. Replaced use of links with depends_on to define dependencies between services.
  4. The Dockerfile path for the sentinel service is specified in the build parameter.
  5. The path to the build context for sentinel services is specified in the context parameter.
  6. The redis:latest image is used instead of a specific version to get the latest available version of Redis.
  7. The declaration of links for the slave service has been removed, since it is already defined in the command section.

Please make sure the Dockerfile path for the sentinel service and the build context (./sentinel) are correctly specified and refer to your project file structure.

There are following services in the cluster:

  • master: Redis master
  • slave: Redis slave
  • sentinel: Redis sentinel

The sentinels are configured with a "mymaster" instance with the following properties:

sentinel monitor mymaster redis-master 6379 2
sentinel down-after-milliseconds mymaster 5000
sentinel parallel-syncs mymaster 1
sentinel failover-timeout mymaster 5000

The details could be found in sentinel/sentinel.conf.

The default values of the environment variables for Sentinel are as following:

  • SENTINEL_QUORUM: 2
  • SENTINEL_DOWN_AFTER: 30000
  • SENTINEL_FAILOVER: 180000

Play with it

Build the sentinel Docker image:

docker compose build .

Start the redis cluster:

docker compose up -d

Check the status of redis cluster:

docker compose ps

The result is:

         Name                        Command               State          Ports        
--------------------------------------------------------------------------------------
rediscluster_master_1     docker-entrypoint.sh redis ...   Up      6379/tcp            
rediscluster_sentinel_1   docker-entrypoint.sh redis ...   Up      26379/tcp, 6379/tcp 
rediscluster_slave_1      docker-entrypoint.sh redis ...   Up      6379/tcp     

Scale out the instance number of sentinel:

docker compose scale sentinel=3

Scale out the instance number of slaves:

docker compose scale slave=2

Check the status of redis cluster:

docker compose ps

The result is:

         Name                        Command               State          Ports        
--------------------------------------------------------------------------------------
rediscluster_master_1     docker-entrypoint.sh redis ...   Up      6379/tcp            
rediscluster_sentinel_1   docker-entrypoint.sh redis ...   Up      26379/tcp, 6379/tcp 
rediscluster_sentinel_2   docker-entrypoint.sh redis ...   Up      26379/tcp, 6379/tcp 
rediscluster_sentinel_3   docker-entrypoint.sh redis ...   Up      26379/tcp, 6379/tcp 
rediscluster_slave_1      docker-entrypoint.sh redis ...   Up      6379/tcp            
rediscluster_slave_2      docker-entrypoint.sh redis ...   Up      6379/tcp            

Execute the test scripts:

./test.sh

to simulate stop and recover the Redis master. And you will see the master is switched to slave automatically.

Or, you can do the test manually to pause/unpause redis server through:

docker pause rediscluster_master_1
docker unpause rediscluster_master_1

And get the sentinel infomation with following commands:

docker exec rediscluster_sentinel_1 redis-cli -p 26379 SENTINEL get-master-addr-by-name mymaster

References

1: https://github.com/mdevilliers/docker-rediscluster
2: https://registry.hub.docker.com/r/bitnami/redis-sentinel
3: https://docs.docker.com/compose/
4: https://www.docker.com

License

Apache 2.0 license

Contributors

redis-cluster's People

Contributors

denverdino avatar tealtail avatar d3adwolf avatar tya avatar newiep avatar

Watchers

cuisongliu avatar  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.