Dans cet article, nous allons voir comment configurer Redis avec les réplications main / repliquat et avec de la haute disponibilité grâce à Redis Sentinel. Nous allons faire cette configuration sur docker-compose.
Redis est une base de données clé/valeur, très populaire parmi les développeurs pour la mise en cache.
Redis Sentinel offre une haute disponibilité pour Redis. Concrètement, cela signifie qu’en utilisant Sentinel, vous pouvez créer un déploiement Redis qui résiste sans intervention humaine à certains types de pannes.
Docker-compose est un outil permettant de définir et d’exécuter des applications Docker multi-conteneurs. Avec Compose, vous utilisez un fichier YAML pour configurer les services de votre application. Ensuite, avec une seule commande, vous créez et démarrez tous les services à partir de votre configuration.
Comment Redis Sentinel fonctionne

Redis Sentinel vérifie toujours les instances MAIN et REPLICATE dans le cluster Redis. Si Redis Sentinel détecte une défaillance dans le nœud MAIN dans un cluster donné, il démarrera un processus de basculement. Par conséquent, Redis Sentinel choisit une instance REPLICATE et la promeut en MAIN.
En concret, quand le Redis MAIN tombe, les sentinelles vont le détecter et vont élire le nouveau MAIN. Votre application ne verra pas la différence, car elle communique avec les sentinelles.
Redis Sentinel est très robuste car c’est un système distribué. Plusieurs sentinelles doivent s’accorder pour la détection de l’indispo de Redis MAIN. Le quorum est là pour l’élection du nouveau MAIN.
La valeur du quorum correspond au nombre de sentinelles qui doivent s’accorder sur le fait que le MAIN n’est pas joignable. Cependant, le quorum n’est utilisé que pour détecter l’échec. Afin d’effectuer réellement un basculement, l’une des sentinelles doit être élue chef de file pour le basculement et être autorisée à continuer. Cela ne se produit qu’avec le vote de la majorité des processus Redis Sentinel.

Configuration Redis docker-compose
version: '3.7'
services:
redis-main:
image: redis:alpine
command: redis-server --requirepass ${REDIS_PASS}
networks:
kiora_net:
ipv4_address: 172.22.0.4
restart: always
redis-replicate:
image: redis:alpine
command: redis-server --masterauth ${REDIS_PASS} --slaveof 172.22.0.4 6379
links:
- redis-main
networks:
- kiora_net
redis-sentinel:
image: redis
command: >
bash -c "echo 'port 26379' > sentinel.conf &&
echo 'dir /tmp' >> sentinel.conf &&
echo 'sentinel monitor primary 172.22.0.4 6379 2' >> sentinel.conf &&
echo 'sentinel down-after-milliseconds primary 5000' >> sentinel.conf &&
echo 'sentinel parallel-syncs primary 1' >> sentinel.conf &&
echo 'sentinel failover-timeout primary 5000' >> sentinel.conf &&
cat sentinel.conf &&
redis-server sentinel.conf --sentinel"
ports:
- "26379-26385:26379"
links:
- redis-main
- redis-replicate
networks:
- kiora_net
networks:
kiora_net:
driver: bridge
ipam:
config:
- subnet: 172.22.0.0/24
Ici nous allons créer 3 différents services :
- redis-main: qui va démarrer le Redis MAIN, avec un mot de passe
- redis-replicate: qui va démarrer un répliquât et se connecter au Redis MAIN avec un mot de passe
- redis-sentinel: qui va démarrer un Redis sentinel et se connecter au Redis MAIN.
Grâce à docker-compose, nous allons générer plusieurs instances de répliquâts et de sentinelles : docker-compose up -d --scale redis-replicat=2 --scale redis-sentinel=3
Et voilà , vous avez une configuration 1 main, 2 répliquâts et 3 sentinelles.