Déployer Redis Sentinel HA sur Kubernetes architecture replication et persistance
Introduction Redis (REmote DIctionary Server) est un système de base de données in-memory (en mémoire vive) open source, souvent utilisé comme : cache distribué, streaming engine message broker, db…

Introduction
Redis (REmote DIctionary Server) est un système de base de données in-memory (en mémoire vive) open source, souvent utilisé comme :
-
cache distribué,
-
streaming engine
-
message broker,
-
db NoSQL clé-valeur ultra rapide.
Il est extrêmement populaire grâce à ses performances, sa simplicité, et son écosystème riche. Mais Redis en mode standalone (instance unique) présente une faiblesse :
Aucune tolérance aux pannes. Si l’instance Redis tombe, tout s’arrête.
Redis Sentinel est un composant officiel de Redis conçu pour gérer la haute disponibilité.
Il remplit trois rôles principaux :
- Surveillance (Monitoring)
Sentinel surveille les instances Redis masters et replicas. Il s’assure qu'elles sont accessibles et fonctionnent correctement.
- Notification
Si une instance devient indisponible (par exemple si le master tombe), Sentinel émet une alerte.
- Failover automatique
Si le master Redis ne répond plus, Sentinel élit automatiquement un nouveau master parmi les replicas et met à jour sa configuration. Cela permet au cluster redis de continuer à lire et écrire sans interruption.
Sentinel fonctionne comme un mini-cluster de gestion, composé de plusieurs instances Sentinel, pour garantir la tolérance aux pannes et éviter les décisions prises unilatéralement (quorum).
Pourquoi ne pas utiliser un simple Redis en mode standalone ?
Redis seul, c’est rapide, mais si le pod ou le nœud tombe, tout s’arrête. Avec Sentinel :
-
Pas besoin d’intervention manuelle pour restaurer la production
-
Les bascules sont automatiques
-
Vous gagnez en résilience et disponibilité
Dans cet article, nous alloons déployer Redis Sentinel sur un cluster Kubernetes à l’aide du Helm Chart Bitnami.
Prérequis
Avant de commencer, il faut :
-
Un cluster Kubernetes fonctionnel
-
Helm installé sur votre poste (helm version)
- Créer le namesapce pour redis
kubectl create namespace redis-cluster
- Créer le secret pour redis root password
apiVersion: v1
kind: Secret
metadata:
name: redis-root-secret
namespace: redis-cluster
stringData:
redis-root-password: fddaad00d6c9485KD!@jdlfd
- fichier redis-values.yaml
global:
defaultStorageClass: "local-path-rwx"
architecture: replication
auth:
enabled: true
sentinel: true
existingSecret: "redis-root-secret"
existingSecretPasswordKey: "redis-root-password"
usePasswordFiles: true
# extraDeploy:
# - apiVersion: secrets.hashicorp.com/v1beta1
# kind: VaultStaticSecret
# metadata:
# name: vault-ss-redis-dev # ss pour static secret
# namespace: redis-cluster
# annotations:
# "helm.sh/hook": pre-install,pre-upgrade,pre-rollback
# "helm.sh/hook-weight": "-10"
# spec:
# # vaultAuthRef: default # dans les helm values on a activé le defaultAuthMethod
# type: kv-v2
# mount: kv-rke2-tools-dev
# path: databases/no-sql/redis-dev
# refreshAfter: 60s # toutes les 60s vso synchronise avec vault
# destination:
# create: true
# name: redis-root-secret
# type: Opaque
# transformation:
# excludeRaw: true # la clé _raw n'apparaitra pas dans le secret k8s
master:
count: 1
resources:
requests:
cpu: 200m
memory: 512Mi
limits:
cpu: 1
memory: 1024Mi
persistence:
enabled: true
accessModes:
- ReadWriteOnce
size: 1Gi
persistentVolumeClaimRetentionPolicy:
enabled: true
whenScaled: Retain
whenDeleted: Retain
pdb:
create: true
maxUnavailable: "1"
replica:
replicaCount: 3
resources:
requests:
cpu: 200m
memory: 512Mi
limits:
cpu: 1
memory: 1024Mi
persistence:
enabled: true
accessModes:
- ReadWriteOnce
size: 1Gi
persistentVolumeClaimRetentionPolicy:
enabled: true
whenScaled: Retain
whenDeleted: Retain
service:
type: ClusterIP
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 11
targetCPU: "80"
targetMemory: "80"
pdb:
create: true
maxUnavailable: "1"
sentinel:
enabled: true
downAfterMilliseconds: 5000 # 5s
failoverTimeout: 30000 # 30s
service:
type: LoadBalancer
loadBalancerIP: 10.10.10.23
resources:
requests:
cpu: 200m
memory: 512Mi
limits:
cpu: 1
memory: 1024Mi
metrics:
enabled: false
serviceMonitor:
enabled: false
- Deployer le closter
helm upgrade --install redis-sentinnel oci://registry-1.docker.io/bitnamicharts/redis -n redis-cluster -f redis-values.yaml


Commentaires
Aucun commentaire pour le moment.