Multi-servidor
O QuestsTracker suporta sincronizacao multi-servidor via Redis. Esta pagina explica como configurar e manter uma implantacao multi-servidor.
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
| Componente | Versao | Descricao |
|---|---|---|
| Redis | 6.0+ | Servidor de cache e mensageria Pub/Sub |
| MySQL/MariaDB | 8.0+ / 10.5+ | Banco de dados compartilhado (configurado no BetonQuest) |
| Rede | — | Conexao 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"
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:
| Canal | Descricao |
|---|---|
quest-updates | Mudancas de status (ativacao, conclusao, progresso) |
quest-purge | Limpeza de dados de jogador para um pacote |
Ciclo de sincronizacao
- Um jogador conclui uma quest no Servidor 1
- O Servidor 1 atualiza o banco de dados
- O Servidor 1 publica uma mensagem no canal
quest-updates - O Servidor 2 e o Servidor 3 recebem a mensagem
- Eles invalidam seu cache local para esse jogador
- A proxima leitura utiliza os dados atualizados do BDD
Sistema de heartbeat
Quando um jogador muda de servidor:
- O jogador se desconecta do Servidor 1
- Os dados Redis permanecem validos por 2 minutos (heartbeat)
- O jogador se conecta ao Servidor 2
- O Servidor 2 recupera os dados do Redis (cache L2 — rapido)
- 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:
| Nivel | Tipo | Latencia | TTL | Descricao |
|---|---|---|---|---|
| L1 | Caffeine (local) | Sub-milissegundo | 1-2 min | Cache em memoria em cada servidor |
| L2 | Redis (distribuido) | ~1 ms | 2 min | Cache compartilhado entre servidores |
Ordem de leitura
L1 (local) → L2 (Redis) → Banco de dados
- L1 — Cache local em memoria (o mais rapido)
- L2 — Cache Redis distribuido (se L1 falhar)
- 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:
- Verifique se o Redis esta iniciado:
redis-cli ping(deve responderPONG) - Verifique o firewall: a porta 6379 deve estar aberta entre os servidores
- Verifique a senha no
config.yml - 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:
- Verifique se todos os servidores apontam para o mesmo Redis:
/kgquests redis - Verifique se todos os servidores usam o mesmo BDD do BetonQuest
- Force uma atualizacao:
/kgquests refresh <jogador> - Verifique o circuit breaker nos logs
Latencia elevada
Sintoma: O menu ou o scoreboard esta lento
Solucoes:
- Verifique a latencia Redis:
/kgquests benchmark - Verifique a latencia BDD:
/kgquests health - Coloque o Redis na mesma rede que seus servidores Minecraft (latencia < 1ms ideal)
- 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.ymlequests_config.yml
Veja tambem
- Instalacao — Configuracao inicial do Redis
- Configuracao — Referencia das chaves Redis
- Solucao de problemas — Problemas de conexao