Ich habe mich gefragt, ob es möglich ist, zwei Server zu spiegeln, so wie Sie Dateien auf einen Server hochladen könnten und sie auf den anderen Server übertragen würden usw. Ich bin neugieriger auf die Dateispiegelung, sie muss nicht die Paketverwaltung spiegeln und Setup (Aber das wäre auch cool!)
8
Antworten:
Es kommt sehr auf den jeweiligen Job an.
Warum brauchen Sie eine Dateispiegelung? Möchten Sie so etwas wie eine Website oder ein Content-Repository aktualisieren, wo es normalerweise in Ordnung ist, regelmäßig zu aktualisieren? Oder benötigen Sie eine Echtzeitsynchronisation von Daten?
Für die regelmäßige asynchrone Spiegelung von Dateien ist es normalerweise ausreichend, über einen Staging-Bereich zu verfügen, in den Sie alle Ihre Daten hochladen. Und von wo aus Sie es an die Server verteilen. In Ihrem Fall - mit zwei Servern - können Sie auf srv1 ein Staging-Fileshare erstellen, in das Sie die Daten übertragen (über FTP, NFS, DAV, SFTP usw.), und dann die Dateien per Cronjob in die "Live" -Verzeichnisse von synchronisieren srv1 und srv2. In diesem Fall können Sie rsync am einfachsten verwenden, indem Sie ein ssh-Schlüsselpaar generieren, das Sie für die Datenübertragung verwenden und das auf allen Servern in Ihrem Cluster autorisiert ist.
Beispiel:
Dies sollte Ihnen eine Grundidee geben. Natürlich möchten Sie die rsync-Aufrufe in einige Skripte einschließen und eine ordnungsgemäße Sperre implementieren, damit sie nicht zweimal ausgeführt wird, falls die Synchronisierung länger als 5 Minuten dauert usw. Außerdem ist es selbstverständlich, dass ein Staging-Bereich nicht obligatorisch ist. Sie können auch srv1: Produktion direkt mit srv2: Produktion synchronisieren. Nur als srv2 könnten Daten angezeigt werden, die bis zu 5 Minuten älter sind als die von srv1. Welches könnte ein Problem sein, abhängig davon, wie Sie zwischen den beiden balancieren.
Eine andere Möglichkeit, Dateien asynchron zu verteilen, besteht darin, sie als RPM- oder in Ihrem Fall als Deb-Dateien zu verpacken. Stellen Sie diese in ein zentrales Repository und lassen Sie sie über etwas wie cfengine, monkey oder eine auf DIY-Nachrichtenbussen basierende Lösung installieren / aktualisieren. Dies hat den netten Nebeneffekt der Versionierung der bereitgestellten Daten, ist jedoch nur für kleinere Datenmengen geeignet, die Sie selbst erstellen und bereitstellen (wie Versionen Ihrer eigenen Software). Sie möchten damit keine TBs an Daten verteilen, und es ist auch nicht geeignet, Inhalte zu spiegeln, die sich wie jede zweite Minute oder so mit hoher Häufigkeit ändern.
Wenn Sie Daten nahezu in Echtzeit replizieren müssen, aber nicht unbedingt synchron, anstatt von Zeit zu Zeit einen Cron aufzurufen, können Sie Ihre Synchronisierungsskripte mit einer auf Inotify basierenden Methode wie dem bereits erwähnten Incron aufrufen. Eine andere Möglichkeit besteht darin, Gamin zu verwenden (das auch inotify verwendet, wenn es im Kernel vorhanden ist) und Ihren eigenen kleinen Synchronisierungsdämon zu schreiben. Wenn nicht alle Dateien über z. B. SFTP auf einen Server hochgeladen werden, können Sie überprüfen, ob Sie mit Ihrem SFTP-Server Hooks definieren können, die nach bestimmten Ereignissen aufgerufen werden, z. B. beim Hochladen von Dateien. Auf diese Weise können Sie Ihren Server anweisen, Ihr Synchronisierungsskript auszulösen, wenn neue Daten hochgeladen werden.
Wenn Sie eine synchrone Echtzeitspiegelung von Daten benötigen, ist möglicherweise ein Cluster-Dateisystem in Ordnung. DRDB wurde bereits benannt. Es ist sehr gut für die Replikation auf Blockebene geeignet und wird häufig für hochverfügbare MySQL-Setups verwendet. Vielleicht möchten Sie auch einen Blick auf GFS2, OCFS2, Lustre und GlusterFS werfen. Obwohl Lustre und GlusterFS für ein Setup mit zwei Servern nicht wirklich geeignet sind.
quelle
Grundsätzlich haben Sie 3 Möglichkeiten:
quelle
cron + rsync = gespiegelte Verzeichnisse / Dateien
quelle
Abhängig von Ihrem spezifischen Anwendungsfall - Sie könnten etwas Ähnliches wie DRBD verwenden. Http://www.drbd.org/
quelle
Wenn Sie versuchen, hier eine Backup-Lösung zu erstellen (was ich persönlich in fast demselben Setup getan habe), seien Sie vorsichtig. Es gibt viele verschiedene Thigns, gegen die Sie eine Sicherungskopie erstellen müssen. Eine der (wohl) größten ist das Löschen von Akzenten - jedes Live-Replikationssystem repliziert nur die Löschung und bietet keine Sicherheit. Dafür funktioniert die tägliche Replikation, ist aber eine ziemlich schwache Antwort. Versuchen Sie es mit RSnapshot.
Unison mag für Sie arbeiten, aber ich habe keine persönliche Erfahrung.
Das Ausführen von Rsync in beide Richtungen mit den aproprate-Flags kann funktionieren, hat jedoch das ziemlich schwierige Problem, wie gelöschte Dateien ohne spezielle Behandlung behandelt werden. Es stellt einfach die Dateien wieder her, was in Ordnung ist, wenn Sie nie etwas wie mich löschen, aber ein bisschen sonst arm. Es macht auch seltsame Dinge, wenn eine Datei verschoben wird.
Was auch immer Sie tun, wenn eine Situation eintreten kann, in der Dateien an beiden Enden gleichzeitig bearbeitet werden können, haben Sie ein Problem. Unison ist die einzige Lösung, von der ich weiß, dass sie dies sogar nahezu zufriedenstellend bewältigen kann.
quelle
Wenn es sich um eine Einbahnstraße handelt (ich meine, immer von einem Server zu einem anderen Server, aber nicht umgekehrt), können Sie sie verwenden
incron
. Es ist wie Cron, basiert jedoch auf Dateisystemereignissen.Jedes Mal, wenn eine Datei erstellt oder geändert wird, wird ein scp oder rsync für den anderen Server ausgelöst.
Bidirektional hat das Problem der Schleifen :).
quelle
es hängt von Ihren Bedürfnissen ab ..... Ich habe ein sehr "billiges und einfaches" Setup für Cluster-Webserver.
Ich habe einfach einen "Dateiserver" (NFS), auf dem alle Webserver die folgenden Verzeichnisse bereitstellen:
ganz einfach und funktionierend
quelle
Clonezilla kann auch angeschaut werden, welche rsync verwendet
quelle