Geht NFS mit Carp?

Reks30

Well-Known Member
Hallo,

ich überlege mir gerade Szenarien wie man Anwendungen für OpenBSD Systeme per NFS im Netzwerk verteilen kann. Im Prinzip geht es darum Programme nur einmal unter /usr/local zu installieren und andere Rechner holen sich das dann per readonly NFS-Mount. Dadurch braucht man nur auf einem Rechner die Packages verwalten (oder Ports kompilieren). Allerdings mache ich mir auch Gedanken über die Ausfallsicherheit, wenn alle Rechner von einem NFS-Server abhängig ist, wäre mir Redundanz ganz recht.

Daher folgende Überlegung: Carp unterstützt ja keine "Session" im Sinne einer laufenden Verbindung. NFS läßt sich über UDP oder über TCP machen. Wäre es daher möglich das verbindungslose UDP für NFS zu nutzen und dann übernimmt der Carp-Backupserver die NFS-Verbindung wenn der Master ausfällt? Oder gibt es sonst noch etwas was einen Status für NFS erzeugt, beziehungsweise muß der Server jeweils wissen welcher Client gemountet hat (was der Backuphost vom Master ja nicht wissen kann)?

Bevor ich mir die Mühe mache das mit 3 Rechnern die ich dafür erst aufsetzen muß zu testen, wollte ich erst mal fragen, ob darüber jemand mehr weiß.

Gruß
Reks30
 
Geht, aber nur mit
a) read only NFS
b) die beiden NFS filesysteme muessen *gespiegelt* sein, will heissen die exakt gleichen Inodes pro File haben (also mit gmirror/ggate spiegeln)
 
Das ist sowieso klar. /usr/local würde ich ohnehin nur Read only exportieren.
b) die beiden NFS filesysteme muessen *gespiegelt* sein, will heissen die exakt gleichen Inodes pro File haben (also mit gmirror/ggate spiegeln)

Uh, gleiche Inodes? Also gmirror kenne ich bislang nicht. Muß ich mir mal ansehen.

...Moment, habe gerade mal gesucht nach gmirror und herausgefunden das das ein FreeBSD-Tool ist. Unter OpenBSD konnte ich das nicht als Package oder Port finden. Kann es sein, das deine Antwort nur für FreeBSD gilt?

Gruß
Reks30
 
Also ich habe es heute tatsächlich mal mit 3 Testrechnern durchgespielt: Einfach so (ohne die Inodes zu beachten) geht es jedenfalls nicht. Mein Setup war folgendes: 2 mal OpenBSD 4.1 als NFS-Server aufgesetzt. Auf beiden Servern die gleichen Packages installiert und /usr/local readonly ins Lan exportiert. Beide Server gecarpt. Dann Client aufgesetzt und NFS-Mount mit UDP und dem noconnect Parameter durchgeführt: Dann überprüft welcher der beiden NFS-Server gerade Master ist. Diesen dann runtergefahren! Der andere NFS-Server wird nun Carp-Master. Wenn ich jetzt vom NFS-Client auf /usr/local zugreife, bekomme ich folgende Meldung:
ls: /usr/local: Stale NFS file handle

Was auch immer das meint. Schade, wäre eine interessante Methode gewesen wenn es einfach so funktionieren würde.

Wie ich gleiche Inodes für die gleichen Dateien, auf 2 verschiedenen Platten von 2 verschiedenen OpenBSD-Servern erreichen kann, entzieht sich leider meiner Kenntnis.

Gruß
Reks30
 
Mache es doch mit Perl...

Eine OpenBSD Maschine ist für das Handling mit den pkgs und gibt
die Liste der installierten Programme mit.

Auf den client lauft dann ein Perl script, welche dafür sorgt, dass
alle packages der liste entsprechen und notfalls per ntfs nachladen.

Gg
 
Dein Vorschlag würde heissen, das dann doch alle Pakete auf jeder Maschine lokal liegen würden (wenngleich auch synchronisiert). Genau das wollte ich eigentlich nicht. Dann ist es mir lieber ich nehme nur einen NFS-Server und der muß dann eben entsprechend zuverläßig sein (Raid 1, etc.) und verzichte auf die zusätzliche Redundanz durch Carp.

Es geht mir nicht nur um das synchron halten, sondern vor allem auch um das sparen von Plattenplatz (für alte Rechner mit kleiner Platte) und das sofort nach dem installieren zur Verfügung stehen von zusätzlichen Paketen (bei Testrechnern die häufig neu installiert werden).

Übrigens braucht man für deinen Vorschlag kein Perl. Ein einfaches rsync würde da wohl schon reichen.

Gruß
Reks30
 
Oh sorry, ich hatte nicht gesehen, dass wir im OpenBSD Forum sind. Also entweder du kriegst ein networked RAID1 unter OpenBSD ans Laufen, oder du machst es per Hand :)

Wenn deine Partitionen gleich gross sind, dann am besten beide Filesysteme umounten, folgendes tun, und wieder remounten. Dann sind beide definitiv identisch.
Code:
dd if=/dev/PARTITION | ssh root@remotehost "dd of=/dev/PARTITION"
 
Zurück
Oben