Aktive Server Rollenspiele - Downloadmanager

zkmlch

Master of Disaster
Hallo liebe (noch) Freunde :rolleyes:

Noch, desswegen weil Ich nun ein Problem vorstellen möchte welches für mich ein ganz schweres & heisses Eisen darstellt.Ich denke das eine genaue Lösung meines Problems vielen Leuten im Netz helfen wird, den Ich habe diesbezüglich nichtmal Ansatzweise was in der Google-Welt gefunden.

Ich schildere euch kurz mein Projekt:

In zwei weiteren Treads habe Ich bereits kleinere Probleme ansatzweise lösen können. Es geht darum einen Downloadmanager zu erstellen.

Meine Netzwerkinfrastruktur:

masterwebserver222
192.168.4.222
Debian 6.0

slavewebserver223
192.168.4.223
Debian 6.0

slavewebserver224
192.168.4.224
Debian 6.0

slavewebserver225
192.168.4.225
Debian 6.0

slavewebserver226
192.168.4.226
Debian 6.0

Bereits realisierte Module:

Admin Interface mit voll funktionsfähigem CRUD
MD5 Filechecking (Prüft auf Duplikate)
Servercheck

Der Masterserver übernimmt folgende Aufgaben:

Mirrorverteilung auf alle Slaveserver inkl MySQL DB Backup
Alle Downloads egal von welchem server laufen über 192.168.4.222


Folgende Punkte müssen im nächten und letzten Modul erfüllt werden:

--> Falls der Masterserver aussteigt soll man per E-Mail benachrichtigt werden und es soll automatisch ein neuer Master gewählt werden. Zusätzlich soll bei Wartungsarbeiten an einem Server manuell im Admin Interface ein neuer Server bestimmt werden können.

--> Jeder Server kann temporär die Rolle des Masters übernehmen und andere Slave Server mit seinen neusten Daten versorgen.

--> Greift zum Beispiel Admin 1 auf das Adminpanel des slaveserver224 zu und verändert einige Dateien und fügt einen oder mehrere Datensätze der Datenbank hinzu, so erhält dieser Server automatisch die masterrolle und ist für die verteilung der Mirrors zuständig.

--> Greift Admin 1 auf den slaveserver224 zu und wärend desssen möchte Admin 2 noch auf dem slaveserver226 einige änderungen machen so soll dem Admin 2 der Zugriff verwehr werden!

--> Jeden Sonntag soll der Master automatisch mittels Cronjob seine Daten an die anderen Salves verteilen. dabei soll jeder der Server zuerst anhand seiner IP in der Datenbank nachschauen ob er Master ist, falls nicht soll er nichts machen.


Wer weitere Informationen benötigt dem wird gerne Stoff geliefert... Ich wollte nicht zuviel schreiben da es sonst schon recht kompliziert ist.:eek:

Wer mir zur Lösung dieses harten Brockens weiterhelfen kann wird mit Taschengeld belohnt... den dann hab Ichs geschaft!


Gruss Patrick
 
Zuletzt bearbeitet:
Hi saftmeister

Über diesen Artikel bin Ich nocht nicht gestolpert jedoch liegt mir der Begriff eines Load-Balancer eher im sinne einer Last-Verteilung... Bei meinem "konzept" möchte Ich keine Last verteilen, sondern sexy Rollenspiele machen :D

Gruss Patrick
 
Zuletzt bearbeitet:
Edit: Ich wollte noch sagen das ich NOCH nicht aud der suche nach Codeschnipseln bin sondern erstmal die notwendingen "Module" suche...

  • Was brauche ich für Scripts
  • Wie kann Ich das realisieren
  • Was brauch ich für Hard/Software Anforderungen

Hat jemand damit schon Erfahrung gemacht oder mal was ähnliches Konzipiert oder gar umgesetzt?

Besten Dank und Gruss Patrick
 
Ich würde den MySQL-Kram nicht über Backup sondern über Replikation lösen. Dafür wurde sie "erfunden".

Die Sache mit der Email-Meldung bei Server-Crash ist so ne Sache. Ist der Server komplett hinüber, kann er auch keine Email mehr senden. Du bräuchtest also einen Art Monitor-Server, der alle Server-Instanzen überwacht und ggf. entsprechend reagiert.

Was kennzeichnet den Masterserver in deinem Kontext? Was macht einen Server zu einem Master-Server?

Grundsätzlich kann man diese Art von Failover auch über DNS-Round-Robin implementieren - aber nur, wenn das über den Domain-Namen laufen soll.
 
Hi Saftmeister!

Replikation der MySQL Datenbank mit Master und Slave Rollen fällt definitiv aus....

Zu deiner Aussage:
Dafür wurde sie "erfunden".

;-) Ich hab Sie jedenfalls nicht erfunden, ist bestimmt ein nettes Spielzeug aber für mein System nicht gebräuchlich. Ich erläutere dir dies, Anhand eines Fallbeispieles:

Fall Datenbankfehler:

Sollte aus irgendeinem Grunde ein Datenbankfehler auftreten oder ein Admin macht versehentlich falsche DB-Einträge so sind diese Fehler automatisch auf allen Servern vorhanden. Dies wäre der Super-Gau... Alle 5 Webseiten, die eigentlich Redundaz für den Besucher bieten sollen, fallen auf einmal aus. Ich bleibe somit bei meiner Lösung mit dem MySQL Dump und INSERT INTO....

Gruss Patrick
 
Dann klär mich doch auf... Habe zwar das Kapitel in der MySQL Referenz durchgelesen aber Ich wüsste nicht was an meiner Aussage falsch ist....
 
Selbstverständlich kann man mittels MySQL-Dump die Datenbank kopieren. Bei wenigen Einträgen wird das gut funktionieren. Aber: Ein inkrementeller Update ist darüber nicht so ohne weiteres möglich. Das bedeutet, das immer die komplette DB gedumpt und eingespielt werden muss.

Replikation kann man so einrichten, dass sie nicht permanent läuft, sondern sich bspw. um eine bestimmte Uhrzeit alle Slaves zum Master connecten, die Deltas synchronisieren und anschließend wieder disconnecten. Wenn du das Manual tatsächlich gelesen hättest und nicht nur überflogen, wärst du evtl. selbst auf die Idee gekommen :)

Das SQL dafür lautet nur so nebenbei: START SLAVE bzw. STOP SLAVE. Um den Status auszulesen kann man SHOW SLAVE STATUS verwenden.

Es war ja auch nur eine Idee, wie man da einigermaßen professionell ran gehen könnte. Man muss das nicht so machen.
 
Hat das ganze Backupverfahren einen Einfluss auf mein "Konzept"?

Den Ich habe noch immer keinen Peil...

Ich habe jetzt mal der Datenbanktabelle tbl_server eine neue Spalte zugewiesen, die Tabelle sieht nun so aus:

Code:
+-------------+----------------------+----------------+--------------+
| server_prio | server_address       | server_comment | server_rolle |
+-------------+----------------------+----------------+--------------+
|           5 | http://192.168.4.226 |                | slave        |
|           4 | http://192.168.4.225 |                | slave        |
|           3 | http://192.168.4.224 |                | slave        |
|           2 | http://192.168.4.223 |                | slave        |
|           1 | http://192.168.4.222 |                | master       |
+-------------+----------------------+----------------+--------------+

Das Feld "server_rolle" dient als Flag. Alle Checks ob der Server nun Master is oder nicht laufen über diese Kolumne, natürlich in verbindung mit der "server_address"...

Sollte Ich ein Configfile erstellen in welchem geregelt wird was ein Master und ein Slave zu tun hat oder eben nicht zu tun hat?

Rollenfunktionen:

Master-Status

Muss: Jeden Sonntag um 00:00 Uhr, einen MySQL Dump machen (Cronjob)
Muss: Jeden Sonntag um 01:00 Uhr, alle Downloadfiles auf die anderen Server mirroren (cronjob)
Muss: Nach dem erfolgreichen übertragen der Files auf die Partnerserver ein Mail absenden.
Muss: Admin Zutritt zum Adminpanel gewähren
Darf nicht: MySQL InsertInto Script ausführen (cronjob)

Slave-Status

Muss: Jeden Sonntag um 06:00 Uhr, das InsertInto (backup einlesen) ausführen
Darf nicht: Admins auf das Adminpanel lassen um änderungen vorzunehmen.

Login auf das Admin Panel und die Logik

Loggt sich der Admin auf einen Server (gem. Beispiel auf 192.168.4.222) welcher zu diesem Zeitpunkt die "master"-Rolle geniesst, so darf sich der Admin ohne weiteres auf das Admin Panel einloggen und änderungen vornehmen.

Loggt sich der Admin auf dem Server (gem. Beispiel auf 192.168.4.225) welcher momentan unter der "slave"-Rolle zu leiden hat, wird der Admin mit einer Error meldung empfangen:" Ich bin leider Slve, du darfst mich nur als master bearbeiten" Möchtest du mich zum "master machen? Ja/Nein
Bei Ja muss in der Datenbank nun der Flag von slave auf master gewechselt werden und der ehemalige master auf slave.

War dies hilfreich?;-)
 

Neue Beiträge

Zurück