O maior portal de MU Online do Brasil — desde 2003
Tutorial Avançado Tutoriais

Como Balancear Carga entre Múltiplos Servidores de MU Online

Aprenda a distribuir jogadores entre múltiplos GameServers usando ConnectServer, configurando regras de roteamento, limites de capacidade e failover automático.

EQ Equipe ViciadosMU · Atualizado em 3 jul 2026 · ⏱ 12 min de leitura

Visão Geral da Arquitetura Multi-Servidor

Balancear carga em servidores de MU Online privados significa distribuir jogadores entre múltiplos GameServers através de um único ponto de entrada: o ConnectServer. Quando bem configurado, isso aumenta a capacidade total de jogadores simultâneos, reduz lag e garante que nenhum servidor individual fique sobrecarregado.

A arquitetura padrão funciona assim:

Cliente MU Online
       |
       v
ConnectServer (porta 44405)
       |
       +---> GameServer 0 (porta 55901) — Servidor 1 (ex: Lorencia)
       +---> GameServer 1 (porta 55902) — Servidor 2 (ex: Devias)
       +---> GameServer 2 (porta 55903) — Servidor 3 (ex: Noria)
       |
       v
DataServer (porta 55557) — Banco de dados compartilhado
Nota: Todos os GameServers compartilham o mesmo banco de dados SQL Server. O DataServer atua como intermediário entre os GameServers e o SQL Server. Em configurações Season 6 EP3, o DataServer é obrigatório.

Pré-Requisitos

Antes de começar, certifique-se de ter:

  • SQL Server 2008/2012/2014 instalado e com o banco MuOnline funcional
  • Pelo menos um GameServer funcional como base
  • Acesso à pasta raiz do servidor (ex: C:\MuServer\)
  • Portas disponíveis no firewall: 44405 (ConnectServer), 55901-5590X (GameServers), 55557 (DataServer)

Passo 1: Configurar o ConnectServer para Múltiplos GameServers

O arquivo principal de configuração fica em ConnectServer\ConnectServer.cfg. Abra-o e localize a seção de servidores:

[ServerInfo]
ServerCount = 3

[ServerInfo0]
ServerCode    = 0
ServerName    = Lorencia
ServerIp      = 127.0.0.1
ServerPort    = 55901
ServerType    = 0
MaxConnect    = 1000
CurrentConnect= 0
ShowYn        = 1

[ServerInfo1]
ServerCode    = 1
ServerName    = Devias
ServerIp      = 127.0.0.1
ServerPort    = 55902
ServerType    = 0
MaxConnect    = 1000
CurrentConnect= 0
ShowYn        = 1

[ServerInfo2]
ServerCode    = 2
ServerName    = Noria
ServerIp      = 127.0.0.1
ServerPort    = 55903
ServerType    = 0
MaxConnect    = 500
CurrentConnect= 0
ShowYn        = 1
Dica: Use ServerType = 1 para marcar um servidor como "PVP exclusivo" na lista de canais. Isso aparece visualmente diferente para o jogador na tela de seleção de servidor.

Parâmetros críticos:

CampoDescrição
ServerCodeID único do servidor (0, 1, 2...) — deve coincidir com o GameServer
MaxConnectLimite máximo de jogadores neste GameServer
ShowYn1 = visível na lista, 0 = oculto (útil para manutenção)

Passo 2: Configurar Cada GameServer

Para cada GameServer, acesse GameServer\GameServer.cfg (ou main.cfg dependendo da versão) e ajuste:

[GameServerInfo]
ServerCode     = 1
ServerName     = Devias
ServerPort     = 55902
MaxUserCount   = 1000
DataServerIp   = 127.0.0.1
DataServerPort = 55557
ConnectServerIp   = 127.0.0.1
ConnectServerPort = 44405
Atenção: O campo ServerCode em cada GameServer deve ser único e idêntico ao ServerCode definido no ConnectServer.cfg. Servidores com códigos duplicados causarão conflitos de autenticação e desconexões aleatórias.

Para o segundo GameServer, copie toda a pasta GameServer\ e renomeie para GameServer1\, GameServer2\, etc. Altere apenas o ServerCode, ServerName e ServerPort em cada cópia.

Estrutura de diretórios resultante:

C:\MuServer\
  ConnectServer\
  DataServer\
  GameServer\        (ServerCode=0, porta 55901)
  GameServer1\       (ServerCode=1, porta 55902)
  GameServer2\       (ServerCode=2, porta 55903)
  EventServer\

Passo 3: Configurar o DataServer para Aceitar Múltiplas Conexões

O DataServer centraliza o acesso ao banco. Abra DataServer\DataServer.cfg:

[DataServerInfo]
ServerPort     = 55557
MaxConnectCount= 15
DBServerIp     = 127.0.0.1
DBServerPort   = 1433
DBName         = MuOnline
DBUserID       = sa
DBPassword     = sua_senha_aqui

Aumente MaxConnectCount para acomodar todos os GameServers (3 GameServers + margem = 15 conexões é suficiente).


Passo 4: Ajustar o Banco de Dados para Multi-Servidor

Com múltiplos GameServers, é necessário garantir que os dados de personagem sejam consistentes. Execute no SQL Server Management Studio:

-- Verificar personagens duplicados entre servidores (não deve existir)
SELECT Name, COUNT(*) as Total
FROM MuOnline.dbo.Character
GROUP BY Name
HAVING COUNT(*) > 1;

-- Adicionar índice para melhorar performance com múltiplos servidores
IF NOT EXISTS (
    SELECT * FROM sys.indexes 
    WHERE name = 'IX_Character_AccountID' 
    AND object_id = OBJECT_ID('dbo.Character')
)
BEGIN
    CREATE INDEX IX_Character_AccountID 
    ON MuOnline.dbo.Character (AccountID);
END

-- Verificar e limpar sessões travadas de outros servidores
UPDATE MuOnline.dbo.MEMB_STAT
SET ConnectStat = 0,
    ServerName  = '',
    IP          = ''
WHERE ConnectStat = 1
AND DATEDIFF(MINUTE, LastConnect, GETDATE()) > 30;
Dica: Execute o script de limpeza de sessões travadas (MEMB_STAT) sempre que reiniciar qualquer GameServer. Sessões presas impedem que o jogador faça login novamente.

Passo 5: Implementar Limites de Capacidade por Canal

Para distribuir jogadores de forma equilibrada, defina limites diferentes por servidor conforme o hardware disponível:

-- Verificar uso atual por servidor (monitoramento)
SELECT 
    ServerName,
    COUNT(*) AS JogadoresOnline
FROM MuOnline.dbo.MEMB_STAT
WHERE ConnectStat = 1
GROUP BY ServerName
ORDER BY JogadoresOnline DESC;

No ConnectServer.cfg, ajuste os MaxConnect proporcionalmente à capacidade de cada máquina. Um servidor com 4GB RAM suporta ~500 jogadores; 8GB RAM suporta ~1000-1200.


Passo 6: Criar Scripts de Inicialização na Ordem Correta

A ordem de inicialização é crítica. Crie um arquivo StartAll.bat em C:\MuServer\:

@echo off
echo Iniciando infraestrutura MU Online...

echo [1/5] Iniciando DataServer...
start "DataServer" /D "C:\MuServer\DataServer\" DataServer.exe
timeout /t 5 /nobreak > nul

echo [2/5] Iniciando ConnectServer...
start "ConnectServer" /D "C:\MuServer\ConnectServer\" ConnectServer.exe
timeout /t 3 /nobreak > nul

echo [3/5] Iniciando GameServer 0...
start "GameServer0" /D "C:\MuServer\GameServer\" GameServer.exe
timeout /t 8 /nobreak > nul

echo [4/5] Iniciando GameServer 1...
start "GameServer1" /D "C:\MuServer\GameServer1\" GameServer.exe
timeout /t 8 /nobreak > nul

echo [5/5] Iniciando GameServer 2...
start "GameServer2" /D "C:\MuServer\GameServer2\" GameServer.exe
timeout /t 5 /nobreak > nul

echo Todos os servidores iniciados!
pause
Atenção: Sempre inicie na ordem: DataServer → ConnectServer → GameServers. Iniciar GameServers antes do DataServer causa erros de conexão e pode corromper dados de sessão.

Passo 7: Configurar Eventos para Multi-Servidor

Eventos como Blood Castle e Devil Square precisam ser configurados em cada GameServer separadamente. Acesse GameServer\Data\Events\ (ou GameServer1\Data\Events\) e ajuste os horários para que não conflitem entre servidores, ou defina o mesmo horário caso queira que o evento rode em paralelo:

; GameServer\Data\Events\BloodCastle.cfg
[BloodCastleInfo]
Enable     = 1
StartTime0 = 0:00
StartTime1 = 2:00
StartTime2 = 4:00
StartTime3 = 6:00
StartTime4 = 8:00
StartTime5 = 10:00
StartTime6 = 12:00
StartTime7 = 14:00
StartTime8 = 16:00
StartTime9 = 18:00
StartTime10= 20:00
StartTime11= 22:00
Nota: Em servidores com alta população, rode eventos como Crywolf e Castle Siege em apenas um GameServer (geralmente o de maior capacidade) para concentrar a ação e evitar mapas vazios nos eventos.

Troubleshooting

Problema: Jogadores ficam presos na tela de seleção de servidor → Verifique se o ServerCode no GameServer.cfg bate exatamente com o ConnectServer.cfg → Confirme que a porta do GameServer está acessível (telnet 127.0.0.1 55902) → Cheque o log em GameServer1\Log\GameServer.log por erros de conexão com DataServer

Problema: Personagem aparece em dois servidores ao mesmo tempo → Execute o UPDATE na tabela MEMB_STAT para limpar sessões duplicadas → Verifique se dois GameServers têm o mesmo ServerCode

Problema: ConnectServer não lista todos os servidores → Confirme que ServerCount no ConnectServer.cfg corresponde ao número real de blocos [ServerInfoX] → Reinicie o ConnectServer após qualquer alteração no .cfg

Problema: Lag alto em um servidor específico → Reduza o MaxConnect desse GameServer temporariamente (via ShowYn=0 e reinicialização) → Verifique uso de CPU/RAM da máquina que hospeda aquele GameServer → Analise consultas lentas no SQL Server com: SELECT TOP 10 * FROM sys.dm_exec_query_stats ORDER BY total_elapsed_time DESC

Perguntas frequentes

Quantos GameServers posso adicionar ao ConnectServer?

Tecnicamente não há limite fixo no ConnectServer padrão, mas servidores Season 6 são testados de forma estável com até 10-15 GameServers. Cada GameServer adicional requer uma entrada separada no ConnectServer.cfg e uma porta TCP/UDP exclusiva (ex: 55901, 55902, 55903...).

O que acontece se um GameServer cair com jogadores conectados?

Os jogadores conectados serão desconectados imediatamente. Para mitigar isso, configure o campo ServerListShowYn=0 no GameServer problemático antes de reiniciá-lo, redirecione novos logins via ConnectServer e implemente monitoramento com reinicialização automática via script batch ou serviço do Windows.

Como faço para que certos canais aceitem apenas VIPs?

No GameServer/Data/ServerInfo.cfg defina o campo MaxConnect para o limite desejado e use regras de acesso por VIP no código do GameServer ou via tabela T_Account no SQL Server, verificando o campo AccountLevel ou memb_grade antes de permitir entrada no canal específico.

É possível ter GameServers em máquinas físicas diferentes?

Sim. O ConnectServer se comunica com GameServers via IP:Porta configurados no ConnectServer.cfg. Cada GameServer pode estar em uma máquina diferente desde que os IPs sejam acessíveis entre si na rede local ou via VPN, e as portas estejam liberadas no firewall (padrão: 55901+, UDP 55557).

EQ

Equipe ViciadosMU

Equipe editorial do ViciadosMU — portal de MU Online no ar desde 2003.

Continue lendo

Artigos relacionados