Hiho,
ich finde es gibt viel zu wenige Tutorials in der Richtung, also schreibe ich einfach mal eins
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
- [global]
- count=1
- [entry0]
- id=335
- operation_type=22
- name=ServerA
- wip=192.168.1.86
- nip=192.168.1.86
- machine_manager_node_id=699
Wir erstellen eine neue Node:
- [entry1]
- id=435
- operation_type=22
- name=ServerB
- wip=192.168.1.58
- nip=192.168.1.58
- 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
[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:
- [entry0]
- id=64
- global_operation_id=20
- operation_type=22
- name=Rothverem
- query=DRIVER={SQL Server};SERVER=FLORIAN\SQLEXPRESS;DSN=SRO_VT_SHARD;UID=srouser;PWD=sropass;DATABASE=SRO_VT_SHARD
- query_log=DRIVER={SQL Server};SERVER=FLORIAN\SQLEXPRESS;DSN=SRO_VT_SHARDLOG;UID=srouser;PWD=sropass;DATABASE=SRO_VT_SHARDLOG
- capacity=1000
- shard_manager_node_id=705
- u1=240
- u2=208
- u3=17
- u4=1
- u5=0
- u6=0
- u7=0
Alles anzeigen
und duplizieren diesen ...
- [entry1]
- id=65
- global_operation_id=20
- operation_type=22
- name=Essadban
- query=DRIVER={SQL Server};SERVER=192.168.1.86,1433;DSN=SRO_VT_SHARD2;UID=srouser;PWD=sropass;DATABASE=SRO_VT_SHARD2
- query_log=DRIVER={SQL Server};SERVER=192.168.1.86,1433;DSN=SRO_VT_SHARDLOG2;UID=srouser;PWD=sropass;DATABASE=SRO_VT_SHARDLOG2
- capacity=1000
- shard_manager_node_id=805
- u1=240
- u2=208
- u3=17
- u4=1
- u5=0
- u6=0
- u7=0
Alles anzeigen
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.
Vorhandener Eintrag:
- [entry3]
- node_id=699
- operation_type=22
- global_operation_id=0
- associated_shard_id=0
- node_type=335
- service_type=11
- certification_node_id=697
- port=25880
- node_icon=0
- u1=56
- u2=26
- u3=24
- u4=1
- u5=48
- u6=148
- u7=19
- u8=1
- u9=64
- u10=160
- u11=17
- u12=1
- u13=0
- u14=0
- u15=0
- u16=0
- u17=0
- u18=0
- u19=0
- u20=0
Alles anzeigen
Neuer Eintrag:
- [entryX]
- node_id=899
- operation_type=22
- global_operation_id=0
- associated_shard_id=0
- node_type=435
- service_type=11
- certification_node_id=697
- port=25880
- node_icon=0
- u1=56
- u2=26
- u3=24
- u4=1
- u5=48
- u6=148
- u7=19
- u8=1
- u9=64
- u10=160
- u11=17
- u12=1
- u13=0
- u14=0
- u15=0
- u16=0
- u17=0
- u18=0
- u19=0
- u20=0
Alles anzeigen
Geändert: Entry-Id, node_id, node_type
Vorhandener Eintrag:
- [entry7]
- node_id=707
- operation_type=22
- global_operation_id=20
- associated_shard_id=64
- node_type=335
- service_type=6
- certification_node_id=704
- port=15884
- node_icon=0
- u1=48
- u2=24
- u3=24
- u4=1
- u5=104
- u6=149
- u7=19
- u8=1
- u9=64
- u10=160
- u11=17
- u12=1
- u13=0
- u14=0
- u15=17
- u16=1
- u17=168
- u18=102
- u19=18
- u20=1
Alles anzeigen
Neuer Eintrag:
- [entryX]
- node_id=807
- operation_type=22
- global_operation_id=20
- associated_shard_id=65
- node_type=435
- service_type=6
- certification_node_id=704
- port=15884
- node_icon=0
- u1=48
- u2=24
- u3=24
- u4=1
- u5=104
- u6=149
- u7=19
- u8=1
- u9=64
- u10=160
- u11=17
- u12=1
- u13=0
- u14=0
- u15=17
- u16=1
- u17=168
- u18=102
- u19=18
- u20=1
Alles anzeigen
Geändert: Entry-Id, node_id, node_type, associated_shard_id
Infos zu associated_shard_id
Wir haben zuvor eine neue Shard erstellt. Diese Shard trägt die ID=65. Und da der neue AgentServer für die neue Shard zuständig sein soll, müssen wir hier die neue Shard-Id eintragen.
Vorhandener Eintrag:
- [entry6]
- node_id=705
- operation_type=22
- global_operation_id=20
- associated_shard_id=64
- node_type=335
- service_type=7
- certification_node_id=704
- port=15883
- node_icon=0
- u1=152
- u2=24
- u3=24
- u4=1
- u5=0
- u6=149
- u7=19
- u8=1
- u9=64
- u10=160
- u11=17
- u12=1
- u13=0
- u14=0
- u15=17
- u16=1
- u17=168
- u18=102
- u19=18
- u20=1
Alles anzeigen
Neuer Eintrag:
- [entryX]
- node_id=805
- operation_type=22
- global_operation_id=20
- associated_shard_id=65
- node_type=435
- service_type=7
- certification_node_id=704
- port=15883
- node_icon=0
- u1=152
- u2=24
- u3=24
- u4=1
- u5=0
- u6=149
- u7=19
- u8=1
- u9=64
- u10=160
- u11=17
- u12=1
- u13=0
- u14=0
- u15=17
- u16=1
- u17=168
- u18=102
- u19=18
- u20=1
Alles anzeigen
Geändert: Entry-Id, node_id, node_type, associated_shard_id
Infos zu associated_shard_id
Wir haben zuvor eine neue
Shard erstellt. Diese Shard trägt die ID=65. Und da der neue AgentServer
für die neue Shard zuständig sein soll, müssen wir hier die neue
Shard-Id eintragen.
Vorhandener Eintrag:
- [entry8]
- node_id=713
- operation_type=22
- global_operation_id=20
- associated_shard_id=64
- node_type=335
- service_type=8
- certification_node_id=704
- port=15885
- node_icon=0
- u1=0
- u2=25
- u3=24
- u4=1
- u5=160
- u6=150
- u7=19
- u8=1
- u9=64
- u10=160
- u11=17
- u12=1
- u13=0
- u14=0
- u15=17
- u16=1
- u17=168
- u18=102
- u19=18
- u20=1
Alles anzeigen
Neuer Eintrag:
- [entryX]
- node_id=813
- operation_type=22
- global_operation_id=20
- associated_shard_id=65
- node_type=435
- service_type=8
- certification_node_id=704
- port=15885
- node_icon=0
- u1=0
- u2=25
- u3=24
- u4=1
- u5=160
- u6=150
- u7=19
- u8=1
- u9=64
- u10=160
- u11=17
- u12=1
- u13=0
- u14=0
- u15=17
- u16=1
- u17=168
- u18=102
- u19=18
- u20=1
Alles anzeigen
Geändert: Entry-Id, node_id, node_type, associated_shard_id
Infos zu associated_shard_id
Wir haben zuvor eine neue
Shard erstellt. Diese Shard trägt die ID=65. Und da der neue AgentServer
für die neue Shard zuständig sein soll, müssen wir hier die neue
Shard-Id eintragen.
[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.
- [entryX]
- id=1227
- child_node_id=697
- parent_node_id=1
- p_label=0
- u1=0
- u2=0
- u3=0
- u4=0
- u5=0
Ich müsst nur die Id ändern und die child & parent_node_id abändern.
Beispiel für den MachineManager:
- [entryX]
- id=2000
- child_node_id=899
- parent_node_id=697
- p_label=0
- u1=0
- u2=0
- u3=0
- u4=0
- 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
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]
Problem: Die Ini's für den Certification-Server lassen sich nicht compilen (Fehlermeldung: Die Eingabezeichenfolge hat das falsche Format)
Lösung: Eine der Entry-Id ist doppel vergeben.
Problem: Der ShardManager / GameServer / AgentServer / MachineManager wird nicht angezeigt,
Lösung: Die Id (nicht Entry-Id) ist nicht eindeutig.
Lösung(2): Der Count in der zweiten Zeile der Datei ist zu niedrig eingestellt.
Problem: Die Verknüpfungen zwischen den einzelnen Komponenten werden nicht angezeigt.
Lösung: Die Id (nicht Entry-Id) ist nicht eindeutig.
Lösung(2): Der Count in der zweiten Zeile der Datei ist zu niedrig eingestellt.
Problem: Ein oder mehrerere Serverkomponenten bekommen keine Certification.
Lösung: Certification-IP in der server.cfg falsch eingstellt.
Lösung(2): Die IP in der Datei srNodeData.ini ist falsch eingestellt.
Liste wird noch erweitert. Besonders im Bezug auf Certification sind auch bei mir noch einige ungelöste Fragen, mit denen ihr euch frührer oder später auch auseinander setzen werdet.
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