O maior portal de MU Online do Brasil — desde 2003
Tutorial Intermediário Infra

Como corrigir desync de horário entre servidores de MU Online

Diagnostique e corrija problemas de sincronização de horário entre GameServer, ConnectServer, JoinServer e banco de dados no MU Online, evitando eventos disparando no horário errado e falhas de autenticação.

RO Rodrigo · Atualizado em 14 mar 2016 · ⏱ 12 min de leitura
Resposta rápida

Um servidor de MU Online normalmente distribui suas responsabilidades entre múltiplos processos — GameServer, ConnectServer, JoinServer, DataServer e o banco de dados MySQL/MariaDB — que podem rodar na mesma máquina ou em máquinas/VMs diferentes. Quando o relógio de qualquer um desses componentes fi

Um servidor de MU Online normalmente distribui suas responsabilidades entre múltiplos processos — GameServer, ConnectServer, JoinServer, DataServer e o banco de dados MySQL/MariaDB — que podem rodar na mesma máquina ou em máquinas/VMs diferentes. Quando o relógio de qualquer um desses componentes fica dessincronizado, mesmo por poucos segundos, surgem sintomas confusos: eventos automáticos disparando no horário errado, sessões de autenticação expirando antes do esperado, e logs com timestamps fora de ordem que dificultam qualquer investigação de problema. Este tutorial explica como diagnosticar a causa raiz do desync e corrigi-la de forma permanente, com sincronização automática via NTP e ajustes de fuso horário em cada camada do servidor.

Sintomas comuns de desync de horário

O desync raramente se apresenta como um erro explícito — ele aparece como comportamento estranho e intermitente. Os sinais mais frequentes incluem: Blood Castle ou Devil Square abrindo minutos antes ou depois do horário configurado, jogadores sendo desconectados com "sessão expirada" pouco depois de logar, itens com cooldown baseado em tempo (por exemplo, uso de determinados consumíveis) liberando antes do esperado, e discrepância entre o relógio exibido no cliente do jogo e o horário real do sistema.

Onde o horário é usado dentro da arquitetura do servidor

ComponenteUso de horário/timestampImpacto de um desync
Banco de dados (MySQL/MariaDB)Timestamps de login, criação de personagem, logs de transaçãoRegistros fora de ordem cronológica, auditoria comprometida
GameServerAgendamento de eventos automáticos, cooldowns de itens/habilidadesEventos no horário errado, cooldowns liberando cedo/tarde
JoinServer/ConnectServerValidação de sessão e tokens de autenticaçãoSessões expirando prematuramente ou não expirando
Sistema operacional (host)Relógio de referência para todos os processos acimaPropaga o erro para todas as camadas acima

Diagnosticando a causa raiz

O primeiro passo é isolar onde exatamente está o desvio. Rode o comando de horário em cada máquina/serviço envolvido e compare com uma fonte confiável de tempo (um servidor NTP público, como pool.ntp.org):

# Linux - verificar horário atual do sistema
date
timedatectl status

# Verificar se o serviço de sincronização está ativo
systemctl status systemd-timesyncd
# ou, se usar chrony
chronyc tracking

No Windows (comum em servidores de MU baseados em MuEmu/IGCN):

w32tm /query /status
w32tm /query /peers

Se o desvio (offset) reportado for maior que alguns segundos, ou se o serviço de sincronização estiver inativo, você encontrou a causa provável.

Corrigindo com NTP no Linux

# Instalar chrony (recomendado, mais preciso que ntpd tradicional)
sudo apt install chrony -y

# Configurar servidores NTP confiáveis em /etc/chrony/chrony.conf
# pool pool.ntp.org iburst
# pool a.ntp.br iburst
# pool b.ntp.br iburst

sudo systemctl enable chrony
sudo systemctl restart chrony

# Forçar sincronização imediata
sudo chronyc makestep

Usar servidores NTP brasileiros (a.ntp.br, b.ntp.br, mantidos pelo Observatório Nacional) reduz a latência de sincronização para servidores hospedados no Brasil, comparado a depender apenas de pools genéricos internacionais.

Corrigindo no Windows Server

# Configurar o serviço de horário do Windows para usar NTP
w32tm /config /manualpeerlist:"a.ntp.br,b.ntp.br,pool.ntp.org" /syncfromflags:manual /reliable:YES /update

# Reiniciar o serviço
net stop w32time
net start w32time

# Forçar ressincronização
w32tm /resync /force

Em ambientes com múltiplas VMs Windows no mesmo host físico (comum em setups de MU com GameServer, ConnectServer e JoinServer separados), configure todas para sincronizar com a mesma fonte NTP — misturar fontes diferentes entre VMs do mesmo cluster reintroduz desvios pequenos, mas suficientes para causar os sintomas descritos.

Ajustando o fuso horário da aplicação

Além do relógio do sistema, verifique o fuso horário configurado em cada aplicação. É comum que o GameServer tenha um fuso horário hardcoded na configuração (frequentemente UTC ou GMT-3 para servidores brasileiros) que precisa bater com o fuso do sistema operacional e do banco de dados:

[Config]
TimeZone = America/Sao_Paulo
-- Verificar e ajustar o fuso horário do MySQL
SELECT @@global.time_zone, @@session.time_zone;
SET GLOBAL time_zone = '-03:00';

Se o sistema operacional está em America/Sao_Paulo mas o MySQL está configurado para UTC (+00:00), todos os timestamps gravados no banco terão um deslocamento de 3 horas em relação ao horário local, gerando exatamente os sintomas de "evento no horário errado".

Validando a correção com um teste controlado

  1. Após configurar o NTP e o fuso horário em todos os componentes, reinicie GameServer, ConnectServer, JoinServer e o serviço de banco de dados.
  2. Compare o horário exibido em date/w32tm /query /status em cada máquina — a diferença entre elas deve ser inferior a 1 segundo.
  3. Configure um evento automático de teste (Devil Square, por exemplo) para abrir em 5 minutos e confirme que ele dispara no horário exato.
  4. Verifique um novo registro de login no banco e confirme que o timestamp bate com o horário real do momento do teste.

Monitoramento contínuo para evitar recorrência

Desync de horário tende a voltar gradualmente (drift) mesmo depois de corrigido, especialmente em VMs com relógio de hardware instável. Configure um alerta simples (script cron ou monitoramento de infraestrutura) que compare periodicamente o horário do sistema com uma fonte NTP confiável e notifique a equipe se o desvio ultrapassar um limite (por exemplo, 2 segundos), antes que o problema volte a afetar jogadores.

Erros comuns e soluções

SintomaCausa provávelSolução
Evento abre em horário diferente do anunciadoFuso horário divergente entre GameServer e sistemaAlinhe TimeZone da aplicação com o fuso do SO
Sessões expirando logo após loginDesvio de horário entre JoinServer e ConnectServerSincronize ambos com a mesma fonte NTP
Logs do banco fora de ordem cronológicaMySQL com fuso horário diferente do sistemaAjuste time_zone do MySQL para bater com o SO
Desvio reaparece após semanasServiço de sincronização (NTP/chrony) inativo ou não persistenteHabilite o serviço para iniciar automaticamente no boot
VMs do mesmo cluster com horários diferentesCada VM sincronizando com fonte NTP distintaPadronize todas as VMs para a mesma fonte de sincronização

Checklist de sincronização de horário

  • Horário de cada componente comparado com fonte NTP confiável.
  • Serviço de sincronização (chrony/NTP no Linux, w32time no Windows) ativo e configurado para iniciar no boot.
  • Fuso horário alinhado entre sistema operacional, aplicação (GameServer) e banco de dados.
  • Teste controlado de evento automático confirmando horário correto.
  • Todas as VMs/máquinas do cluster sincronizando com a mesma fonte NTP.
  • Monitoramento contínuo de desvio de horário configurado.

Com o horário sincronizado de forma confiável entre todos os componentes, vale revisar a arquitetura geral do servidor para identificar outros pontos de fragilidade antes que virem incidentes visíveis aos jogadores. Consulte o tutorial de criação de servidor de MU Online para revisar os fundamentos da infraestrutura completa.

Perguntas frequentes

Desync de horário afeta o jogo mesmo se todos os servidores estão na mesma máquina física?

Pode afetar se os processos rodam em containers ou VMs com relógios independentes, ou se algum serviço usa fuso horário diferente na configuração da aplicação mesmo compartilhando o mesmo hardware. Verifique tanto o relógio do sistema operacional quanto o fuso horário configurado em cada aplicação (GameServer, banco de dados).

Como sei se o problema é desync de horário e não outra falha de rede?

Sintomas típicos de desync incluem eventos automáticos (Blood Castle, Devil Square) abrindo em horário diferente do anunciado, tokens de autenticação expirando prematuramente, e discrepância entre o horário exibido no jogo e o horário real. Compare o horário do sistema em cada máquina/serviço com um horário de referência confiável (NTP público) para confirmar.

NTP é obrigatório ou dá para sincronizar manualmente?

Dá para ajustar manualmente uma vez, mas o relógio de qualquer máquina sofre drift (desvio gradual) ao longo do tempo, mesmo poucos segundos por dia. Sem um serviço de sincronização automática como NTP, o desync volta a aparecer em semanas ou meses, exigindo correção manual recorrente.

Desync de horário pode corromper dados do banco?

Diretamente não corrompe os dados, mas pode causar inconsistências lógicas: timestamps de login, cooldowns de itens e registros de eventos podem ficar fora de ordem cronológica, dificultando auditoria e, em casos extremos, permitindo exploits (repetir uma ação que deveria ter cooldown, por exemplo, se o sistema depende só de comparação de timestamp).

Rodar servidores em regiões/data centers diferentes aumenta o risco de desync?

Sim, significativamente. Cada máquina em uma região diferente tem seu próprio relógio de hardware e, se cada uma sincroniza com um servidor NTP diferente ou com frequências diferentes, o desvio entre elas tende a ser maior do que máquinas na mesma rede local sincronizando com a mesma fonte.

RO
Fundador e editor-chefe

Rodrigo mantém o ViciadosMU desde os primórdios do portal. Especialista em criação e administração de servidores de MU Online, história do jogo e a evolução das seasons — escreveu boa parte do acervo antes de 2024.

Continue lendo

Artigos relacionados