Symlinks auf gemeinsam genutztem Speicher

Symlinks auf gemeinsam genutztem Speicher

Angenommen, ich habe einen Glusterfs-Mount, der von mehreren Servern gemeinsam genutzt wird und auf den eine Anwendung zugreift, und Protokolle werden in ein Verzeichnis geschrieben, das sich normalerweise im Verzeichnisbaum dieses Mount-Punkts befindet. (Angenommen, /foo ist unser gemounteter gemeinsam genutzter Speicher und /foo/bar ist das Verzeichnis, in das Protokolle geschrieben werden.) Um zu verhindern, dass alle Server versuchen, in dieselbe Protokolldatei zu schreiben, möchte ich /foo/bar zu einem symbolischen Link auf ein anderes, lokales Verzeichnis, /var/bar, machen. Ist es möglich, lokale symbolische Links auf einem Mount mit gemeinsam genutztem Speicher zu erstellen? Und könnten diese symbolischen Links auf andere Server abgebildet werden, die auf diesen Speicher zugreifen? Oder wenn nicht, gibt es eine andere Möglichkeit, dies zu umgehen, wie z. B. Loop-Geräte? Angenommen, das Ändern des Verzeichnisses, in das Protokolle geschrieben werden, ist nicht möglich.

Antwort1

Wenn das Dateisystem symbolische Links unterstützt, werden diese (gemäß dem POSIX-Standard) auf dem Client und nicht auf dem Server interpretiert. Daher sollten Sie in der Lage sein, auf jedem Unix- oder Unix-ähnlichen System wie Linux zuverlässig symbolische Links zu anderen Dateisystemen herzustellen.

Zum Beispiel:

/foo        A gluster remote file system
/var        A local file system

Wenn /foo/bares sich um einen symbolischen Link handelt /var/log/myhost, schreibt jede Maschine, die in /foo/bar schreibt, in das lokale /var/log/myhost auf dieser Maschine.

Wenn /var/loges jedoch nicht existiert, schlägt der Schreibvorgang mit einer Fehlermeldung fehl, die Sie überraschen wird. (Versuchen Sie es) Stellen Sie also sicher, dass es /var/logexistiert. Das ist kein Problem, da /var/loges in den meisten Systemen bei der Installation erstellt wird. Was jedoch, wenn der Link dorthin führte, /var/log/dirname/filename.txtbesteht eine gute Chance, dass /var/log/dirnamees noch nicht existiert. Ich bin schon einmal auf dieses Problem gestoßen.

(Ich glaube, es gibt Beispiele hierfür in Kapitel 28 von The Practice of System and Network Administration, wo empfohlen wird, von vernetzten Dateisystemen aus auf /etc/ zu verlinken.)

Also, ja, Sie können dies mit symbolischen Links tun. Allerdings kann es Ihre Kollegen verwirren. Ist es möglich, der Software zu sagen, dass sie einfach in schreiben soll /var/log/foo? Das wäre weniger verwirrend und nachhaltiger. Ihre Kollegen werden es Ihnen danken.

Antwort2

Es hängt vom gemeinsam genutzten Dateisystem ab. Aber im Allgemeinen funktioniert es, wenn das Remote-FS Symlinks unterstützt. Ich kann Symlinks auf dem Gluster-Volume erstellen und es ist ok (getestet).

Antwort3

Vielleicht möchten Sie symbolische Links wie diese einrichten?

/foo      - Gluster mountpoint
/var/log  - local filesystem mountpoint

Ein Dienst auf dem lokalen Server ist so konfiguriert, dass er sich in anmeldet /foo/log/app.log. Dieses /foo/logVerzeichnis sollte pro Server vorhanden sein, sich aber auch auf dem Gluster-Volume befinden, damit andere das Protokoll bei Bedarf überprüfen können.

Dafür würde ich vorschlagen, zwei Symlinks zu erstellen. Auf jedem Server:

# mkdir /foo/logs/$(hostname)
# ln -s /foo/logs/$(hostname) /var/log/app

Und auf dem Gluster-Volumen (wird nur einmal benötigt):

# ln -s /var/log/app /foo/log

Wenn eine Anwendung in schreibt /foo/log/app.log, wird der symbolische Link /foo/login aufgelöst /var/log/app. Nun /var/log/appist ein symbolischer Link im lokalen Dateisystem jedes Servers, und jeder Server verweist auf ein anderes Verzeichnis im Gluster-Volume. Auf einem Server /var/log/appverweist also auf /foo/logs/server1.example.comund auf /foo/logs/server2.example.comeinem anderen auf .

/foo/log/app.log -> /var/log/app/app.log -> /foo/logs/server1.example.com/app.log

verwandte Informationen