Aller au contenu principal

Redis central

Version anglaise : en/redis.md.

Rôle (règle 6.2 du kit)​

Redis sert de cache et de coordination temporaire : compteurs de limitation de débit, cache chiffrable par locataire (eai.cache), verrous distribués avec jeton de fencing. Il n'est jamais la seule source de vérité des permissions, suspensions, quotas ou preuves : ces données sont lues dans PostgreSQL. Le test tests/test_core_redis.py::test_sources_of_truth_never_read_from_redis refuse tout import de Redis ou de eai.cache dans ces modules.

Connexion, TLS et ACL​

  • EAI_REDIS_URL=rediss://redis.interne:6390/0, EAI_REDIS_USERNAME=eai, EAI_REDIS_PASSWORD_FILE=/run/secrets/redis-password, EAI_REDIS_TLS_CA_FILE=/etc/eai/redis-ca.pem (certificat serveur vérifié). En prod, le démarrage refuse redis:// et une URL sans mot de passe (fichier).
  • Utilisateur ACL minimal : ACL SETUSER eai on >… ~eai:* +@all -@dangerous (clés préfixées eai:).
  • Clés : eai:c:<locataire>:<espace>:<nom> (cache, TTL obligatoire de 1 s à 7 jours), eai:rl:* (débit, fenêtre d'une minute).
  • /readyz publie redis: {configured, ok, role, error} sans rendre l'instance non prête.

Haute disponibilité​

  • deploy/data/redis (opérateur OT redis-operator) : réplication avec sentinelles et TLS. Après une bascule, le client se reconnecte à la nouvelle primaire ; vérifié avec un vrai redis-server : réplique --replicaof, arrêt de la primaire (le cache répond « absent » sans erreur), promotion REPLICAOF NO ONE, lecture et écriture sur la nouvelle primaire.

Redis indisponible​

  • Cache : lecture = absent, écriture = False, verrou refusé. Limitation de débit : bascule sur les compteurs en mémoire de chaque réplica (journal d'avertissement). L'API continue de servir.

Sauvegarde​

  • Aucune : le contenu se reconstruit. Persistance désactivable.

Tests​

cd services/control-plane && .venv/bin/python -m pytest -q tests/test_core_redis.py (démarre /usr/bin/redis-server sur des ports libres) : TTL, isolation des locataires, entrée chiffrée liée à sa clé, verrou et fencing, débit partagé entre deux instances, réplication et bascule, ACL avec fichier de mot de passe, Redis arrêté.