MySQL Synchronisation

12/28/2015 15:50 puchlij54#1
Folgende Frage stellt sich:

die Homepage ist auf Server 1 samt ihrer MYSQL, der Gameserver auf Server 2 mit seiner MYSQL.

Nun benötigt aber die Homepage Zugriff auf sämtliche DBs vom Gameserver, lesen sowie schreiben, kann mir jemand mitteilen wie man dies sicher vereinbaren kann.

Bitte nicht einfach, schreiben mittels php Script.. wenn dann eine richtige Lösung, ich bin leider ein php Noob.
12/28/2015 22:06 holyshit390#2
Du hast aber schon 1 MySQL Server und 2 DB's oder hast du auch 2 MySQL Server? Vereinbaren? Verstehe nicht ganz was du damit meinst, entweder beide Datenbanken vereinen (was keinen wirklichen Sinn ergibt) oder du musst halt einen neuen User in der Gameserver DB anlegen der die Rechte hat die die Homepage brauch und dann mit diesem auf die DB zugreifen!

Vielleicht verstehe ich dein Problem auch falsch.

LG,
holy

P.S: Rechtsbündig, bitte nicht!
12/28/2015 22:14 puchlij54#3
Nun ja die Homepage benötigt die DB vom CMS um die Seiten aufzubauen und Diverse Sachen in den Tables zu speichern, wenn ich die DB vom CMS in die MYSQL vom Gameserver einfüge, laden die Seiten extrem lange.

Die Homepage muss Accounts anlegen, Items vergeben, Spielerinformationen & Log Informationen abrufen solche Sachen eben.
12/28/2015 22:17 holyshit390#4
Ja genau, das ist ja auch nicht Sinn der Sache.

Dann sehe ich das Problem aber nicht, du kannst doch dem CMS (Homepage) sagen das die auf eine andere MySQL Datenbank (Server) zugreifen soll. Sprich ist doch wurst ob die DBs auf verschiedenen Servern sind, kommt einfach nur auf dein CMS an, bzw Metin 2 Plugin oder anderes.

LG,
holy
12/29/2015 02:28 blackout85#5
Ich mache es so:

Webseite, TS und Mysql auf einen Root
Gameserver auf einem 2. Root der die Mysql von Root 1 nutzt somit ist die Webseite schnell und zum 2. ist der TS und die Webseite online wenn was am Gameroot gemacht wird
12/29/2015 18:19 puchlij54#6
Dann braucht ja alles vom Gameserver zu der externen MYSQL extrem lange, bei 1000 aufwärts dürfte das kritisch werden.

Bisher sah ich es immer so auf anderen Servern, das sie ihre Datenbanken live synchronisieren und duplizieren...
12/30/2015 00:08 SinSay#7
Denn hättest du das gleiche Problem nur doppelt so schlimm wenn du beide Synchronisierst dann werden ja etliche anfragen zu den servern gesendet und diese müssen dann ja auch verarbeitet werden. Das würde dann nicht lange gut gehen da das von blackout besser....
12/31/2015 13:47 Mashkin#8
Quote:
Originally Posted by puchlij54 View Post
wenn ich die DB vom CMS in die MYSQL vom Gameserver einfüge, laden die Seiten extrem lange.
Da solltest du primär dran arbeiten.

Wenn ich davon ausgehe, dass deine beiden Server irgendwo in Europa stehen, sollten RTTs ("Pings") von über 20ms kaum vorkommen.
Die Bandbreite eines üblichen Servers (>= 100Mb/s) sollte selbst für umfangreiche Queries (bzw. große Ergebnismengen) ausreichen.

Weiter gehe ich mal davon aus, dass dein Gameserver (inkl. DB) nicht überlastet ist, die Queries also auf beiden Datenbankhosts ähnlich schnell bearbeitet werden können.

Da bleibt die Frage:
Warum verlängern sich die Ladezeiten der Website "extrem", wenn die Netzwerkverzögerung von üblicherweise 20ms (RTT) der einzige zusätzliche Zeitfaktor ist?
  • Die Datenbank auf dem Gameserver ist langsam.
    Das würde dann auch InGame auffallen, Abhilfe schafft bei ausgelasteten Servern Tuning, ansonsten ein Server-Upgrade.
  • Die RTT zwischen beiden Servern liegt weit über 20ms (zu testen mit ping-Tool auf Server A zu Server B).
    Einer der Hoster hat vmtl. einfach eine sehr schlechte Anbindung (zum anderen Hoster oder allgemein). Ein Hoster-/Standortwechsel schafft Abhilfe.
  • Firewalls o.ä. verursachen Probleme bei der Verbindung, der Verbindungsaufbau dauert lange etc.
    Das kann man testen, indem man z.B. mit PHP's microtime die Zeiten für Verbindungsaufbau und Queries misst, oder indem man mysql direkt in der Konsole verwendet.
    Abhilfe schafft evtl. ein Verbindungstunnel wie ich ihn weiter unten bei der Sicherheit nochmal beschreibe.


Replikation (aka "Synchronisierung") löst das vermutliche Problem nicht. Übliche Netzwerkverzögerungen (max. 20ms in Europa) lassen sich zwar für den Client (die Website) eliminieren, aber die Replikation selbst erfolgt mit Verzögerung.
Außerdem kenne ich kaum einen Privatserver, bei dessen Website es auf (maximal) 20ms ankommt. Bei meinem eigenen Projekt wird zwar Replikation zum Einsatz kommen, aber das ist in erster Linie mit Ausfallsicherheit begründet.


Zum Punkt Sicherheit:
Das MySQL-Protokoll ist ansich unverschlüsselt, unterstützt aber nativ SSL/TLS. Persönlich habe ich mich noch nie damit befasst.
Um die (unsichere) Verbindung aber sicher zu tunneln, kann man ein VPN - z.B. OpenVPN - installieren (das benötigt Grundkenntnisse über Routing).
Eine einfachere Alternative ist eine persistente SSH-Portweiterleitung.
Hilfreich ist dafür das Programm [Only registered and activated users can see links. Click Here To Register...], welches als SSH-Client dient und die Verbindung im Fehlerfall neu aufbaut.


Beispiel:
Auf dem Webserver eine SSH-Verbindung öffnen:
Code:
autossh -M 0 -f -N -L 3307:localhost:3306 <gameserver>
Als MySQL-Adresse für die Website dient dann "localhost:3307", was durch den Tunnel zum Gameserver und von dort zu "localhost:3306" weitergeleitet wird.


Für Details zur Konfiguration schaust du dir am besten das [Only registered and activated users can see links. Click Here To Register...] und [Only registered and activated users can see links. Click Here To Register...] an.