Pular para o conteúdo principal

Multi-servidor

O QuestsTracker suporta sincronizacao multi-servidor via Redis. Esta pagina explica como configurar e manter uma implantacao multi-servidor.

Servidor unico?

Se voce tem apenas um servidor, mantenha redis.enabled: false no seu config.yml. O plugin funciona perfeitamente sem Redis.

Arquitetura

Servidor 1 (Survival)     Servidor 2 (Aventura)     Servidor 3 (Evento)
| | |
└───────────┬───────────┘───────────────────────┘
|
Redis Server
|
MySQL / MariaDB

Todos os servidores compartilham:

  • O mesmo banco de dados MySQL/MariaDB (via configuracao do BetonQuest)
  • O mesmo servidor Redis para sincronizacao em tempo real

Pre-requisitos

ComponenteVersaoDescricao
Redis6.0+Servidor de cache e mensageria Pub/Sub
MySQL/MariaDB8.0+ / 10.5+Banco de dados compartilhado (configurado no BetonQuest)
RedeConexao entre todos os servidores, Redis e o BDD

Configuracao do Redis

Instalacao do 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

Proteger o Redis

Para uma implantacao em producao:

# /etc/redis/redis.conf
requirepass sua_senha_redis
bind 0.0.0.0 # Ou o IP especifico do servidor

Configuracao do plugin

Em cada servidor, configure o config.yml:

redis:
enabled: true
host: "endereco-redis"
port: 6379
password: "sua_senha_redis"
Configuracao identica

Todos os servidores devem apontar para o mesmo servidor Redis e o mesmo banco de dados BetonQuest.

Funcionamento da sincronizacao

Canais Redis Pub/Sub

O plugin utiliza dois canais de comunicacao:

CanalDescricao
quest-updatesMudancas de status (ativacao, conclusao, progresso)
quest-purgeLimpeza de dados de jogador para um pacote

Ciclo de sincronizacao

  1. Um jogador conclui uma quest no Servidor 1
  2. O Servidor 1 atualiza o banco de dados
  3. O Servidor 1 publica uma mensagem no canal quest-updates
  4. O Servidor 2 e o Servidor 3 recebem a mensagem
  5. Eles invalidam seu cache local para esse jogador
  6. A proxima leitura utiliza os dados atualizados do BDD

Sistema de heartbeat

Quando um jogador muda de servidor:

  1. O jogador se desconecta do Servidor 1
  2. Os dados Redis permanecem validos por 2 minutos (heartbeat)
  3. O jogador se conecta ao Servidor 2
  4. O Servidor 2 recupera os dados do Redis (cache L2 — rapido)
  5. Nao e necessario recarregar do banco de dados

Se o jogador nao se reconectar dentro de 2 minutos, os dados Redis expiram e sao recarregados do BDD na proxima conexao.

Cache de dois niveis

O plugin utiliza um sistema de cache de dois niveis para desempenho otimo:

NivelTipoLatenciaTTLDescricao
L1Caffeine (local)Sub-milissegundo1-2 minCache em memoria em cada servidor
L2Redis (distribuido)~1 ms2 minCache compartilhado entre servidores

Ordem de leitura

L1 (local) → L2 (Redis) → Banco de dados
  1. L1 — Cache local em memoria (o mais rapido)
  2. L2 — Cache Redis distribuido (se L1 falhar)
  3. BDD — Fonte de verdade (se L2 falhar)

Quando um dado e carregado do BDD, ele e automaticamente colocado em cache no L1 e L2.

Mecanismos de protecao

Circuit breaker

Se o Redis ficar indisponivel:

  • Apos 3 falhas consecutivas, o circuit breaker e ativado
  • As operacoes Redis falham silenciosamente (sem spam de erros)
  • O plugin funciona em modo apenas BDD
  • Cooldown de 30 segundos antes de tentar novamente
  • Quando o Redis voltar a ficar disponivel, a sincronizacao retoma automaticamente

Rate limiting

As publicacoes Redis sao limitadas a 100ms de debounce por jogador para evitar sobrecarregar o servidor Redis com atualizacoes rapidas.

Pool de conexoes

  • Maximo: 128 conexoes
  • Minimo idle: 16 conexoes
  • Teste on borrow/return para confiabilidade

Diagnosticos

Verificar a conexao Redis

/kgquests redis

Exibe:

  • Status da conexao (conectado/desconectado)
  • Numero de chaves em cache (progresso, acompanhamento, status)
  • Total de chaves

Verificar o cache de um jogador

/kgquests redis <jogador>

Exibe:

  • Existencia e TTL das chaves de progresso
  • Existencia e TTL das chaves de tracking
  • Numero de chaves de status
  • Alerta se chaves estiverem ausentes

Estatisticas de desempenho

/kgquests stats

Exibe as taxas de acerto por cache (L1 e L2).

Saude global

/kgquests health

Verifica todos os componentes: BDD, Redis, cache, scoreboard.

Problemas comuns

Redis inacessivel

Sintoma: /kgquests redis exibe "Desconectado"

Solucoes:

  1. Verifique se o Redis esta iniciado: redis-cli ping (deve responder PONG)
  2. Verifique o firewall: a porta 6379 deve estar aberta entre os servidores
  3. Verifique a senha no config.yml
  4. Verifique os logs do servidor para erros de conexao

Dados dessincronizados entre servidores

Sintoma: As quests nao se atualizam quando um jogador muda de servidor

Solucoes:

  1. Verifique se todos os servidores apontam para o mesmo Redis: /kgquests redis
  2. Verifique se todos os servidores usam o mesmo BDD do BetonQuest
  3. Force uma atualizacao: /kgquests refresh <jogador>
  4. Verifique o circuit breaker nos logs

Latencia elevada

Sintoma: O menu ou o scoreboard esta lento

Solucoes:

  1. Verifique a latencia Redis: /kgquests benchmark
  2. Verifique a latencia BDD: /kgquests health
  3. Coloque o Redis na mesma rede que seus servidores Minecraft (latencia < 1ms ideal)
  4. Verifique as taxas de acerto do cache: /kgquests stats

Recomendacoes para producao

Desempenho

  • Coloque o Redis na mesma rede que seus servidores Minecraft (latencia < 1ms)
  • Use MariaDB em vez de MySQL para melhor desempenho
  • Monitore as taxas de acerto com /kgquests stats (objetivo: >95%)

Alta disponibilidade

  • Configure Redis Sentinel ou Redis Cluster para redundancia
  • Use uma replica MySQL/MariaDB para backups
  • Monitore as conexoes com /kgquests health

Backup

  • Faca backup regularmente do BDD MySQL/MariaDB
  • O Redis nao precisa de backup (os dados estao no BDD)
  • Exporte seus arquivos config.yml e quests_config.yml

Veja tambem