Como configurar subservers e balancear a carga no MU Online
Configure múltiplos servidores (server select) no MU Online — como adicionar sub-servidores, configurar o ConnectServer para múltiplos GameServers, e balancear a carga entre servidores.
Um servidor de MU Online com múltiplos "servers" (como "Servidor 1", "Servidor 2" na tela de seleção) usa o ConnectServer para distribuir os jogadores entre diferentes instâncias do GameServer. Cada instância tem sua própria configuração mas compartilha o mesmo banco de dados.
Um servidor de MU Online com múltiplos "servers" (como "Servidor 1", "Servidor 2" na tela de seleção) usa o ConnectServer para distribuir os jogadores entre diferentes instâncias do GameServer. Cada instância tem sua própria configuração mas compartilha o mesmo banco de dados.
Arquitetura multi-server
BANCO SQL (único)
│
┌──────────┼──────────┐
│ │ │
DataServer DataServer DataServer
│ │ │
JoinServer JoinServer JoinServer
│ │ │
GameServer1 GameServer2 GameServer3
(porta 55901)(porta 55902)(porta 55903)
│ │ │
└──────────┼──────────┘
│
ConnectServer
(porta 44405)
│
JOGADOR
(vê seleção de servidor)
Cada GameServer é uma instância completa com seus próprios processos DataServer e JoinServer. O ConnectServer centraliza as conexões e redireciona cada jogador ao servidor escolhido.
Configurar o ConnectServer para múltiplos GameServers
Arquivo de configuração do ConnectServer
O ConnectServer lê a lista de GameServers de um arquivo de configuração:
ConnectServer/
├── ConnectServer.exe
├── ServerList.txt ← lista de servidores disponíveis
├── ServerListConfig.txt ← configuração alternativa (por distribuição)
└── Setting.xml ← ou arquivo XML de configuração
ServerList.txt — formato
; ServerList.txt
; Formato: Index IP Port Name MaxUsers FillRate
; FillRate: 0=sem jogadores, 30=lotado (valor visual na seleção)
0 127.0.0.1 55901 "Servidor 1 - EXP 100x" 1000 0
1 127.0.0.1 55902 "Servidor 2 - EXP 50x" 1000 0
2 127.0.0.1 55903 "Servidor 3 - PVP" 500 0
; Se os GameServers estão em VPSs diferentes:
0 45.90.100.10 55901 "Server 1" 1000 0
1 45.90.100.11 55901 "Server 2" 1000 0
Setting.xml — formato XML (distribuições mais recentes)
<?xml version="1.0" encoding="utf-8"?>
<ServerList>
<Server>
<ServerCode>0</ServerCode>
<ServerName>Servidor 1 - EXP 100x</ServerName>
<IP>127.0.0.1</IP>
<Port>55901</Port>
<MaxUsers>1000</MaxUsers>
<CurrentUsers>0</CurrentUsers>
<Visible>1</Visible>
</Server>
<Server>
<ServerCode>1</ServerCode>
<ServerName>Servidor 2 - EXP 50x</ServerName>
<IP>127.0.0.1</IP>
<Port>55902</Port>
<MaxUsers>1000</MaxUsers>
<CurrentUsers>0</CurrentUsers>
<Visible>1</Visible>
</Server>
</ServerList>
Configurar múltiplos GameServers na mesma máquina
Para rodar dois GameServers na mesma VPS, cada um precisa de:
- Uma pasta separada;
- Arquivos de configuração próprios (GameServer.ini);
- Uma porta diferente.
Estrutura de pastas
MuServer/
├── Server1/ ← Servidor 1
│ ├── DataServer/
│ │ └── DataServer.ini
│ ├── JoinServer/
│ │ └── JoinServer.ini
│ └── GameServer/
│ ├── GameServer.exe
│ └── GameServer.ini
│
├── Server2/ ← Servidor 2
│ ├── DataServer/
│ │ └── DataServer.ini
│ ├── JoinServer/
│ │ └── JoinServer.ini
│ └── GameServer/
│ ├── GameServer.exe
│ └── GameServer.ini
│
└── ConnectServer/
├── ConnectServer.exe
└── ServerList.txt
GameServer.ini — Servidor 1
[General]
ServerCode=0 ← code do servidor (deve bater com ServerList)
ServerName=Servidor 1
[Network]
GameServerIP=127.0.0.1
GameServerPort=55901 ← porta do GameServer 1
[JoinServer]
JoinServerIP=127.0.0.1
JoinServerPort=55555 ← porta do JoinServer 1 (única por servidor)
[Database]
DSN=MuOnline ← mesmo banco para todos os servidores
GameServer.ini — Servidor 2
[General]
ServerCode=1 ← code diferente
ServerName=Servidor 2
[Network]
GameServerIP=127.0.0.1
GameServerPort=55902 ← porta diferente do Servidor 1
[JoinServer]
JoinServerIP=127.0.0.1
JoinServerPort=55556 ← JoinServer com porta diferente
[Database]
DSN=MuOnline ← mesmo banco
DataServer.ini — Servidor 1
[DataServer]
DataServerPort=55557 ← porta do DataServer 1
[Database]
DSN=MuOnline
DataServer.ini — Servidor 2
[DataServer]
DataServerPort=55558 ← porta diferente
[Database]
DSN=MuOnline ← mesmo banco
JoinServer.ini — Servidor 1
[JoinServer]
JoinServerPort=55555
[DataServer]
DataServerIP=127.0.0.1
DataServerPort=55557
JoinServer.ini — Servidor 2
[JoinServer]
JoinServerPort=55556 ← porta diferente
[DataServer]
DataServerIP=127.0.0.1
DataServerPort=55558
ConnectServer.ini
[ConnectServer]
Port=44405 ← porta única do ConnectServer
[GameServer1]
IP=127.0.0.1
Port=55901
[GameServer2]
IP=127.0.0.1
Port=55902
Configurações de EXP por servidor
Cada GameServer pode ter configurações de EXP diferentes — criando servidores com características distintas:
GameServer.ini — Servidor 1 (EXP alto)
[EXP]
ExpRate=100 ; EXP 100x
MasterExpRate=50 ; ML EXP 50x
EventExpRate=200 ; EXP 200x em eventos
GameServer.ini — Servidor 2 (EXP médio)
[EXP]
ExpRate=50 ; EXP 50x
MasterExpRate=25
EventExpRate=100
Script de inicialização (batch)
Para iniciar todos os servidores na ordem correta:
@echo off
echo Iniciando MultiServer MU Online...
echo.
echo [1/6] Iniciando DataServer - Servidor 1...
start "" "Server1\DataServer\DataServer.exe"
timeout /t 3
echo [2/6] Iniciando DataServer - Servidor 2...
start "" "Server2\DataServer\DataServer.exe"
timeout /t 3
echo [3/6] Iniciando JoinServer - Servidor 1...
start "" "Server1\JoinServer\JoinServer.exe"
timeout /t 3
echo [4/6] Iniciando JoinServer - Servidor 2...
start "" "Server2\JoinServer\JoinServer.exe"
timeout /t 3
echo [5/6] Iniciando GameServer 1...
start "" "Server1\GameServer\GameServer.exe"
timeout /t 5
echo [6/6] Iniciando GameServer 2...
start "" "Server2\GameServer\GameServer.exe"
timeout /t 5
echo [7/7] Iniciando ConnectServer...
start "" "ConnectServer\ConnectServer.exe"
timeout /t 2
echo.
echo Todos os servidores iniciados!
pause
Monitorar jogadores por servidor
-- Jogadores online por servidor (se o GameServer registra no banco)
SELECT MapNumber, COUNT(*) AS Online
FROM Character
WHERE ConnectStat = 1
GROUP BY MapNumber
ORDER BY Online DESC;
-- Ver distribuição entre servidores (tabela de sessão, se existir)
SELECT ServerCode, COUNT(*) AS Online
FROM GameServerSessions -- nome da tabela varia por distribuição
WHERE IsOnline = 1
GROUP BY ServerCode;
-- Total online em todos os servidores
SELECT COUNT(*) AS TotalOnline
FROM Character
WHERE ConnectStat = 1;
Portas que precisam ser abertas no firewall
Com 2 GameServers na mesma VPS, abrir as portas correspondentes:
# ConnectServer (todos os jogadores se conectam aqui)
netsh advfirewall firewall add rule name="MU Connect" dir=in action=allow protocol=TCP localport=44405
# GameServer 1 e 2
netsh advfirewall firewall add rule name="MU Game1" dir=in action=allow protocol=TCP localport=55901
netsh advfirewall firewall add rule name="MU Game2" dir=in action=allow protocol=TCP localport=55902
# DataServer e JoinServer — apenas locais (NÃO abrir para internet)
# 55557, 55558, 55555, 55556 — comunicação interna apenas
Checklist multi-server
PLANEJAMENTO
[ ] Quantos servidores? (começar com 2 no máximo)
[ ] Qual diferença entre eles? (EXP, drop, estilo)
[ ] Mesma VPS ou VPSs separadas?
CONFIGURAÇÃO
[ ] Pasta separada para cada server
[ ] ServerCode único para cada GameServer
[ ] Porta diferente para cada GameServer (55901, 55902...)
[ ] Porta diferente para cada JoinServer (55555, 55556...)
[ ] Porta diferente para cada DataServer (55557, 55558...)
[ ] ConnectServer com ServerList apontando para todos
BANCO DE DADOS
[ ] Todos os servers usando o mesmo DSN/banco
[ ] ODBC 32-bit configurado para a DSN
REDE
[ ] Portas 44405, 55901, 55902 abertas no firewall
[ ] Portas internas (DataServer/JoinServer) bloqueadas externamente
TESTES
[ ] Cliente conecta e mostra seleção de servidor
[ ] É possível entrar em cada servidor separadamente
[ ] Personagem é o mesmo nos dois servidores
[ ] EXP/drop corretos em cada servidor
Perguntas frequentes
Para que servem múltiplos servers no MU Online?
Para aumentar a capacidade total de jogadores (cada GameServer suporta um limite de players simultâneos), criar ambientes diferentes (Server 1 = Exp x100, Server 2 = Exp x50), ou separar comunidades (PVP vs. PVM).
Quantos GameServers posso ter?
Teoricamente ilimitado, mas o ConnectServer lista todos. O limite prático é a capacidade da VPS e a quantidade que faz sentido para a sua playerbase.
Preciso de VPS separadas para cada GameServer?
Não necessariamente. Múltiplos GameServers podem rodar na mesma máquina, usando portas diferentes (55901, 55902, 55903...). VPSs separadas são para servidores grandes com muitos jogadores.
Sub-servers compartilham o banco de dados?
Sim — todos os GameServers do mesmo servidor de MU conectam ao mesmo banco SQL. O personagem existe em um banco único e pode ser acessado de qualquer GameServer.