Aller au contenu principal

Multi-serveur

QuestsTracker supporte la synchronisation multi-serveur via Redis. Cette page explique comment configurer et maintenir un deploiement multi-serveur.

Serveur unique ?

Si vous n'avez qu'un seul serveur, laissez redis.enabled: false dans votre config.yml. Le plugin fonctionne parfaitement sans Redis.

Architecture​

Serveur 1 (Survie)     Serveur 2 (Aventure)     Serveur 3 (Event)
| | |
└───────────┬───────────┘───────────────────────┘
|
Redis Server
|
MySQL / MariaDB

Tous les serveurs partagent :

  • La meme base de donnees MySQL/MariaDB (via la configuration BetonQuest)
  • Le meme serveur Redis pour la synchronisation en temps reel

Prerequis​

ComposantVersionDescription
Redis6.0+Serveur de cache et messagerie Pub/Sub
MySQL/MariaDB8.0+ / 10.5+Base de donnees partagee (configuree dans BetonQuest)
Reseau—Connexion entre tous les serveurs, Redis et la BDD

Configuration Redis​

Installation de Redis​

# Ubuntu/Debian
sudo apt update && sudo apt install redis-server

# CentOS/RHEL
sudo yum install redis

# Docker
docker run -d --name redis -p 6379:6379 redis:latest

Securiser Redis​

Pour un deploiement en production :

# /etc/redis/redis.conf
requirepass votre_mot_de_passe_redis
bind 0.0.0.0 # Ou l'IP specifique du serveur

Configuration du plugin​

Sur chaque serveur, configurez config.yml :

redis:
enabled: true
host: "adresse-redis"
port: 6379
password: "votre_mot_de_passe_redis"
Configuration identique

Tous les serveurs doivent pointer vers le meme serveur Redis et la meme base de donnees BetonQuest.

Fonctionnement de la synchronisation​

Canaux Redis Pub/Sub​

Le plugin utilise deux canaux de communication :

CanalDescription
quest-updatesChangements de statut (activation, completion, progression)
quest-purgePurge de donnees joueur pour un package

Cycle de synchronisation​

  1. Un joueur termine une quete sur le Serveur 1
  2. Le Serveur 1 met a jour la base de donnees
  3. Le Serveur 1 publie un message sur le canal quest-updates
  4. Le Serveur 2 et le Serveur 3 recoivent le message
  5. Ils invalident leur cache local pour ce joueur
  6. La prochaine lecture utilise les donnees a jour depuis la BDD

Systeme de heartbeat​

Quand un joueur change de serveur :

  1. Le joueur se deconnecte du Serveur 1
  2. Les donnees Redis restent valides pendant 2 minutes (heartbeat)
  3. Le joueur se connecte au Serveur 2
  4. Le Serveur 2 recupere les donnees depuis Redis (cache L2 — rapide)
  5. Pas besoin de recharger depuis la base de donnees

Si le joueur ne se reconnecte pas dans les 2 minutes, les donnees Redis expirent et sont rechargees depuis la BDD a la prochaine connexion.

Cache a deux niveaux​

Le plugin utilise un systeme de cache a deux niveaux pour des performances optimales :

NiveauTypeLatenceTTLDescription
L1Caffeine (local)Sub-milliseconde1-2 minCache memoire sur chaque serveur
L2Redis (distribue)~1 ms2 minCache partage entre serveurs

Ordre de lecture​

L1 (local) → L2 (Redis) → Base de donnees
  1. L1 — Cache local en memoire (le plus rapide)
  2. L2 — Cache Redis distribue (si L1 miss)
  3. BDD — Source de verite (si L2 miss)

Quand une donnee est chargee depuis la BDD, elle est automatiquement mise en cache dans L1 et L2.

Mecanismes de protection​

Circuit breaker​

Si Redis devient indisponible :

  • Apres 3 echecs consecutifs, le circuit breaker s'active
  • Les operations Redis echouent silencieusement (pas de spam d'erreurs)
  • Le plugin fonctionne en mode BDD uniquement
  • Cooldown de 30 secondes avant de retenter
  • Quand Redis redevient disponible, la synchronisation reprend automatiquement

Rate limiting​

Les publications Redis sont limitees a 100ms de debounce par joueur pour eviter de surcharger le serveur Redis avec des mises a jour rapides.

Pool de connexions​

  • Maximum : 128 connexions
  • Minimum idle : 16 connexions
  • Test on borrow/return pour la fiabilite

Diagnostics​

Verifier la connexion Redis​

/kgquests redis

Affiche :

  • Statut de connexion (connecte/deconnecte)
  • Nombre de cles en cache (progression, tracking, statuts)
  • Total des cles

Verifier le cache d'un joueur​

/kgquests redis <joueur>

Affiche :

  • Existence et TTL des cles de progression
  • Existence et TTL des cles de tracking
  • Nombre de cles de statut
  • Alerte si des cles sont manquantes

Statistiques de performance​

/kgquests stats

Affiche les taux de hit par cache (L1 et L2).

Sante globale​

/kgquests health

Verifie tous les composants : BDD, Redis, cache, scoreboard.

Problemes courants​

Redis inaccessible​

Symptome : /kgquests redis affiche "Deconnecte"

Solutions :

  1. Verifiez que Redis est demarre : redis-cli ping (doit repondre PONG)
  2. Verifiez le firewall : le port 6379 doit etre ouvert entre les serveurs
  3. Verifiez le mot de passe dans config.yml
  4. Verifiez les logs serveur pour les erreurs de connexion

Donnees desynchronisees entre serveurs​

Symptome : Les quetes ne se mettent pas a jour quand un joueur change de serveur

Solutions :

  1. Verifiez que tous les serveurs pointent vers le meme Redis : /kgquests redis
  2. Verifiez que tous les serveurs utilisent la meme BDD BetonQuest
  3. Forcez un refresh : /kgquests refresh <joueur>
  4. Verifiez le circuit breaker dans les logs

Latence elevee​

Symptome : Le menu ou le scoreboard est lent

Solutions :

  1. Verifiez la latence BDD : /kgquests health
  2. Placez Redis sur le meme reseau que vos serveurs Minecraft (latence < 1ms ideale)
  3. Verifiez les taux de hit cache : /kgquests stats

Recommandations production​

Performance​

  • Placez Redis sur le meme reseau que vos serveurs Minecraft (latence < 1ms)
  • Utilisez MariaDB plutot que MySQL pour de meilleures performances
  • Surveillez les taux de hit avec /kgquests stats (objectif : >95%)

Haute disponibilite​

  • Configurez Redis Sentinel ou Redis Cluster pour la redondance
  • Utilisez un replica MySQL/MariaDB pour les sauvegardes
  • Monitorez les connexions avec /kgquests health

Sauvegarde​

  • Sauvegardez regulierement la BDD MySQL/MariaDB
  • Redis n'a pas besoin d'etre sauvegarde (les donnees sont dans la BDD)
  • Exportez votre config.yml et quests_config.yml

Voir aussi​