Server synchronisieren

GodHunter

New Member
Hi,

ich möchte ein Server Cluster unter Debian erstellen. Da ich bislang noch keinerlei Erfahrungen habe möchte ich hier lieber nochmal nachfragen.

Ausgangssituation ist ein Produktivserver mit etlichen Datein (2x 1,5TB). Nun kommt ein 2ter Server dazu der von den Platten her identisch ist. Nun soll aber nicht das komplette System synchronisiert werden, sondern nur die Ordner hdd1 und hdd2 im Verzeichniss /var/www/ des ersten Servers.

Ich habe bislang von DRBD und RSync gelesen, wobei DRBD eher das zu sein scheint was ich brauche. Problem ist nur die Einrichtung des Tools, zumal ich bislang gelesen habe das die Ausgangssituation immer ein leerer Server sein sol ... das ginge gar nicht.

Laut der Konfiguration von DRBD gehe ich davon aus das diese wie folgt aussehen müsste (auf beiden Servern so?):

# erlaubt das Erfassen von Statistikdaten seitens Linbit (siehe http://usage.drbd.org)
global { usage-count yes; }

# Bestimmt die Replikationsmethode
resource r0 { protocol C;
# Gibt die Netzwerkgeschwindigkeit an
syncer { rate 100M; }
# gibt an, dass zwei Nodes primär sein dürfen (per Default darf das nur einer)
net { allow-two-primaries; }
# gibt an, dass sich beide Nodes beim Starten als Primär registrieren
startup { become-primary-on both; }
on node1 {
device /dev/sda0;
disk /dev/sda;
address XXX.XXX.XXX.XXX:7788;
meta-disk internal;
}
on node2 {
device /dev/sda0;
disk /dev/sda;
address XXX.XXX.XXX.XXX:7788;
meta-disk internal;
}
}

So, nun spiegelt er ja aber nur die eine Platte, zumindest wenn ich Node als "Server" interpretiere ... außerdem kann ich Ihm hier nicht sagen welcher Server der primäre ist, denn Server 1 empfängt alle Daten und Server 2 soll ein Abbild von Server 1 sein, nie andersrum.

Irgendwie blick ich das im Moment noch nicht so richtig, kann da wer nen Denkanstoß geben?
 
soweit ich dich richtig verstanden habe möchtest du nur ein paar Ordner kopieren.

Hier stellt sich mir die Frage, wieso du nicht einfach mit Rsync arbeitest!? :confused:
Code:
rsync -e "ssh -p 22" -avAH /ORDNER --delete root@server2:/ORDNER
... das als Cron alle 10 Minuten und gut ists.

Wenn das nicht das ist was du suchst, brauch ich ne klarere Situationsbeschreibung.

DRDB ist viel zu langsam für dein Vorhaben!
 
Ja will eigentlich nur 2 Ordner abgleichen, dachte RSync ist nur für Einstellungen gut. Werds mal probieren und mich bei misserfolg nochmal melden ;)

Danke dir für den Hinweis.
 
Code:
rsync -e "ssh -p 22" -avAH /ORDNER --delete root@server2:/ORDNER
... das als Cron alle 10 Minuten und gut ists.

10 Minuten sind bei dem Datenvolumen und der hohen Anzahl an Dateien vermutlich viel zu kurz (die Zeit wird unter Umständen schon zur Berechnung der Checksummen benötigt), >=1 Stunde ist hier IMHO gesünder. Auch mit der delete-Option sollte man sehr vorsichtig umgehen, wenn man die Syncs nicht manuell anstösst oder parallele Syncs mittels Locks verhindert.
 
10 Minuten sind bei dem Datenvolumen und der hohen Anzahl an Dateien vermutlich viel zu kurz.

Halte ich persönlich für nicht richtig. Für den ersten Durchlauf (manuell gestartet) könnte das noch hinkommen. Danach synct der ja nur noch die Diffs und hat die Prüfsummen bereits gecached. Die folgenden Läufe sollten im 10 Minuten-Abstand durchaus funktionieren.
 
Schonmal ein "emerge --sync" unter Gentoo gefahren? Ist nur rsync auf wenige tausend kleinere Files, dauert aber ewig...
 
Ich hab noch in Erinnerung, dass emerge --sync recht fix ging. Das war damals auf meinem P3 mit 800 MHz. Da hat aber das kompilieren von X11 + KDE 3 Tage gedauert oO.
 
Wenn zwei bis drei Minuten für die paar hundert Kilobyte für Dich fix sind, für mich ist das langsam... In der Zeit habe ich den vollständigen Portage-Snapshot-Tarball mit seinen ~130.000 Files runtergeladen und entpackt und immernoch Zeit.

rsync ist gut beim Sparen von Bandbreite, aber dabei alles Andere als schnell.
 
DRDB ist viel zu langsam für dein Vorhaben!

Begründung? Bei mir funktioniert das ganz gut. DRBD + ocfs2 ;)
Die frage ist ob das als Backup oder als Master/Slave -System dienen soll die Lösung..
 
Last edited by a moderator:
Wie du oben entnehmen kannst gehts hier um Syncronisierung.

DRDB ist für Backups sehr gut. Für livesync kannst das in die Tonne treten! ;)
 
DRDB ist für Backups sehr gut. Für livesync kannst das in die Tonne treten! ;)

DRBD für Backups? Meiner Meinung nach (und der Meinung sind auch die Entwickler von DRBD) ist Livesync der ausschließliche Zweck von DRBD. Letztendlich kann man sich DRBD ja wie ein Software-Raid 1 über Netzwerk vorstellen. Für Backups ist es daher doch total unnütz, da natürlich auch Fehler live auf die gespiegelte Partition kopiert werden.


Zur ursprünglichen Frage: Ich denke, du solltest auf jeden Fall mit einer leeren Partition anfangen, DRBD vernünftig zum Laufen zu bekommen. Hast du denn noch unpartitionierten Platz auf der Platte, den du dafür nutzen könntest?

Wie schnell / häufig ändert sich denn der Inhalt auf der Platte? Und ist ein Verlust von den Daten der letzten x Minuten zu verkraften?

Wenn sich nicht so viele Änderungen am System ergeben und sich ein zeitlicher Versatz von x Minuten verkraften lässt, dann kannst du auch über rsync nachdenken. Die Partitionen zwischen den Servern wirklich synchron zu halten wirst du mit DRBD am Besten schaffen.
 
Last edited by a moderator:
Hi,

erstmal danke für die ganzen Postings.
DRBD hab ich mir schon genauer angesehen, war auch der Meinung das es sich für eine Synchronisation anbieten würde, wenn aber "Bordmittel" das selbe tun ...

Also Ausgangsposition ist ein voller Server (Server 1) und ein neuer frisch aufgesetzter Server (Server 2). Die Daten stammen von einem anderem Mirror und werden im 5 Minuten Takt geändert, bzw. kommen alle 5 Minuten neue Files dazu. Die 10 Minuten würden mir reichen, live wäre ideal nur muss ich halt auch auf die Bandbreite achten da ich ohnehin täglich mehr als 2 TB Traffic produziere.

Es gibt 2 Verzeichnisse auf Server 1 die eben redundant auf Server 2 gespiegelt werden sollen, dieser soll dann als Lastenausgleich fungieren. Das ist der tiefere Sinn der Geschichte ...
 
Hallo,

ich habe mich nun für DRBD entschieden und werde mich heute Abend ran machen und schaun ob ich es konfiguriert bekomme. Eine Frage habe ich noch, muss ich Speicherplatz auf den Partitionen frei lassen? Derzeit habe ich 10GB auf jeder Platte frei gelassen um einfach Auslagerungsdateien zu ermöglichen.

Könnte es da noch zu Problemen kommen? Gibt es sonst noch etwas zu beachten?

Edit: Die zu spiegelnden Daten sind teilweise bis zu 4GB groß.

Zur Konfiguration noch eine Frag, im Beispiel wird nur eine Platte verwendet:

on alice {
device /dev/drbd1;
disk /dev/sda7;
address 10.1.1.31:7789;
meta-disk internal;
}

Ich hab ja aber 2 Platten, daher würde ich aus dem Bauch raus folgendes verwenden:

on alice {
device /dev/drbd1;
disk /dev/sda1;
device /dev/drbd2;
disk /dev/sdb1;
address 10.1.1.31:7789;
meta-disk internal;
}

Problem wäre aber hierbei das er die Werte ja überschreibt (device / disk) und ich nehme mal nicht an das er daraus ein Array erstellt. Also keine Ahnung ob das so funktionieren würde.
 
Last edited by a moderator:
Du musst dazu glaube ich eine neue Resource zuweißen.

resource r0,
resource r1 ...
 
Ja wenn du mehrere Platten spiegeln willst brauchst du mehrere resourcen.
Ich hab sowas ein paar mal gemacht und würde dir gern einen Typ mitgeben.

Begrenze unbedingt die Größe der einzelnen Pools auf einen Wert unter der tatsächlichen Größe der Platten.
Theoretisch sind zwei Platten des selben Typs exakt gleich groß... praktisch können sich da aber minimale Abweichungen ergeben (auch mit der Zeit) und sobald zwei zu synchronisierende Platten nicht mehr exakt die gleiche Größe haben macht DRBD dicht.

Durch das begrenzen der Größe verschenkt man minimal Kapazität, umgeht aber eine Menge potentieller Probleme.

Ging glaube ich einfach so:
Code:
        disk {

                size 900G;
       }
 
Back
Top