LEMP + Redis + WP Mirroring

  • Hey Leute,


    mal eine etwas komische Frage. Vielleicht fällt jemandem ja spontan etwas dazu ein.


    Es geht darum, ich hab ne Hand voll root und vServer hier in DE und zusätzlich welche in China, Mainland, nicht HK oder so.


    Die Anbindung ist innerhalb Chinas einfach performanter. Zugriffe von außen jedoch eher langsam. Auch gibt's manchmal Probelem mit Updates etc.


    Ich würde also gerne nun zwei identische Instanzen laufen lassen. Eine in DE für internationale Zugriffe und eine in China. Also jeweils Wordpress Files, SQL, Uplaods etc.


    Nur eben unterschiedliche Doamins.

    Domain.com in DE

    Domain.中国 in China


    Wie bekomme ich das am besten realisiert.


    Lets Encrypt und ngnix Settings etc. wären ja für jedes System einzeln.

    Die Files aus dem Dokument root lassen sich sicher via rsync synchronisieren. - läuft rsync permanent oder via cron?


    Gibt es eine Möglichkeit SQL DBs zu syncen?


    Danke schon mal für eure Ideen!

  • Im Titel steht Redis - da gibt es ja die Möglichkeit der Replikation.

    Für SQL würde ich dir auch die Replikation empfehlen - mit dem Abstrich, dass auf der chinesischen Seite die Datenbank nicht beschrieben werden kann, bzw. höchstens mit einem R/W Split.



    rsync wird via cron getriggert.

  • Hi,


    läuft rsync permanent oder via cron?

    rsync ist ein einmaliger Befehlsaufruf.

    D.h. du müsstest das als cron einrichten.

    Das was du mit "dauerhaft" meinst ist wohl eher eine Live-Replication. Da werden dann Daten zwischen 2 Hosts hin und her syncronisiert, während rsync nur in eine Richung läuft.

    Das erreicht man eher mit DRBD (Distributed Replicated Block Device) und ist wesentlich komplizierter.


    Gibt es eine Möglichkeit SQL DBs zu syncen?

    Ja, schau dir das mal an Maria DB Galera Cluster

    Das ist dann ein Active-Active Cluster, d.h. du kannst auf allen Nodes schreiben, ohne "Slaves" zu haben.



    Für deinen Anwendungszweck würde erst mal überlegen/testen, ob es nicht einfacher Cache tun würde.

    Quasi einfach mittels nginx eine Cache-Node in China zu basteln.

    Kann sein, dass du das schon überlegt hast oder es für deine Site nicht in Frage kommt, aber das wäre definitiv weniger Aufwand :D

  • Bloß nicht. Kann ich nur dringend von abraten.

    Ich muss zugeben - Hatte ich bisher nur in Testsumgebungen, noch nie produktiv.

    Mir ist da nichts negatives aufgefallen. Aber wie schon gesagt - TESTumgebung.

  • Mir ist da nichts negatives aufgefallen. Aber wie schon gesagt - TESTumgebung.

    Ich hab das im Labor untersucht.


    - Die Dokumentation ist sehr dürftig und widersprüchlich

    - Es wird eine synchrone Replikation versprochen, tatsächlich wird asynchron repliziert. Aus der Dokumentation geht nicht hervor, wie synchrones Verhalten forciert werden kann.

    - Schutzmaßnahmen Galeras greifen nicht wirksam

    - Galera kann keinen konsistenten Status zu jeder Zeit und jeder Ausfallstufe garantieren

    - Der Daemon selber ist sich der Replikation nicht bewusst und arbeitet, als wäre er alleinstehend. (Galera ist ein rangeflanschtes Plugin)

    - In der üblichen Konfiguration kann jeder, mit Netzzugriff auf den mysqld das Cluster auslesen und Änderungen ohne Authentifikation zurück geben.


    Bei einem Testszenario hatte ich auf den verschiedenen Servern plötzlich unterschiedliche Privilegien in der mysql Datenbank (dort werden die MySQL Nutzer, Passwörter, ACLs und Rechte verwaltet) - hier sind Inkonsistenzen kreuzgefährlich.


    Im Kombinationsbetrieb mit Failover-Mechanismen:

    - bei 50.000 Inserts mit provoziertem Failover gehen 400 Datensätze ohne Fehler verloren.

    - bei einem Wiedereintritt einer Node fällt eine zweite in einen "nicht-bereit" Zustand.

  • Danke für den Input!

    Werde mir das alles mal in Ruhe angucken 😊


    An einen Cache-Node hatte ich bis jetzt garnicht gedacht - ich wusste nicht mal, dass es so etwas gibt - haha.


    Zur Not setze ich einfach 2 Instanzen auf und manage das Ganze manuell. Würde in dem Fall auf die News Kategorie verzichten, weil ich keine Lust habe jede Woche 1 oder 2 länger Artikel vom chinesischen ins Englische zu übersetzen. Dann wären es knapp 15 Seiten und maximal 1 bis 2 Neue je Monat. Also vom Arbeitsaufwand überschaubar.

  • An einen Cache-Node hatte ich bis jetzt garnicht gedacht - ich wusste nicht mal, dass es so etwas gibt - haha.

    Du sendest halt entweder mit dem Hauptserver einen Cache-Header mit, der dann von der Cache-Node beachtet wird, oder stellst auf der Cache node statisch ein, welche Inhalte wie lange gecached ausgeliefert werden, bevor sie vom Hauptserver neu angefragt werden :D

  • Du sendest halt entweder mit dem Hauptserver einen Cache-Header mit, der dann von der Cache-Node beachtet wird, oder stellst auf der Cache node statisch ein, welche Inhalte wie lange gecached ausgeliefert werden, bevor sie vom Hauptserver neu angefragt werden :D

    So ohne Erfahrung mit dem Ding.

    Aber würde es dann nicht Sinn machen, den kompletten Inhalt in China zu hosten. Den Cache quasi zu spiegeln und bei internationalen Zugriffen auf den Cache in DE zugreifen?

    Bzw. wie verhält sich das mit verschiedenen Domains? Müsste man per nginx mit nem rewrite arbeiten?


    Verwirrend aber interessant!

  • Aber würde es dann nicht Sinn machen, den kompletten Inhalt in China zu hosten.

    Wenn du sagst, die Verbinung von China nach auserhalb ist langsam, würde es sinn machen, den "internationalen" Inhalt dort zu hosten, von wo du mehr zugriffe bekommst.

    Der Cacheserver holt sich den angefragen Inhalt nur vom Host, in dem Moment, wenn er angefragt wird.

    D.h. der erste Aufruf einer Seite dauert dann immer etwas länger.



    Bzw. wie verhält sich das mit verschiedenen Domains? Müsste man per nginx mit nem rewrite arbeiten?

    Du kannst die Anfrage-Header, die vom Cacheserver an deinen Hauptserver weiter geleitet werden, überschreiben.

    Also einen vHost (oder wie das bei nginx so heißt) für domainA.com anlegen, dort Proxy auf deine HauptIP und den Hostheader auf Domain.de umschreiben. (Oder so :D )