[VSRO] MultiShard (2 GameServer in einem Gateway Server)

  • Hiho,


    ich finde es gibt viel zu wenige Tutorials in der Richtung, also schreibe ich einfach mal eins :P


    Ziel des Guides ist es, einen zweiten GameServer in Betrieb zu nehmen und diesen auch in der Serverliste anzuzeigen.



    [headline]Allgemeines[/headline]
    Zunächst ein paar Begrifflichkeiten (Übersetzung von Joymax <> NormalNutzer):
    Global / GlobalOperation = Eure Silkroad-Serverfarm mit allem was dazu gehört.
    Node = Eine Maschine in eurer Serverfarm. Quasi ein Server.
    Shard = Ein GameServer wie z.B. Alps, Rome, Babel, etc


    Als nächstes müsst ihr verstehen wie das ServerFramework überhaupt arbeitet bzw was die grobe Aufgabe der einzelnen Serverkomponenten ist.


    [table='Komponente,Aufgabe']
    [*]Certification(Server)
    [*]Verwaltet die Struktur des Frameworks, gibt an welche Komponente mit welcher Verbunden ist, ist Zentral-Stelle für die Konfiguration.


    [*]MachineManager
    [*]Verwaltet / Überwacht die Prozesse (Starten / Anhalten / Neustarten). Für das SMC-Plugin ServerControl zwingend notwendig.


    [*]DownloadServer
    [*]Wie der Name schon sagt. Zuständig für Patches, etc.


    [*]GatewayServer
    [*]Zuständig für Loginvorgang, Serverliste und ImageCode.


    [*]FarmManager
    [*]Verwaltet die GameServer-"Farm".


    [*]SR_ShardManager
    [*]Zuständig für den GameServer.


    [*]AgentServer
    [*]GameServer-Zugriffspunkt für Clienten. Die IP des AgentServer ist die, auf die sich der Client verbindet.


    [*]SR_GameServer
    [*]Verwaltet eine oder mehrere Regionen InGame.


    [/table]



    Jetzt sollte klar sein:
    Für einen zweiten GameServer braucht man mindestens 4 Komponenten:
    - AgentServer
    - SR_ShardManager
    - SR_GameServer
    - MachineManager


    Und wo man Das konfiguriert sollte nun auch klar sein: Im CertificationServer.


    [headline]Vorbereitung[/headline]
    Beim Konfigurieren könnt ihr schnell den Überblick verlieren. Und habt ihr den Überblick verloren, seid ihr verloren, denn ihr könnt nochmal von vorne anfangen.


    Am besten ihr malt euch einen Plan für den neuen Server und vergebt schonmal IDs (die Zahlen vor dem KomponentenNamen), denn die werdet ihr später brauchen.


    Dies ist der Plan zum Tutorial:


    Ich würde euch raten, nach jedem Schritt einmal eure Ini's zu compilen und zu schauen ob der Certification-Server noch geht. So könnt ihr einen Großteil der Fehler bereits früh bemerken.


    [headline]Eine neue Maschine erstellen[/headline]
    Da eurer zweiter Server auf einer anderen Maschine laufen wird, müsst ihr zunächst eine neue Node (s. def. "Node") erstellen. Dies ist notwendig, da euer zweiter Server sonst keine Certification vom GlobalManager bekommt.
    Dies passiert in der Datei srNodeType.ini

    Code
    1. [global]
    2. count=1
    3. [entry0]
    4. id=335
    5. operation_type=22
    6. name=ServerA
    7. wip=192.168.1.86
    8. nip=192.168.1.86
    9. machine_manager_node_id=699


    Wir erstellen eine neue Node:

    Code
    1. [entry1]
    2. id=435
    3. operation_type=22
    4. name=ServerB
    5. wip=192.168.1.58
    6. nip=192.168.1.58
    7. machine_manager_node_id=899


    Wie man unschwer erkennen kann handelt es sich hierbei um den ServerB mit der IP 192.168.1.58
    Wichtig ist, dass ihr die Entry-Id ([entry1] und die NodeId (id=435) ändert. Die Entry-Id MUSS! fortlaufend sein.
    Die machine_manager_node_id ist, wer hätte es auch anders erwartet, die ID des MachineMangers (siehe def. MachineManager). Wer auf den Plan schaut sieht: ID = 899


    Zuletzt sollte noch der count auf 2 gesetzt werden. Sonst wird der Eintrag vom Server gepflegt ignoriert :P


    [headline]Eine Shard / GameServer erstellen[/headline]
    Siehe def. "Shard"


    Eine Shard erstellt man in der Datei srShard.ini


    Wie schon beim Erstellen der Maschine nehmen wir den schon vorhandenen Eintrag:


    und duplizieren diesen ...



    Als erstes natürlich wieder die Entry-Id um eins erhöhen.
    Die ID muss ebenfalls geändert werden. Der Name ist der Name des GameServers, also der, der auch in der Serverliste auftaucht.
    (Wer zu unkreativ is en Namen zu finden kann ja mal Fantasy Name Generator testen)


    Euer zweiter GameServer benötigt natürlich auch eine Datenbank. Die Verbindung zu dieser Datenbank stellt ihr, wie beim anderen GameServer auch, bei query bzw query_log ein.


    Achtung: Meine Lösung mit der Datenbank ist scheise. Ich hab meine Datenbank öffentlich zugänglich gemacht, da ich zu faul war einen Datenbank-Server auf meinem anderen Rechner zu installieren. Ihr macht so einen Mist bitte bitte nicht!
    Installiert auf eurem zweiten GameServer einen Extra MSSQL Server!


    shard_manager_node_id ist, wer hätts gedacht, die ID des ShardManagers für diesen GameServer. Wer auf mein Bild schaut, sieht, dass dies die 805 ist.


    Zuletzt natürlich noch den count erhöhen!



    [headline]NodeData / Serverkomponenten erstellen[/headline]
    Serverkomponenten werden bei Joymax als NodeData bezeichnet, deshalb finden sich diese auch in der Datei srNodeData.ini


    Das ist jetzt ein bischen Tricky, denn die einzelenen Einträge unterscheiden sich teilweise in den (unbekannten)u-parametern.


    Am besten sucht ihr euch die schon vorhandenen Einträge raus, dupliziert diese, und führt dann eure Änderungen durch. Identifizieren könnt ihr die Einträge am "service_type"
    Welcher Service-Type welcher Service ist, könnt ihr in der Datei srServiceType.ini nachlesen.


    In absolut jedem Eintrag muss der node_type (s. def. Node) geändert werden. Der node_type ist die ID, welche ihr in der Datei srNodeType.ini für euren zweiten Server vergeben habt. Die nun erstellen ServerKomponenten laufen auf einem anderen Server und müssen daher richtig zugeordnet werden. Wird das nicht getan, bekommen die Komponenten keine Certification oder funktionieren nicht richtig.
    Ebenso muss die Entry-Id angepasst werden (beachten: fortlaufende Nummerierung) und die node_id sollte an die IDs auf eurem Plan angepasst werden.






    [headline]NodeLink - Komponenten verknüpfen[/headline]
    Jetzt wirds richtig tricky. Ihr müsst jetzt die neuen Komponenten miteinander verknüpfen. Macht ihr einen Fehler, gibt der Server nicht unbedingt eine Fehlermeldung aus, er funktioniert einfach nicht. Aber man findet nicht so einfach aus warum.


    Die Verküpfungen sind in Parent-Child-Form. Leider geht es aus den Grafiken im GlobalManager nicht hervor in welche Richtung die Beziehung geht. Deshalb gibts hier ne Grafik:
    Alternativ kann man sich auch die vorhandenen Verknüpfungen anschauen und sich daran orientieren.



    Der Pfeil zeigt immer in Richtung Child!


    NodeLink's werden in der Datei srNodeLink.ini erzeugt.


    Ich werde nicht alle Verknüpfungen hier auflisten, denn der Vorgang ist immer der gleiche.


    Ein Eintrag sieht immer so aus.

    Code
    1. [entryX]
    2. id=1227
    3. child_node_id=697
    4. parent_node_id=1
    5. p_label=0
    6. u1=0
    7. u2=0
    8. u3=0
    9. u4=0
    10. u5=0


    Ich müsst nur die Id ändern und die child & parent_node_id abändern.


    Beispiel für den MachineManager:

    Code
    1. [entryX]
    2. id=2000
    3. child_node_id=899
    4. parent_node_id=697
    5. p_label=0
    6. u1=0
    7. u2=0
    8. u3=0
    9. u4=0
    10. u5=0


    Der Pfeil zeigt vom GlobalManager aus in Richtung MachineManager. Somit ist der GlobalManager(697) die ParentNode und der MachineManager(899) die ChildNode.


    Am besten macht ihr einen Haken in eurem Plan, wenn ihr eine Verknüpfung erzeugt habt. So könnt ihr auf keinen Fall durcheinander kommen.


    [headline]Abschluss der Änderungen am Certification Server[/headline]
    Das waren alle nötigen Änderungen am Certification Server. Ihr solltet, wenn ihr alles richtig gemacht habt die Ini's wieder compilen können.


    Sind die Ini's compiled, könnt ihr schonmal den CertificationServer starten.
    Sollte das nicht gehen, habt ihr höchstwarscheinlich einen Fehler bei den Entry-Ids gemacht. Prüft alle Entry-Ids auf Duplikate. Es darf keine Entry-Id doppelt vorkommen. Vorallem in der Datei srNodeLink macht man gerne mal Fehler.


    Funktioniert der Certification Server, könnt ihr den GlobalManager starten.
    Nun könnt ihr schauen ob alle neuen ServiceKomponenten und alle Verknüpfungen vorhanden sind. Vergleicht es einfach mit meinem Plan (s. oben).
    Sollte welche fehlen, gibt es 3 mögliche Fehlerquellen:
    - Count ist zu klein eingestellt
    - Doppelte nodeId oder linkid (nicht entry-id)
    - Ihr habt echt vergessen das Teil hinzuzufügen :P


    Sollte hier auch alles klar sein, könnt ihr den SMC starten und euch anmelden. Dann klickt ihr auf den Tab "ServerControl".


    Ihr solltet exakt das sehen.


    Sollte das nicht der Fall sein:


    Problem: Ein Service ist dem falschen "Kasten" zugeordnet.
    Lösung:
    - associated_shard_id überprüfen


    Solltet ihr andere Probleme haben, wie z.B. das komplette Bereiche fehlen, dann
    habt ihr offensichtlich einen Schritt im Guide ausgelassen.
    Alle anderen Probleme sind mehr oder weniger individuell und sollten nicht
    auftreten, wenn ihr Schritt für Schritt alles gemacht habt.


    Ihr könnt jetzt auf eurem zweiten Server den MachineManager starten. Dieser sollte eine Certification erhalten. Ist die nicht der Fall, ist möglicherweise die IP in der Server.cfg falsch.


    Danach könnt ihr über den SMC die anderen Komponenten starten, oder ihr startet die Exen manuell. Bleibt euch überlassen.



    [headline]FAQ - Häufige Fehlerquellen[/headline]



    Ihr dürft den Guide kopieren, in andere Foren posten und ggf. übersetzen & erweitern solange ich (florian0) als Original-Autor genannt werde und der Original-Thread (stagetwo) verlinkt wird.


    Gruß
    florian0

  • Sehr schönes Tutorial. Gute Arbeit. :)

    Zitat

    Dr. Gregory House: You've gotta get down here. They've got a satellite aimed directly into Cuddy's vagina. I told them that chances of invasion are slim to none but...

  • Ja, in der Tat ein super Tutorial.


    Was mich zu dem Thema mal interessieren würde: Wie macht man es, wenn man 2/3/4 Gameserver haben will, aber die Serverauswahl nicht über die Serverliste sondern über die "Division" Buttons im Launcher machen will? Ich brauch kein ganzes Tutorial, aber wäre nett wenn mir jemand kurz ein paar Stichworte geben könnte...

  • Was mich zu dem Thema mal interessieren würde: Wie macht man es, wenn man 2/3/4 Gameserver haben will, aber die Serverauswahl nicht über die Serverliste sondern über die "Division" Buttons im Launcher machen will? Ich brauch kein ganzes Tutorial, aber wäre nett wenn mir jemand kurz ein paar Stichworte geben könnte...

    Die Division-Buttons kenne ich garnicht ... wenn mir jemand erklärt wie man die Anzeigt/Hinzufügt kann ich mich ja mal damit beschäftigen ^^


    Gruß
    florian0

  • Ja, in der Tat ein super Tutorial.


    Was mich zu dem Thema mal interessieren würde: Wie macht man es, wenn man 2/3/4 Gameserver haben will, aber die Serverauswahl nicht über die Serverliste sondern über die "Division" Buttons im Launcher machen will? Ich brauch kein ganzes Tutorial, aber wäre nett wenn mir jemand kurz ein paar Stichworte geben könnte...


    also wie ich das jetzt verstanden habe.. willst du einfach im launcher die division haben wo man drauf klickt und dann connecten kann?


    ganz einfach in der pk2 die divisioninfo.txt müssen einfach mit mehreren ip's hinterlegt werdem. somit wird automatisch der andere Launcher angezeigt mit dem devision


    System 2013 ♥
    NZXT Phantom | Asus Rampage IV Extreme | I7 3930k | Nvidia GTX 780 | 16GB RAM



  • Schönes und sehr ausführliches Tutorial.



    ( Warum müssen die Vsro Files so verdammt kompliziert sein ? )
    Bei mir is der server immer am smc gescheitert, weil ich da i-ein error hatte ... -.-
    Aber zum glück gibt es ja den Styx Priv server :)



    btw. würdet ihr ein Tutorial machen, wie man seinen eigenen Server aufmacht ?
    Klar, es gibt 100erte von TuT´s im Internet, doch diese sind meist unverständlich oder nicht vollständig.