Network panel
When several servers share one MySQL or MariaDB database (see Database), the panel of any of them shows the whole network. You sign in to one panel, at one address, and see:
- every server of the network: online, offline or in conflict, with its TPS and players;
- the players online on all servers, with the server each one is on;
- the player reports of all servers in one list;
- the activity charts of any server, or of the whole network.
You can kick a player from the panel wherever they play: the kick reaches their server and, behind a Velocity proxy, takes them off the network (see Velocity network).
Set up
Point every server at the same MySQL or MariaDB database.
Give each server a name in
config.yml, best the same as invelocity.toml:server-name: survivalNames use
a-z,0-9,_and-, at most 32 characters. Without one, the name of the server's folder is used. A folder every server of a host shares (containeron Pterodactyl,datain Docker,server,minecraft) gets the start of the server id after it, likecontainer-3f2a9c: setserver-nameto get a readable name. A change needs a restart.Open the panel of one server to the internet (see Panel over HTTPS). One public panel is enough; the others can stay on their private addresses or have
web.enabled: false.Create the Owner account once, with the setup link of any server. Accounts and roles are shared by the whole network, so the setup links the other servers printed stop working as soon as an Owner exists.
Each server reports itself to the database every 5 seconds. A server not heard from for 15 seconds shows as offline and its players leave the list. The panel works the same on a single server; the parts about servers appear once a second server joins the database.
Console, chat and announcements across the network
The panel of one server reaches the others through the shared database, so the other servers need no panel of their
own (web.enabled: false is fine there). Expect about 1–2 seconds between an action and its effect on another
server.
- Console: pick the server at the top of the console page. The same permissions, the same 2FA unlock (one unlock covers every server) and the same blocked commands apply; the server that runs a command checks the block list once more. A command for another server shows "Sent to survival", then "Done on survival". A server that does not take it within 30 seconds shows "survival did not receive it", and it is not run later.
- Console lines of another server are written to the database (
ac_console_lines) only while someone watches that server's console, and only the last 1000 lines of the last 10 minutes are kept. Opening the console of another server shows its last 200 lines. - Chat: the live chat and the search show the messages of every server with the server's name, and can be narrowed to one server. A message from the panel goes to all servers or to one; servers that are offline are skipped and the panel says where it went. Clear chat asks which server to clear. Muting the chat, slow mode and the filters are shared by the whole network.
- Announcements: each announcement has Servers: all of them (the default) or the ones you tick. The rotation, the scheduled ones and Send now follow it.
- Settings are stored in the database and shared by the whole network; a change reaches the other servers within a minute.
Report numbers
Each server numbers its own reports, so the list shows them with the server: "survival #12". A reporter blocked on one server is blocked on all of them, and "your report was handled" reaches the reporter on whichever server they are.
Conflicts and copied folders
A server shows "Conflict" when two running servers use the same name, or the same id. The id lives in
plugins/AdminControl/server-id; a server folder copied from another one (a template, a backup) keeps that file and
both servers then write the same entry, mixing their statistics, chat and reports. The console of both servers warns
about it every 5 minutes.
To fix it, stop the copy, delete plugins/AdminControl/server-id in its folder and start it again: it creates a new
id. For a name conflict, give one of the servers another server-name.
Removing a server from the network
A server you took out of the network stays on the list as offline. The Owner can remove it: on the dashboard's Network servers card, Forget next to an offline server. It goes from the list with its players online and its waiting tasks; its punishments, reports and history stay, and its reports show "Removed server" instead of its name. A running server cannot be forgotten (stop it first). If a forgotten server starts again, it comes back on its own. Players still listed on a server that has been offline for 2 minutes (after a crash) leave the list by themselves.
When the database is down
The panel says "Network registry unavailable" and shows its own server's numbers. The other servers see this one as offline after 15 seconds. Everything comes back by itself once the database answers again.
Bans keep working: every server and proxy keeps the active bans and mutes in memory, read in full every 5 minutes and updated at once by the punishments given on it and within about 2 seconds by those of the other servers. A banned player is refused from memory without waiting for the database. A player with no ban in memory gets in when the database does not answer within 3 seconds, and the log says "checked against the in-memory list". An unban given on another server reaches the others within about 2 seconds, or at the next full read (at most 5 minutes) when the database is down; until then the other servers still refuse that player.
Who the network trusts
Every server and proxy with the shared database's login is fully trusted: they read and write the same punishments,
accounts and tasks, and a task one of them writes (a console command from a panel, a rollback) is run by the others.
Give the database login only to servers you control, use a database user per network (not one shared with other
plugins or websites), and keep the database off the public internet: on a private network, or with use-ssl and
ssl-ca (see Configuration) when it is reached across machines. A server taken over by a vulnerable
plugin can reach everything the database holds.