redis_docker

Les sentinelles Redis avec docker-compose

Spread the love

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

Schéma Redis Sentinel main répliquât

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.

Schéma Redis config serveur
Exemple d’installation sur une infrastructure

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.

chevron_left
chevron_right

Laisser un commentaire

%d blogueurs aiment cette page :