Cluster
Ein Minecraft-Netzwerk über mehrere Server verteilen, verbunden mit einem einzigen Code.
Eine Node ist der Leiter und entscheidet, die anderen sind Worker und führen aus.
Eine Schritt-für-Schritt-Anleitung, wie ein weiterer Server dazukommt, steht unter Eine Node hinzufügen.
Einrichten
Der Leiter muss für die anderen Server erreichbar sein. In seiner mutecloud.toml:
[api]
bind = "0.0.0.0:8770"
token = "..."Danach gibt ein einziger Befehl auf dem Leiter alles aus, was ein neuer Server braucht:
node join
node join 100.100.20.100Ohne Adresse wählt der Leiter seine beste eigene, zuerst eine Tailscale-Adresse, dann eine aus
dem lokalen Netz. Die Ausgabe ist ein Beitrittscode der Form 10.0.0.1:8770#<token> und je ein
fertiger Einzeiler für Linux und für Windows. Auf dem neuen Server reicht dieser Einzeiler: Der
Installer lädt MuteCloud herunter, das Setup erkennt den Code, prüft die Verbindung zum Leiter,
schlägt die eigene Adresse vor, lehnt bereits vergebene Node-Namen ab, bietet die Gruppen an, die
an bestimmte Nodes gebunden sind, und schreibt die Konfiguration als Worker. Läuft der Installer
schon, wählst du im Setup „Diese Maschine einem bestehenden Netzwerk hinzufügen“ und fügst den
Code ein.
Der Code enthält das Token der Cloud und gehört nur auf Server, die dir gehören. node join
verlangt deshalb vollen Zugriff.
Von Hand sieht dasselbe auf dem Worker so aus:
host = "10.0.0.2"
[cluster]
role = "worker"
leader = "10.0.0.1:8770"
token = "..."
advertise = "10.0.0.2"advertise ist die Adresse, unter der die Spielserver dieser Node erreichbar sind. Die Server
lauschen darauf, und der Proxy verbindet sich mit dieser Adresse.
Nur privates Netzwerk
Aus Sicherheitsgründen lassen sich Nodes nicht über das offene Internet verbinden. Ein Verbund braucht eine Schnittstelle, über die eine Node Befehle annimmt, Vorlagen samt aller Plugin-Konfigurationen und Passwörter herausgibt und Spielserver startet. Im Internet wäre diese Schnittstelle eine Angriffsfläche, bei der ein einziges abgefangenes oder erratenes Token das ganze Netzwerk öffnet. Dazu kommt, dass der Proxy direkt mit den Spielservern auf den anderen Nodes spricht, und auch diese Server dürfen aus dem Internet nicht erreichbar sein.
MuteCloud setzt das auf beiden Seiten durch. Ein Worker verbindet sich nur mit einem Leiter unter
einer privaten Adresse, und schon das Setup lehnt andere Codes bei der Eingabe ab. Der Leiter nimmt
Nodes und Vorlagen-Downloads nur aus privaten Netzen an und lehnt auch Anfragen ab, die über einen
Reverse Proxy kommen. Privat heißt 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16,
100.64.0.0/10 und bei IPv6 fc00::/7 und fe80::/10.
Für dieses gemeinsame Netz gibt es viele Wege:
| Möglichkeit | Wann sie passt |
|---|---|
| Tailscale | am schnellsten eingerichtet, funktioniert durch NAT und an Heimanschlüssen |
| Headscale | Tailscale mit eigenem Koordinationsserver, ohne Konten bei Dritten |
| NetBird | offene Alternative zu Tailscale, lässt sich selbst betreiben |
| ZeroTier | virtuelles LAN, ebenfalls ohne Portweiterleitung |
| WireGuard | von Hand eingerichtet, schlank und ohne zusätzliche Dienste, braucht einen offenen UDP-Port |
| Das private Netz deines Hosting-Anbieters | Server beim selben Anbieter, zum Beispiel ein Cloud-Netzwerk oder VLAN |
| LAN | alle Server stehen im selben lokalen Netz |
Der Steuer-Port 8770 des Leiters wird nur zum privaten Netz hin geöffnet, niemals zum Internet.
Wo was liegt
Dem Leiter gehören Gruppen, Ränge, Rollen, Tokens, Netzwerktexte und der gemeinsame Speicher. Ein Worker leitet jede Anfrage dazu an den Leiter weiter, deshalb lässt sich das Netzwerk von jeder Node aus verwalten.
Vorlagen holt sich jeder Worker selbst. Er vergleicht alle dreißig Sekunden seine Revision mit der des Leiters, lädt nur herunter, was sich geändert hat, entpackt das Archiv neben die vorhandene Kopie und tauscht danach die Verzeichnisse. Schlägt eine Übertragung fehl, bleibt die vorherige Vorlage bestehen.
Platzierung
Gruppen laufen auf jeder Node, sofern nichts anderes festgelegt ist:
nodes = ["node-1"]Dasselbe zur Laufzeit, von jeder Node aus und ohne Neustart:
groups BedWars set nodes node-1,node-2 genau diese Nodes
groups BedWars set nodes +node-3 eine Node hinzufügen
groups BedWars set nodes -node-3 eine Node entfernen
groups BedWars set nodes all wieder überallWo ein neuer Server startet, richtet sich nach dem freien Arbeitsspeicher. Hat keine Node genug, meldet das Log das höchstens einmal alle fünf Minuten.
node Zustand dieser Node
node list alle Nodes mit Arbeitsspeicher und Serverzahl
node reload die Konfiguration neu einlesenVerliert eine Node ihre Verbindung, meldet der Webhook das, und die Spieler dieses Proxys werden aus der Spielerliste entfernt.