Hochverfügbarkeit „Light“: Datenreplikation mit dem Seafile CLI Client

Neben einem Cluster und einem Real-Time Backup Server lässt sich mit dem Seafile CLI Client eine dritte Hochverfügbarkeitslösung implementieren. Im Vergleich zu ihren “großen Brüdern” ist sie zwar funktional eingeschränkt, aufgrund ihrer geringen Komplexität ist sie aber auch für kleine Unternehmen attraktiv. Der hochverfügbare Zugriff auf die in Seafile gespeicherten Daten wird durch die Replikation des Datenbestands auf einen Online Speicher mit Webzugriff umgesetzt. In diesem Beitrag erklären wir das Vorgehen zur Einrichtung dieser Lösung und stellen ein Skript vor, das dessen Verwaltung und Überwachung einfacher und komfortabler macht.

Datenreplikation mit dem Seafile CLI Client

Der Seafile CLI Client (CLI Client) ist ein Seafile Sync Client für Linux ohne graphische Benutzeroberfläche. Die Steuerung erfolgt über die Kommandozeile oder, englisch und namensgebend, das Command Line Interface (CLI). Abgesehen von kleineren funktionalen Einschränkungen arbeitet der CLI Client identisch wie seine Pendants für Windows und Mac: Er synchronisiert Bibliotheken zwischen einem Seafile Server und dem ihm zugewiesenen Datenspeicher. Im Datenspeicher des CLI Clients liegt somit ein Replikat des Datenbestands des Seafile Servers in Dateiformat vor. Der Umfang der Replikation – der gesamte Datenbestand oder nur Teile davon – lässt sich über die Auswahl der zu synchronisierenden Bibliotheken steuern.

Schematische Darstellung der Replikation mit dem Seafile CLI Client

Der CLI Client lässt sich auf dem Host des Seafile Servers ebenso wie auf einem separaten Linux System installieren. In den meisten Fällen ist ersteres zweckmäßig, da man keinen zusätzlichen Server benötigt. Mit mehr Leistung muss der Seafile Host deshalb auch nicht ausgestattet werden. Der CLI Client hat sehr geringe Leistungsanforderungen.

Damit der Zugriff auf das Replikat bei einem Ausfall des Seafile Servers sichergestellt ist, muss der CLI Client auf einen Speicher schreiben, der vom Produktivsystem und dessen Internetzugang völlig unabhängig ist. In Betracht kommen damit insbesondere die Storage Produkte der großen Rechenzentrenanbieter wie z.B. die StorageBox von Hetzner oder HiDrive von Strato. Dank deren guter Protokollunterstützung lassen sich diese in Linux mounten und damit als Speicher für den CLI Client nutzen. Ist der Speicher gemountet, dann muss nur noch der Linux Nutzer, der den CLI Client ausführt, Schreibrechte auf den Speicher erhalten und fertig sind die Vorbereitungen.

Mehr als CLI Client und Online Speicher sind für die Einrichtung dieser einfachen Hochverfügbarkeitslösung grundsätzlich nicht nötig. Die Konfigurationsoptionen des Seafile CLI Clients sind vollständig im Seafile Manual dokumentiert. Einmal eingerichtet, übernimmt der CLI Client die Replikation der ausgewählten Bibliotheken. Jede Änderung auf dem Server wird fortlaufend nachvollzogen, so dass vom Online Speicher immer eine Kopie der aktuellsten Dateiversion abgerufen werden kann. Die Webzugriffsoption der Online Speicher macht dies auch denkbar einfach.

Best Practices für die Verwendung des CLI Clients

In der Praxis hat die Einrichtung der Hochverfügbarkeitslösung Light aufgrund der Eigenschaften der Organisationen, für die die CLI-Replikation attraktiv ist, die eine oder andere Stolperfalle im Angebot. So verfügen kleine Unternehmen selten über einen dedizierten IT-Admin und der Internet-Uplink ist schwach angesichts der zu sichernden Datenmengen.

Stabilitäts- und Zuverlässigkeitsprobleme sind quasi unvermeidbar, wenn sich Replikationsläufe über viele Stunden oder sogar Tage hinziehen. Um Komplikationen zu reduzieren, empfiehlt es sich daher, in Seafile einen dedizierten Benutzer für die Datenreplikation mit dem CLI Client anzulegen und diesem eine ebenso dedizierte Rolle mit weitgehend eingeschränkten Rechten zuzuweisen.

Eine gute Dokumentation ist nicht gleichbedeutend mit Benutzerfreundlichkeit. Das gilt in besonderem Maße für den CLI Client. Das wohl am leichtesten lösbare Problem ist die Verwendung der unhandlichen Repo IDs an Stelle der Bibliotheksnamen durch den CLI Client. Schwerer wiegt die Komplexität bei der fortlaufenden Administration und Überwachung: Soll eine neue Bibliothek in die Replikation aufgenommen werden, so muss diese Konfigurationsanpassung naturgemäß über die Kommandozeile erfolgen. Damit dies geschehen kann, muss der im CLI Client eingerichtete Seafile Benutzer auf die Bibliothek Zugriff haben, was wiederum eine Freigabe an diesen Benutzer erfordert. Schliesslich muss auch die Überwachung der Replikation über die Kommandozeile erfolgen. Dies sind Aktivitäten, die normalerweise jenseits der Fähigkeiten eines normalen Benutzers liegen bzw. Benutzer aufgrund ihre Systemrechte gar nicht tun können. Die Definition klarer Prozesse, Verantwortlichkeiten und Kommunikationskanäle ist daher erforderlich. In der Tat wünschenswert wäre eine einfachere Verwaltung der Replikation.

Einfache Verwaltung per Skript

Unser deutscher Supportpartner datamate ist diesem Wunsch nachgekommen und hat ein Admin-Skript entwickelt, das Verwaltung, Überwachung und Zuverlässigkeit der Datenreplikation erleichtert und verbessert. Konkret lassen sich mit diesem Skript …

Ist das Skript eingerichtet, muss eine Bibliothek einfach mit der Berechtigung Lesen + Schreiben an den CLI Seafile Benutzer freigegeben werden, um sie der Liste der zu replizierenden Bibliotheken hinzuzufügen. Ein Cron-Job übernimmt die fortlaufende Prüfung auf Änderungen an dieser Liste. Neu an den CLI Benutzer freigegebene Bibliotheken werden repliziert; Bibliotheken, für die die Freigabe entzogen wird, wird die Replikation beendet. (Einmal replizierte Daten werden im Speicher aber nicht gelöscht.) Darüber hinaus erzeugt das Skript eine HTML-Statusmeldung. Diese kann mit einem Browser abgerufen werden. So ist es deutlich leichter, einen Überblick über die Inhalte und den Status der Replikation zu behalten.

Einrichtung

Das Vorgehen zur Einrichtung und Überwachung dieser Hochverfügbarkeitslösung Lösung unter Nutzung des Skripts erfolgt in 7 Schritten:

  1. Mount des externen Speichers
  2. Anlage einer dedizierten Benutzerrolle für den Benutzer des CLI Clients (nur bei Seafile PE möglich)
  3. Anlage eines dedizierten Benutzers für den CLI Client
  4. Download, Anpassung und Initialisierung des Admin-Skripts
  5. Anpassung der Webserver-Konfiguration
  6. Lese-Freigabe der zu replizierenden Bibliotheken an den CLI Benutzer
  7. Überwachung der Replizierung
Mount des externen Speichers

In separaten Beiträgen wird das Mounting externer Cloud-Speicher erläutert, um deren Produktspezifika Rechnung zu tragen.

Anlage einer dedizierten Benutzerrolle für den Benutzer des CLI Clients

Um zu vermeiden, dass der CLI Client bei einer Fehlfunktion ungewollte Änderungen vornimmt sowie um einen Missbrauch des Nutzers zu vermeiden, empfiehlt es sich, für den Seafile Benutzer des CLI Clients eine eigene Rolle anzulegen. Aktivieren Sie hierzu in der seahub_settings.py die individuellen Rollen und Berechtigungen und fügen Sie neben der default– und guest-Rolle eine neue individuelle Rolle hinzu. Die Rollendefinition in der seahub_settings.py lautet:

'cli-sync': {
  'can_add_repo': False,
  'can_add_group': False,
  'can_view_org': False,
  'can_use_global_address_book': False,
  'can_generate_share_link': False,
  'can_generate_upload_link': False,
  'can_invite_guest': False,
  'can_connect_with_android_clients': False,
  'can_connect_with_ios_clients': False,
  'can_connect_with_desktop_clients': True,
  'role_quota': '',
  'can_add_public_repo': False,
  'can_send_share_link_mail': False,
}

Hinweis: Nur ein Seafile Server der Professional Edition unterstützt die Anlage individueller Rollen.

Anlage eines dedizierten Benutzers für den CLI Client

Legen Sie einen neuen Seafile Benutzer an und weisen Sie diesem die neu angelegte Rolle zu. Damit die Rolle zugewiesen werden kann, muss der Seafile Server nach der Konfigurationsänderung einmal neu gestartet werden.

Download, Anpassung und Initialisierung des Admin-Skritps

Laden Sie das Skript von Github herunter und ergänzen Sie die Execute-Berechtigung.

$ git clone https://github.com/datamate-rethink-it/cli-autosync
$ chmod +x cli-autosync.sh

Öffnen Sie die Skriptdatei und passen Sie die Parameter des ersten Abschnitts an, um Ihrer Seafile und Speicherkonfiguration zu entsprechen.

$ nano cli-autosync.sh

Initialisieren Sie nun das Skript durch seine Ausführung mit dem Parameter init. Im Rahmen der Initialisierung wird der Seafile CLI Client installiert und konfiguriert. Außerdem wird der notwendige Cron-Job angelegt.

./cli-autosync.sh init

Der Seafile unterstützt zwei weitere Kommandos, die auch manuell aufgerufen werden können.

./cli-autosync.sh run
# Prüfung auf Änderungen am Replikationsumfang und Start der Replikation
# Befehl wird automatisch per Cronjob ausgeführt; Frequenz ist in Skriptvariable syncintervall definiert

./cli-autosync.sh status
# Anzeige des aktuellen Status der Synchronisation
Anpassung der Webserver-Konfiguration

Die bei Ausführung des run-Befehls erzeugte Status Datei wird im Verzeichnis abgespeichert, das über die Variable logfile im Admin-Skript definiert wird. Durch eine Anpassung der Webserver Konfiguration lässt sich diese bequem über den Browser abrufen und anzeigen.

Um die Statusseite über die URL    http://IP-Adresse-CLI-Hosts/seafcli-status.html/    abzurufen, ergänzen Sie folgenden Block in die nginx Konfiguration. (Hinweis: Hier wird unterstellt, dass der CLI Client auf der gleichen Maschine installiert ist wie der Seafile Server und der Wert der Variable logfile nicht verändert wurde.)

location /seafcli-status.html {
  root /tmp/;
  index seafcli-status.html;
}

Alternative Anwendungsfelder für die Lösung Hochverfügbarkeit Light

Die in diesem Beitrag vorgestellte Hochverfügbarkeitslösung leistet nicht nur als einfache Absicherungslösung gute Dienste. Sie kann ebenso dazu verwendet werden, um externe Zugriff auf einen lokalen Seafile Server zu beschleunigen. Der CLI Client repliziert dafür häufig extern abgerufene Dateien (z.B. Vertriebsunterlagen) auf einen Cloud-Speicher. Der Abruf von dort erfolgt dank dessen schneller Datenanbindung mit maximaler Geschwindigkeit. Der interne Zugriff auf den Seafile Server erfolgt weiterhin mit voller LAN Geschwindigkeit. Über einen Zeitplan im Cronjob lässt sich der Client so steuern, dass die Replikation nur nachts erfolgt, wenn der Internetanschluss nicht von Mitarbeitern in Anspruch genomen wird.