napp-it cs webgui (copy and run, single/multi Server, beliebiges OS)

gea

Ensign
Registriert
Dez. 2024
Beiträge
129
Neu in napp-it cs Jul.09: Jobtyp: Filesync mit rclone
napp-it — Web-based ZFS NAS/SAN Appliance

Sync: "Server 1 ZFS Dateisystem1" -> "Server 2 Dateisystem 2"



Bevor jetzt alle sagen, sowas gibts doch schon lange mit rsync und robocopy und zfs send,
hier die Featurelist

  • Direktes Sync any to any also auch z.B. Windows <-> Free-BSD <-> Solaris (Daisy Chain fähig)
  • Sync verschlüsselt über z-stream Tunnel mit Einmalschlüssel (https://github.com/guenther-alka/z-stream/releases)
  • Restartfähig (filebasiert) im Gegensatz zu inkrementeller Replikation
  • erstellt ZFS Snaps (Source und Destination)
  • ACL bleiben erhalten (innerhalb eines OS)
  • sinnvoll bis ca 1TB, darüber ist zfs send unschlagbar schneller

seit letzter Version

  • Single folder (/opt/csweb-gui) copy and run, keine Abhängigkeiten ( https://www.napp-it.org/downloads_en.html )
  • Frontend Web-GUI zum Verwalten des lokalen Servers (frei) oder einer Gruppe über eine verschlüsselte Backendverbindung
  • Frontend und Backend beliebiges OS (Free-BSD, Illumos, Linux, OSX, Solaris und Windows
  • 2FA mit Handy Authenticator
  • S3, Storage Spaces und ZFS (auch Windows) mit ACL, User und Share Verwaltung
  • verschlüsselte Replikation unverschlüsselter Dateisysteme mit z-stream
  • einfach erweiterbar um eigene Menüs
    (optimiert auf Claude KI unterstützes Arbeiten, https://www.napp-it.org/pdf/csweb-gui_use_ai.pdf)
 
  • Gefällt mir
Reaktionen: JohnMcLane87
Beispiel?

Ich bin jetzt seit 20 Jahren in der IT, entwickle seither Storage Management Software, wüßte aber ncht welche Software ein ähnliches Fähigkeitsprofil hat.
 
Nein,
ich gehe davon aus, dass der Kommentar eher eine retorische Bemerkung war.
 
So ähnlich würde ich das auch sehen. :-)

Davon abgesehen wundert mich es aber, das Dein Beitrag so wenig Resonanz bekommt. Vermutlich sind die meisten schon in Urlaub.
 
Ich kenne noch macOS Programme, da war Installation einer App kopieren eines Ordners und Deinstallation löschen desselben. Das ist auch mein Ansatz für eine Storage Management GUI, alles in einem Ordner, Null Abhängigkeit, egal welches OS, selbst bei Windows.

ps, gibt auch Foren mit > 2M views dazu
https://hardforum.com/threads/openz...-storage-spaces-with-napp-it-web-gui.1573272/

.. hab gerade gesehen, > 3M views
 
Zuletzt bearbeitet:
Nicht jeder hat einen Cluster mit einem Dutzend Servern, egal welches OS, egal ob 1GB mini IoT Device oder Petabyte System, egal ob Storage Spaces, S3 Object Storage oder ZFS und möchte alles zentral managen, mit einfachem, schnellem verschlüsseltem Filesync oder ZFS Replikation any to any z.B. via https://github.com/guenther-alka/cs-stream

Genau das ist aber unsere Zielgruppe mit napp-it cs. Insbesondere S3 Integration ist ein heißes Eisen. Damit kann man lokale Dateien einfach und sicher ins Internet stellen (private Cloud z.B. mit RustFS). Auch kann RustFS eigenständig (set and forget) zwei Server oder Buckets bidirectional syncron halten. Hochverfügbarkeit und realtime Backup übers Internet oder Lan einfach so.

Was fehlt ist die Verknüpfung "Shared multiuser SMB mit ACL" und Object Storage das eben kein "multiuser locking mit file ACL" kann. Hier setze ich mit dem Modul cs-sync an.
Damit möchte ich zwei Ordner z.B. eine Nas Freigabe und eine S3 Freigabe eventgetriggert in Echtzeit (bei Änderung, kein Filevergleich) in sync halten inkl. SMB ACL. Ganz egal welches OS, das ist mit Go jetzt möglich, mit der Option Realtime AutoBackup der Änderungen übers Netz auf ein Backupsystem, siehe https://github.com/guenther-alka/cs-sync

Ich würde mich freuen wenn ich Feedback oder Anregungen für das Konzept erhalte, erste Preview mit napp-it cs und Echtzeit Sync demnächst. Wer sowas ernsthaft testen möchte, sollte sich Claude Pro zulegen mit Erweiterungen/Agents Filesystem und Desktop Commander (Windows oder andere mit Plink/Scp SSH Zugriff für Claude auf Scripts, Logs und Members) für Analysen, Stresstests, Audits etc.
 
Echtzeit Sync und Verhalten bei langsamen oder instabilen Verbindungen

Das neue ereignisgesteuerte (bei Dateiänderungen) Echtzeit-cs-sync in napp-it cs ist nicht nur eine perfekte Methode, um lokalen S3-Objektspeicher und lokale SMB-Shares bidirektional synchron zu halten, sondern ein neuer Ansatz für die Echtzeitsynchronisation zwischen Daten und einem remote Backupserver, am besten kombiniert mit ZFS- Snaps auf dem Ziel, um Backup-Versionen zu haben, z. B. Snaps stündlich-behalte 24, täglich-behalte 7, ..

ein wichtiger Aspekt bleibt:
Verhalten bei langsamen oder instabilen Verbindungen

Der Umgang mit Verbindungsabbrüchen und langsamen Leitungen ist ein zentrales Entwicklungsziel.

Verbindungsabbrüche (wackeligest WLAN, Link-Flaps) sind normaler Betrieb, keineFehler. Kein Timeout, kein Alarm, nur eine Log-Zeile. Jede Änderung, die die Gegenseite im Moment nicht erreichen kann, wandert in eine persistente ausstehende Warteschlange, die sowohl einen Prozessneustart als auch einen Host-Reboot übersteht.

Zusammengefasst pro Pfad.
Eine Datei, die sich im Offline-Zustand 100 Mal ändert, wird einmal übertragen, nur mit dem neuesten
Zustand -- die Warteschlange speichert „dieser Pfad muss synchronisiert werden“, kein
Ereignis-Log.

Wiederverbinden nutzt exponentiellen Backoff
(1s -> 2s -> ... gedeckelt bei 5 Min.), bevor ein Versuch auf das Fehlerkonto einer Datei angerechnet wird, sodass ein wackeliger Link das Versuchs- Budget nicht in Sekunden aufbrauchen kann.

Backpressure, kein Blockieren.
Der Dateisystem-Watcher blockiert niemals beim Netzwerk -- er kann Änderungen schneller erzeugen,
als eine langsame Leitung sie dauerhaft übertragen kann; der Sender arbeitet die Warteschlange einfach mit der Geschwindigkeit ab, die die Leitung zulässt.

Die Tiefe der Warteschlange ist konzeptionell unbegrenzt.
Eine tiefe Warteschlange bedeutet lediglich „langsame Leitung + viele Daten“, was weiterhin
funktionieren muss. Das Versuchslimit (10 Versuche, siehe Backoff oben) gilt nur für einzelne Dateien, die aus eigenen Gründen immer wieder fehlschlagen (Berechtigungsfehler, ununlesbare Quelle usw.) -- eine solche Datei wird unter Quarantäne gestellt und geloggt, damit sie nicht den Rest der Warteschlange blockiert; alles andere wird weiter synchronisiert.

Atomare Schreibvorgänge + End-to-End-Hash.
Jede Übertragung geht in eine temporäre Datei, wird per Hash verifiziert und dann an ihren Zielort umbenannt -- ein Abbruch mitten in der Übertragung hinterlässt niemals eine halb geschriebene Datei, die Größe/mtime später fälschlicherweise für aktuell halten könnte.

Erkennung unvollständiger Kopien (Torn-Copy).
Wenn sich die Quelle ändert, während eine langsame Übertragung sie noch liest, verwirft eine
Vorher/Nachher-Abweichung von Größe+mtime die Kopie und reiht sie neu ein -- kein Locking erforderlich.

--bwlimit drosselt eine Remote-Strecke, damit eine anfängliche Vollsynchronisation über eine
schmale/gemeinsam genutzte Leitung diese nicht für alle anderen blockiert, die dieselbe
Verbindung nutzen.

Noch nicht implementiert: Delta-Übertragung für große, teilweise geänderte Dateien (eine geänderte Datei wird immer vollständig gesendet

-- siehe bekannte Lücken oben) und ein Schwellenwert für die Warnung bei knappem Festplattenspeicher der Warteschlange bei sehr langen Ausfällen. (eine Option für ein zukünftiges Release bei sehr großen Dateien)
 
RustFS/S3-Objektspeicher und ZFS
haben unterschiedliche Anwendungsfälle.


Wenn man sie kombiniert – zum Beispiel mit einer bidirektionalen Synchronisation zwischen SMB- und S3-Freigaben unter Berücksichtigung der SMB-Ordner-ACL-Vererbung –,

ist das Ergebnis weit mehr als die bloße Summe der einzelnen Funktionen-
ein idealer SMB und Internet File/Backup/Cloud Server gleichzeitig

RustFS-Betriebsmodi​

  • Einzelknoten (Single Node), Einzeldatenträger (Single Disk)
  • Einzelknoten (Single Node), Mehrfachdatenträger (RustFS Software-RAID)
  • Mehrknoten-System (HA-Cluster), jeweils mit Einzel- oder Mehrfachdatenträgern

RustFS auf ZFS – Meine Zusammenfassung​

Der RustFS-Einzeldatenträgermodus auf einem ZFS-Pool ist dem nativen RustFS-Software-RAID / Multi-Disk-Erasure-Coding in jeder Hinsicht überlegen:


  • Prüfsummen: Block-Ebene inkl. Selbstreparatur (Self-Healing) vs. reine Objekt-Ebene.
  • Snapshots: Copy-on-Write (COW) nahezu ohne Performance-Verlust vs. Versionierung pro Objekt mit realen Speicher-Zusatzkosten.
  • Caching: Hybrides Tiering über ARC/L2ARC/SLOG vs. einfacher Page-Cache des Betriebssystems.
  • CPU-Effizienz: Kein redundanter Reed-Solomon-CPU-Overhead für Ausfallsicherheit, die ZFS ohnehin schon bereitstellt.

Hinweis: „Einzeldatenträger“ bedeutet hier ein einzelnes RustFS-Ziel (Target). Der darunterliegende ZFS-Pool selbst kann als Mirror, RAIDZ, dRAID oder in naher Zukunft AnyRAID über mehrere physische Festplatten verteilt sein – es wird also keinerlei physische Redundanz aufgegeben.
Das gilt selbst für große Multi-Node-Deployments:

Verteiltes Erasure Coding über mehrere Knoten hinweg bleibt zwar das richtige Werkzeug für die Toleranz kompletter Knotenausfälle (ohne Replikations-Lag), für eine zusammenhängende Namespace-Kapazität über die Grenzen eines Knotens hinaus und für eine höhere Gesamt-Durchsatzleistung. Dennoch sollte der lokale Speicher jedes einzelnen Knotens weiterhin ein ZFS-redundanter Pool sein und nicht aus nativen, von RustFS verwalteten Rohdatenplatten (Raw Disks) bestehen. Lokale Festplattenfehler werden so von ZFS abgefangen, bevor sie überhaupt die distributed EC-Schicht erreichen – und das völlig ohne Nachteile.


Das Ideal:​

  1. RustFS Single-Node / Single-Target auf ZFS
  2. Ergänzt durch RustFS Bucket-/Site-Replikation für die Ausfallsicherheit über Knoten und Standorte hinweg.
Für kleine bis mittlere Setups ist das bereits die vollständige Lösung. Für große Setups bleibt es das gleiche Muster pro Knoten – mit einer darübergelegten distributed EC-Schicht nur dann, wenn die Anforderungen an Knotenanzahl, Durchsatz oder Namespace-Größe dies tatsächlich erfordern.


Offener Wunsch (aktuell noch nicht realisiert, issue steht auf todo/accepted bei RustFS)​

Die Bereitstellung von ZFS-Snapshots des RustFS-Datenverzeichnisses als schreibgeschützte S3-Objektversionen nativ in RustFS.

Dies ist heute noch nicht implementiert – RustFS müsste dafür aktiv mit dem Verzeichnis .zfs/snapshot/ interagieren und dieses mit seiner eigenen Objekt-Metadatenbank abgleichen. Das ist ein echter Funktionswunsch (Feature Request) an das Projekt und keine bloße Konfigurationsoption. Bis dahin bleiben die zwei Mechanismen getrennt, aber komplementär:


  • ZFS-Snapshot: Für die Point-in-Time-Gesamtwiederherstellung des Speichers.
  • RustFS-eigene Objekt-Versionierung: Für die granulare Historie einzelner Objekte.

Die einzige verbleibende Ausnahme​

Hosts ohne ZFS-Unterstützung. Wenn der OpenZFS-Support auf Windows/macOS die Produktionsreife erreicht, könnte diese Ausnahme schrumpfen oder komplett verschwinden. Es lohnt sich, den aktuellen Status zu prüfen, bevor man darauf bei spezifischen Windows-Pools oder macOS-Hosts baut. OpenZFS ist für macOS bereits veröffentlicht und steht auf Windows kurz vor einem release-fähigen RC.


Fazit: Genau so integriere ich es in mein napp-it cs Einzelserver- bzw. Cluster-Management-Tool für S3, Storage Spaces und ZFS.
 
Zurück
Oben