[gelöst]Daten von Server_1 nach Server_2 bringen

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
Antworten
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Sodale, brauche mal Hilfe, Ratschläge oder Weisheiten.

Folgende Konstellation ist gegeben:
  • 2 Datenbankserver (Win2K, Firebird)
    • per Taskplaner werden die DB-Server gestoppt, jeder Server kopiert seine Datenbanken auf einen separaten Server (samba-share), danach wieder gestartet
    -2 Linux-Server (archlinux, samba)
    • Geschwindigkeit : gemittelt 14 Mb / sec [edit]
    • Server A: kleine Platte mit System, S-ATA Mirror mit 2x500 Gb im Wechselrahmen
      Server B: kleine Platte mit System, IDE-JBOD mit 4X 150 Gb
Der Grund für die Sicherung auf 2 separate Server liegt in dem Zeitfenster, das ich habe: 3 Stunden. Die Zeit ist ausreichend.

Was ich suche/brauche: einen Weg, regelmäßig (Cron) einen Teil der Daten von Server B zu Server A zu kopieren, damit der Stapel außer Hause ist.

Der Weg über rsync und verwandte Tools fällt aus da Delta-Vergleiche über Datenbanken keinen Sinn macht (bis zu 60 Gb pro DB), GUI-Tools auch.

Wenn jemand eine Idee oder einen Gedanken hat - immer her damit

danke, querdenker

[edit :] dezenter Berechnungsfehler, wie sich hier herausgestellt hat. War gestern wohl doch zu spät
Zuletzt geändert von querdenker am Montag 20. August 2007, 15:30, insgesamt 2-mal geändert.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

querdenker hat geschrieben:Der Weg über rsync und verwandte Tools fällt aus da Delta-Vergleiche über Datenbanken keinen Sinn macht (bis zu 60 Gb pro DB)
Hallo querdenker!

rsync kennt den Parameter "--whole-file". Damit werden immer komplette Dateien übertragen. (without rsync algorithm)

rsync kennt den Backup-Modus (--backup) der könnte dir evt. auch hilfreich sein.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

querdenker hat geschrieben:Der Weg über rsync und verwandte Tools fällt aus da Delta-Vergleiche über Datenbanken keinen Sinn macht (bis zu 60 Gb pro DB), GUI-Tools auch.
Hast du es getestet oder vermutest du das?
Rsync kann auch damit umgehen, wenn die Daten nur an anderen Stellen sind. Wenn sie allerdings zu sehr vermischt oder komprimiert sind, dann hilft es nicht.
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

@gerold: Danke erstmal, werde mir rsync nochmal in Ruhe anschauen bezüglich der Optionen

@Joghurt: ich werde einen Teufel tun und via Delta Datenbanken mit einander vergleichen. Insbesondere wenn die Datenbanken in sich selber Filesysteme sind, wie das zum Beispiel bei Firebird der Fall ist.

Als Quickshot läuft momentan auf Server_A vsftp und von Server_B wird via ncftpput hochgeschaufelt. Allerdings nervt der FTP-Overhead. Der bremst deutlich aus.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

querdenker hat geschrieben:@Joghurt: ich werde einen Teufel tun und via Delta Datenbanken mit einander vergleichen. Insbesondere wenn die Datenbanken in sich selber Filesysteme sind, wie das zum Beispiel bei Firebird der Fall ist.
Dann hast du auch beim normalen Kopieren genau dasselbe Problem...
BlackJack

Von Deltas würde ich bei so grossen Dateien auch unbedingt abraten. Der Algorithmus der das "kleinste" Delta sucht braucht ewig und Unmengen an Speicher.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Aber rsync erstellt ja kein kleinstes Delta...
The rsync algorithm
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

querdenker hat geschrieben:Allerdings nervt der FTP-Overhead. Der bremst deutlich aus.
Hallo querdenker!

FTP ist so ziemlich die schnellste Art Dateien zu übertragen, die ich kenne. Von welchem Overhead sprichst du. Den gibt es bei FTP praktisch nicht.

Denke vielleicht doch lieber über einen guten FTP-Server wie z.B. ProFTP nach.

Als Client empfehle ich "lftp". Damit habe ich nur die besten Erfahrungen gemacht. Siehe auch: http://gerold.bcom.at/codeschnipsel/aut ... pload_ftp/

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

gerold hat geschrieben:
querdenker hat geschrieben:Allerdings nervt der FTP-Overhead. Der bremst deutlich aus.
Hallo querdenker!

FTP ist so ziemlich die schnellste Art Dateien zu übertragen, die ich kenne. Von welchem Overhead sprichst du. Den gibt es bei FTP praktisch nicht.
Dafür ist das Protokoll arkan und unterstützt weder Verschlüsselung noch Kompression. Rsync ist da schon wesentlich moderner, und dass es langsamer als FTP ist, glaube ich kaum.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

@gerold:
Ich ziehe meine Aussage bezüglich der Geschwindigkeit des FTP-Protokolles zurück. Habe gerade noch mal ein paar Zahlen durchgerechnet und werde morgen wohl mal ein wenig umbauen. 'nen guten nativen FTP-Client für Win2K suche ich noch. Aber auf Linux bleibe ich bei meinem vsftpd und meinem ncftpput. :wink:

@Joghurt:
Wenn ich eine Datei kopiere, werden wenn überhaupt nur im physikalischen Dateisystem Fragmente angestellt.
Mal eine grobe Übersicht:
Eine FB/IB-DB ist intern in pages organisiert. Am Anfang ein paar pages mit allgemeinen Informationen, wie z.B. first und last page, transaction statistics, checksums und unter anderem auch ein paar pages mit allocations für andere pages. Am Ende der Datei sind preallocated pages zu finden, mittendrin sind pages mit Inhalt, zum Beispiel ein BLOB. Achja, und es gibt noch pages, die ein DELETED-Flag haben können.
In der Kopie von vorgestern ist in der Page 0x5FE437 an Position 0x0F70 das Byte 0x82 gespeichert. Heute hat der Benutzer etwas in der aktuellen DB geändert, an der selben Stelle Steht jetzt ein 0xFF. Daraus ergeben sich DB-interne neue Checksums, die wiederum andere Informationen in der page allocation haben. Dann stellt der Kunde fest, das er da mit den Sachen Mist gemacht hat und löscht die in der Applikation(Er löscht zum Beispiel 10 von 30 Seiten Text, der in BLOBs als RTF gespeichert ist. Resultat sind mehrere Pages mit dem DELETED-Flag, mitten in der DB. Die sind natürchlich auch wieder zur Verwendung freigegeben. Der Kunde erfasst neue Daten, die an die Stelle kommen, wo eine page ein DELETED-Flag hat.
Die Datei hat übrigens eine Größe von etwas mehr als 30 GB. Am Ende des Abends wirst du feststellen, das ein Vergleich nichts bringt, da die Dateien a) zu groß sind und b) sich zu viel ändert.

@birkenfeld: das ist rein hausinterner Datenverkehr über ein Layer2/3 Gigabit Netz, der geht nicht nach draußen. Und ich bin der einzige, der Zugriff auf diese Bereiche hat. Somit ist das Thema Verschlüsselung hinfällig.
Und was die Kompression angeht - da könnte ich die Dateien besser vorher durch den LZMA-Algo schieben, der kann unsere DBs teilweise von 270 auf 17 MB eindampfen. Dauert allerdings auch wieder.

@alle: Gehe jetzt schlafen, bin müde. Nachher geht's weiter.

nacht, querdenker
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

querdenker hat geschrieben:'nen guten nativen FTP-Client für Win2K suche ich noch. Aber auf Linux bleibe ich bei meinem vsftpd und meinem ncftpput.
Hallo querdenker!

ncftpput läuft unter Cygwin.

lftp läuft Unter Cygwin

Windows hat ein eigenes FTP-Programm mit dabei
- http://www.nsftools.com/tips/MSFTP.htm
- http://www.textheavy.com/tutorials/winftp.html
- http://www.howtogeek.com/howto/windows/ ... mand-line/

Und wenn du ein gutes GUI-Programm brauchst: http://www.filezilla.de/

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

@Joghurt: Dann eben nicht das kleinste. Probiers einfach mal aus. Es ist echt furchtbar langsam und speicherintensiv bei Dateien im Gigabytebereich.
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

@gerold:
Und du kommst mir mit der eingebauten ftp-krücke. Sprach ich nicht von guten FTP-Clients? Hätte vielleicht sagen sollen, das die Datenbanken nicht alle platt in einem Verzeichnis liegen, sondern nach Kunde in Unterordnern. Die kann der Standard-FTP-Client von Windows meines Wissens nach nicht rekursiv durchlaufen und übertragen.
Hast du Erfahrung mit Cygwin-Programmen, die über den Taskplaner gestartet werden? Laufen die sauber?
Weil ich will die DB-Server soweit als nur möglich frei halten von irgendwelcher Zusatz-Software. Die einzige Ausnahme ist bisher SciTE als SingleFile.

danke, marcus
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

querdenker hat geschrieben:@gerold:
Und du kommst mir mit der eingebauten ftp-krücke.
[...]
Hast du Erfahrung mit Cygwin-Programmen, die über den Taskplaner gestartet werden? Laufen die sauber?
Hallo querdenker!

O.K., O.K. -- wenn du nicht weißt, welche Dateien du übertragen möchtest, sondern einen Ordner rekursiv durchlaufen willst, dann bist du mit dem in Windows eingebauten FTP nicht gut beraten. ;-)

Meine Erfahrungen mit Cygwin: --> Cygwin ist das bessere Windows. In meiner Firma und bei Kunden, auf die wir per Fernwartung zugriff auf die Server und Kassen-Arbeitsstationen haben, läuft auf jedem Windows-Rechner ein voll installiertes Cygwin. Ich möchte es nicht mehr missen.

Es ist kein Problem, Bash-Skripte über den Taskplaner aufzurufen. Falls es doch mal Probleme geben sollte, dann lagere ich den Aufruf in eine CMD-Datei aus.

Oft muss man bash.exe als Programm angeben. Aber das ist ja kein Problem: ``C:\cygwin\bin\bash.exe --login -i -c "<Pfad und Dateiname der Shell-Datei>"``

Cygwin läuft sehr stabil. Den OpenSSH-Daemon kann man als Windows-Dienst laufen lassen. Wie man die einzelnen Programme korrekt einrichtet/installiert oder als Dienst laufen lassen kann, steht im Ordner "C:\cygwin\usr\share\doc\Cygwin".

OpenSSH installiert sich fast von selbst mit ``ssh-host-config``. Wie man Rsync als Dienst einrichtet, steht in der Datei "rsync-2.6.6.README". Usw.

Ich kann nur Positives berichten.

mfg
Gerold
:-)

PS: Warum schreibe ich nur immer so viel? ;-)

PS2: Ich hänge immer an die Umgebungsvariable PATH den Pfad zu den Cygwin-Binaries an: "C:\cygwin\bin". So kann ich auch von der DOS-Kommandozeile aus auf so nette Programme wie "less", "man", "rm", usw. zugreifen.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

@gerold: Ich weiß schon, was ich für Daten übertragen will. Ich will bloß nicht bei jeder Änderung (Kunde kündigt, Kunde kommt neu dazu) Scripte anpasssen müssen.
Ich habe auf den Seiten von ncftp gesehen, das es einen windows-client von denen gibt. Den werde ich mir nachher (lang lebe freie Gleitzeit) in der Firma mal zu gemüte führen. Habe zu hause kein Win, wo ich testen könnte.

thx, marcus

ps: weiß ich nicht :lol:
ps2: klingt logisch

ps3: Ich gebe nachher mal Rückmeldung, wie der ncftp-Client unter Windows performt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Naja, FTP selbt kann keine Verschlüsselung, aber ProFTPd kann wunderbar FTP in einen SSL/TLS-Tunnel packen. Und das Protokoll wird von zum Beispiel FIleZilla wunderbar verstanden. Den letzten FTP-Server den ich gezwungendermaßen einrichten musste, bis ich SFTP durchgesetzt habe, der hat keine unverschlüsselten Verbindungen angenommen.
Kompression könnte man unter FTP mit einem gzip-FIlter implementieren, aber das ist nicht standarisiert, das müsstest du dann selbst implementieren. Andere Verschlüsselungsalgoritmen wie bzip2 oder LZMA sind für sowas wohl weniger geeignet, da das Komprimieren zu lange dauert, da sollte man eher über LZO(P) von Markus F.X.J. Oberhumer (Bekannt als UPX-Autor) nachdenken.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Mal zwischendrin den Stand der Dinge:

Auf den Windows-Servern läuft jetzt über den Taskplaner ncftpput. Gibt es übrigens direkt als Windows-Version(ohne Cygwin, wobei das Thema noch nicht ganz ausgestanden ist. Da komme ich eventuell noch mal auf dich zurück, Gerold.)

Auf den Linux-Servern läuft jetzt der proftpd, die Speicherorte als virtuelle Server, so das dort direkt hingeschrieben werden kann.

Laut ncftpput komme ich von der Windowsseite auf 30 - 35 MB /sec, was schon mal 'ne Hausnummer ist. Via SMB lag ich bei ca 14 MB/sec (47 GB in 56 min), was auch schon nicht so schlecht war. :oops: Stelle gerade fest, das ich mich im ersten Beitrag dezent verrechnet habe ,

Wenn ich jetzt noch ein paar gepflegte Jobs (sync + eject / mount der Wechselplatten) über cron am Start habe, ist das Thema abgeschlossen.

Danke an alle mit ihren Ideen und Einwänden.
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Letzter Nachtrag: Die Jobs via cron laufen auch (schon seit längerem). Das System schnurrt wie eine Miezekatze :D
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

querdenker hat geschrieben:Die Jobs via cron laufen auch (schon seit längerem). Das System schnurrt wie eine Miezekatze :D
Hallo querdenker!

Danke, dass du mich auf "ncftpput" gestoßen hast. :-)

"ncftpput" kann einen TAR-Stream **direkt** von STDIN lesen (während der Erzeugung) und per FTP zum Server hochladen. Das ist schon ein tolles Feature, das ich seit heute für eine Sicherung einsetze. 8)

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten