Anfängerfrage. Ich muss das hier bauen:
/shared
Ordner ~500 GB an Dateien, jede Datei ~1 MB.- Zwei Boxen (Server1 und Server2), verbunden über ein 1-GB-LAN
- Jede Box muss Lese-/Schreibzugriff auf die Dateien haben, daher sind beide Clients
- Ich möchte, dass die Dateien auf beiden Boxen repliziert werden. Jedes Mal, wenn eine Datei auf einen Server geschrieben wird, sollte die gleiche Datei auf dem anderen vorhanden sein.
Meine Fragen zu GlusterFS:
- Es dupliziert die Dateien auf derselben Box?. Beispielsweise befinden sich die Dateien auf
/shared
und die Einbindung in/mnt/shared
. Es wird auf jedem Server 1 GB Speicherplatz benötigt? - Soll ich stattdessen direkt das Dateisystem verwenden und lokal darauf schreiben
/shared
? Funktioniert die Replikation auf diese Weise, ohne einen Client einzubinden?
Wenn jemand eine andere Möglichkeit kennt, dieses Setup durchzuführen, wäre ich sehr dankbar. Vielen Dank im Voraus.
Antwort1
Tatsächlich ist Gluster für dieses Szenario perfekt geeignet. Sie erhalten bidirektionale Replikation und die Möglichkeit, das Dateisystem von beiden Rechnern aus zu mounten, was Ihnen (theoretisch) die doppelte effektive E/A-Kapazität von NFS und aktives Failover bietet, falls eine der Boxen ausfällt.
Das Problem bei dieser Art der Ausführung von Active rsync ist die Blockierung von I/O aufgrund von Dateisperren. Abhängig von Ihrer Anwendung und der Änderung der Daten kann dies irrelevant oder katastrophal sein! Verteilte Dateisysteme haben sehr spezifische Sperrsemantiken, die dies verhindern. Selbst wenn inotify heutzutage eine bessere Sperrung hat (als ich es das letzte Mal ausprobiert habe, war dies nicht der Fall), können Ihre Dateizugriffe blockiert werden, je nachdem, ob Ihr Netzwerk mit den Änderungen zurechtkommt. Dies sind alles theoretische Vorbehalte, aber es lohnt sich, sie zu berücksichtigen, je nachdem, was Ihre Anwendung tut.
Antwort2
Ich habe es endlich geschafft, das Problem mit GlusterFS in beiden Boxen zu lösen. Einige Dinge, die ich dabei gelernt habe:
- Zuerst habe ich ein generisches RAID 1-Setup ausprobiert. Das Hauptproblem dabei ist, dass der Client immer TCP verwendet, um beide Server zu kontaktieren, selbst wenn sich einer von ihnen auf derselben Maschine befindet. Daher muss ich die Clientkonfigurationen ändern, um das lokale TPC-Volume durch ein Direktzugriffs-Volume (Speicher/POSIX) zu ersetzen.
- Um die Netzwerkverbindung nicht zu überlasten, verwendet jeder Client den lokalen Speicher mit der Direktive
option read-subvolume
. Um die RAID1-Integrität zu wahren, prüft GlusterFS natürlich auch immer andere Volumes, aber die eigentliche Datei wird direkt von der Festplatte abgerufen. - Die Leistung ist gut, aber der Client-Prozess scheint Speicherprobleme zu haben. Ich denke, es hängt mit dem Quickread-Volumen zusammen, ich muss das weiter untersuchen.
Geänderte Client-Konfiguration:
# Server1 configuration (RAID 1)
volume server2-tcp
type protocol/client
option transport-type tcp
option remote-host server2
option transport.socket.nodelay on
option transport.remote-port 6996
option remote-subvolume brick1
end-volume
volume posix-local
type storage/posix
option directory /shared
end-volume
volume locks-local
type features/posix-locks
subvolumes posix-local
end-volume
volume brick-local
type performance/io-threads
option thread-count 8
subvolumes locks-local
end-volume
volume mirror-0
type cluster/replicate
option read-subvolume brick-local
subvolumes brick-local server2-tcp
end-volume
.....
Beantwortung meiner beiden Fragen:
Werden die Dateien auf derselben Box dupliziert?
Nein, das FS wird mit FUSE gemountet. Aktuelle /etc/fstab-Zeile:
/etc/glusterfs/client.vol /mnt/shared glusterfs-Standardwerte 0 0
Soll ich stattdessen direkt das Dateisystem verwenden und lokal auf /shared schreiben? Funktioniert die Replikation auf diese Weise, ohne einen Client zu mounten?
Nein, verwenden Sie zum Lesen/Schreiben immer gemountete Volumes. Die direkte Verwendung des Dateisystems kann zu Inkonsistenzen führen.
Antwort3
Es wäre viel einfacher einzurichtenrsync zur aktiven Spiegelung, oder richten Sie einfach eine NFS-Freigabe ein und lassen Sie beide vom selben Laufwerk ziehen.