So installieren und konfigurieren Sie einen SeaweedFS-Cluster unter Ubuntu 20.04

SeaweedFS ist ein quelloffenes, einfaches und hoch skalierbares verteiltes Dateisystem zum schnellen Speichern und Bereitstellen von Milliarden von Dateien. Es ist anderen Dateisystemen wie Ceph, GlusterFS und HDFS sehr ähnlich. Es kann leicht in die Cloud integriert werden und erreicht sowohl schnelle Zugriffszeiten ohne jegliche clientseitige Änderungen. Es verfügt über eine Vielzahl von Funktionen, wie z. B. automatisches Master-Server-Failover, automatisches Ablaufen der TTL für Einträge, parallele Verarbeitung, Handhabung großer und kleiner Dateien, Zugriff mit niedriger Latenz auf jede Datei und vieles mehr.

In diesem Tutorial zeigen wir Ihnen, wie Sie den SeaweedFS-Cluster auf einem Ubuntu 20.04-Server einrichten.

Voraussetzungen

  • Ein Server, auf dem Ubuntu 20.04 Server läuft.
  • Ein Root-Passwort ist auf dem Server konfiguriert.

Erste Schritte

Bevor Sie beginnen, wird empfohlen, Ihre Systempakete auf die neueste Version zu aktualisieren. Sie können sie mit dem folgenden Befehl aktualisieren:

apt-get update -y

Sobald alle Pakete aktualisiert sind, müssen Sie einige andere erforderliche Abhängigkeiten auf Ihrem Server installieren. Sie können sie alle mit dem folgenden Befehl installieren:

apt-get install build-essential autoconf automake gdb git libffi-dev zlib1g-dev libssl-dev unzip -y

Nachdem Sie alle Abhängigkeiten installiert haben, müssen Sie auch Golang auf Ihrem System installieren. Sie können es mit dem folgenden Befehl installieren:

apt-get install golang -y

Sobald die Installation abgeschlossen ist, können Sie mit dem nächsten Schritt fortfahren.

SeaweedFS installieren

Standardmäßig ist SeaweedFS nicht im Standard-Repository von Ubuntu 20.04 verfügbar. Daher müssen Sie es aus dem Quellcode herunterladen und kompilieren.

Laden Sie zunächst die neueste Version von SeaweedFS aus dem Git-Repository herunter, indem Sie den folgenden Befehl verwenden:

git clone https://github.com/chrislusf/seaweedfs.git

Sobald der Download abgeschlossen ist, wechseln Sie in das Verzeichnis SeaweedFS und installieren es mit dem folgenden Befehl:

cd ~/seaweedfs
make install

Mit dem obigen Befehl wird das SeaweedFS-Binary im Verzeichnis ~/go/bin/ installiert. Kopieren Sie nun das installierte Binary mit dem folgenden Befehl in das Verzeichnis /usr/loca/bin:

cp ~/go/bin/weed /usr/local/bin/

Als nächstes überprüfen Sie die installierte Version von SeaweedFS mit dem folgenden Befehl:

weed version

Sie sollten die folgende Ausgabe erhalten:

version 30GB 2.14 4211601e linux amd64

Wenn Sie fertig sind, können Sie mit dem nächsten Schritt fortfahren.

Erstellen einer Systemd-Dienstdatei für Master

Zunächst müssen Sie eine systemd-Dienstdatei erstellen, um den SeaweedFS-Dienst zu verwalten. Sie können sie erstellen, indem Sie den folgenden Befehl ausführen:

nano /etc/systemd/system/seaweedmaster.service

Fügen Sie die folgenden Zeilen ein:

[Unit]
Description=SeaweedFS Master
After=network.target

[Service]
Type=simple
User=root
Group=root

ExecStart=/usr/local/bin/weed master
WorkingDirectory=/usr/local/bin/
SyslogIdentifier=seaweedfs-master

[Install]
WantedBy=multi-user.target

Speichern und schließen Sie die Datei und laden Sie dann den systemd-Daemon mit dem folgenden Befehl neu:

systemctl daemon-reload

Starten Sie anschließend den SeaweedFS-Dienst und aktivieren Sie, dass er beim Neustart des Systems gestartet wird, mit dem folgenden Befehl:

systemctl start seaweedmaster
systemctl enable seaweedmaster

Sie können den Status des SeaweedFS-Masters mit dem folgenden Befehl überprüfen:

systemctl status seaweedmaster

Sie sollten die folgende Ausgabe erhalten:

? seaweedmaster.service - SeaweedFS Master
     Loaded: loaded (/etc/systemd/system/seaweedmaster.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-12-09 08:30:06 UTC; 3s ago
   Main PID: 25740 (weed)
      Tasks: 10 (limit: 4691)
     Memory: 8.0M
     CGroup: /system.slice/seaweedmaster.service
             ??25740 /usr/local/bin/weed master

Dec 09 08:30:06 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:06 25740 master_server.go:107] Volume Size Limit is 30000 MB
Dec 09 08:30:06 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:06 25740 master_server.go:192] adminScripts:
Dec 09 08:30:06 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:06 25740 master.go:122] Start Seaweed Master 30GB 2.14 4211601e at 0.0.0.0:9333
Dec 09 08:30:06 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:06 25740 raft_server.go:70] Starting RaftServer with 69.87.216.36:9333
Dec 09 08:30:06 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:06 25740 raft_server.go:129] current cluster leader:
Dec 09 08:30:06 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:06 25740 master.go:146] Start Seaweed Master 30GB 2.14 4211601e grpc server at>
Dec 09 08:30:08 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:08 25740 masterclient.go:78] No existing leader found!
Dec 09 08:30:08 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:08 25740 raft_server.go:154] Initializing new cluster
Dec 09 08:30:08 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:08 25740 master_server.go:141] leader change event:  => 69.87.216.36:9333
Dec 09 08:30:08 ubuntu2004 seaweedfs-master[25740]: I1209 08:30:08 25740 master_server.go:143] [ 69.87.216.36:9333 ] 69.87.216.36:9333 becomes>

Wenn Sie fertig sind, können Sie mit dem nächsten Schritt fortfahren.

Erstellen und Starten von Volume-Servern

Zu diesem Zeitpunkt ist der Master-Server gestartet und wartet auf die Volumes. Erstellen Sie zunächst zwei Volume-Verzeichnisse mit dem folgenden Befehl:

mkdir /mnt/{vol1,vol2}

Als Nächstes erstellen Sie eine systemd-Dienstdatei zur Verwaltung von Volume1 mit dem folgenden Befehl:

nano /etc/systemd/system/seaweedvolume1.service

Fügen Sie die folgenden Zeilen ein:

[Unit]
Description=SeaweedFS Volume
After=network.target

[Service]
Type=simple
User=root
Group=root

ExecStart=/usr/local/bin/weed volume -dir="/mnt/vol1" -max=10 -mserver="69.87.216.36:9333" -port=8081
WorkingDirectory=/usr/local/bin/
SyslogIdentifier=seaweedfs-volume

[Install]
WantedBy=multi-user.target

Speichern und schließen Sie die Datei und laden Sie dann den systemd-Daemon mit dem folgenden Befehl neu:

systemctl daemon-reload

Starten Sie als Nächstes den Volume1-Dienst und aktivieren Sie ihn so, dass er beim Neustart des Systems gestartet wird:

systemctl start seaweedvolume1.service
systemctl enable seaweedvolume1.service

Sie können den Status des Volume1-Dienstes mit dem folgenden Befehl überprüfen:

systemctl status seaweedvolume1

Sie sollten die folgende Ausgabe erhalten:

? seaweedvolume1.service - SeaweedFS Volume
     Loaded: loaded (/etc/systemd/system/seaweedvolume1.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-12-09 08:31:14 UTC; 4s ago
   Main PID: 25870 (weed)
      Tasks: 9 (limit: 4691)
     Memory: 7.3M
     CGroup: /system.slice/seaweedvolume1.service
             ??25870 /usr/local/bin/weed volume -dir=/mnt/vol1 -max=10 -mserver=69.87.216.36:9333 -port=8081

Dec 09 08:31:14 ubuntu2004 systemd[1]: Started SeaweedFS Volume.
Dec 09 08:31:14 ubuntu2004 seaweedfs-volume[25870]: I1209 08:31:14 25870 file_util.go:23] Folder /mnt/vol1 Permission: -rwxr-xr-x
Dec 09 08:31:14 ubuntu2004 seaweedfs-volume[25870]: I1209 08:31:14 25870 disk_location.go:154] Store started on dir: /mnt/vol1 with 0 volumes >
Dec 09 08:31:14 ubuntu2004 seaweedfs-volume[25870]: I1209 08:31:14 25870 disk_location.go:157] Store started on dir: /mnt/vol1 with 0 ec shards
Dec 09 08:31:14 ubuntu2004 seaweedfs-volume[25870]: I1209 08:31:14 25870 volume_grpc_client_to_master.go:52] Volume server start with seed mas>
Dec 09 08:31:14 ubuntu2004 seaweedfs-volume[25870]: I1209 08:31:14 25870 volume.go:334] Start Seaweed volume server 30GB 2.14 4211601e at 0.0.>
Dec 09 08:31:14 ubuntu2004 seaweedfs-volume[25870]: I1209 08:31:14 25870 volume_grpc_client_to_master.go:114] Heartbeat to: 69.87.216.36:9333

Erstellen Sie als nächstes eine systemd-Dienstdatei für Volume2 mit dem folgenden Befehl:

nano /etc/systemd/system/seaweedvolume2.service

Fügen Sie die folgenden Zeilen ein:

[Unit]
Description=SeaweedFS Volume
After=network.target

[Service]
Type=simple
User=root
Group=root

ExecStart=/usr/local/bin/weed volume -dir="/mnt/vol2" -max=5  -mserver="69.87.216.36:9333" -port=8080
WorkingDirectory=/usr/local/bin/
SyslogIdentifier=seaweedfs-volume2

[Install]
WantedBy=multi-user.target

Speichern und schließen Sie die Datei und laden Sie den systemd-Daemon mit dem folgenden Befehl neu:

systemctl daemon-reload

Starten Sie als Nächstes den Volume2-Dienst und aktivieren Sie ihn so, dass er beim Neustart des Systems gestartet wird:

systemctl start seaweedvolume2.service
systemctl enable seaweedvolume2.service

Sie können den Status des Volume2-Dienstes mit dem folgenden Befehl überprüfen:

systemctl status seaweedvolume2

Sie sollten die folgende Ausgabe erhalten:

? seaweedvolume2.service - SeaweedFS Volume
     Loaded: loaded (/etc/systemd/system/seaweedvolume2.service; disabled; vendor preset: enabled)
     Active: active (running) since Wed 2020-12-09 08:32:03 UTC; 4s ago
   Main PID: 25921 (weed)
      Tasks: 10 (limit: 4691)
     Memory: 7.7M
     CGroup: /system.slice/seaweedvolume2.service
             ??25921 /usr/local/bin/weed volume -dir=/mnt/vol2 -max=5 -mserver=69.87.216.36:9333 -port=8080

Dec 09 08:32:03 ubuntu2004 systemd[1]: Started SeaweedFS Volume.
Dec 09 08:32:03 ubuntu2004 seaweedfs-volume2[25921]: I1209 08:32:03 25921 file_util.go:23] Folder /mnt/vol2 Permission: -rwxr-xr-x
Dec 09 08:32:03 ubuntu2004 seaweedfs-volume2[25921]: I1209 08:32:03 25921 disk_location.go:154] Store started on dir: /mnt/vol2 with 0 volumes>
Dec 09 08:32:03 ubuntu2004 seaweedfs-volume2[25921]: I1209 08:32:03 25921 disk_location.go:157] Store started on dir: /mnt/vol2 with 0 ec shar>
Dec 09 08:32:03 ubuntu2004 seaweedfs-volume2[25921]: I1209 08:32:03 25921 volume.go:334] Start Seaweed volume server 30GB 2.14 4211601e at 0.0>
Dec 09 08:32:03 ubuntu2004 seaweedfs-volume2[25921]: I1209 08:32:03 25921 volume_grpc_client_to_master.go:52] Volume server start with seed ma>
Dec 09 08:32:03 ubuntu2004 seaweedfs-volume2[25921]: I1209 08:32:03 25921 volume_grpc_client_to_master.go:114] Heartbeat to: 69.87.216.36:9333

Wenn Sie fertig sind, können Sie mit dem nächsten Schritt fortfahren.

Schreiben einer Beispieldatei auf das Volume

Zuerst müssen Sie eine HTTP-POST-, PUT- oder GET-Anfrage senden, um eine Datei-ID und die Volume-Server-URL zu erhalten. Sie können dies mit dem folgenden Befehl tun:

curl http://localhost:9333/dir/assign

Sie sollten die Datei-ID und die Volume-Server-URL in der folgenden Ausgabe sehen:

{"fid":"7,016bad1bc0","url":"69.87.216.36:8080","publicUrl":"69.87.216.36:8080","count":1}

Als Nächstes fügen Sie eine Beispieldatei namens file1.png zum Volume hinzu, indem Sie die Datei-ID und die Volume-URL wie unten gezeigt verwenden:

curl -F [email protected]/root/file1.png http://69.87.216.36:8080/7,016bad1bc0

Sie sollten die folgende Ausgabe erhalten:

{"name":"file1.png","size":74912,"eTag":"7a6511cbeda98ca00346544ca2968046"}

Sobald Sie die Datei auf das Volume hochgeladen haben, können Sie sie mit dem folgenden Befehl lesen:

curl http://69.87.216.36:9333/dir/lookup?volumeId=7

Sie sollten die folgende Ausgabe erhalten:

{"volumeId":"7","locations":[{"url":"69.87.216.36:8080","publicUrl":"69.87.216.36:8080"}]}

Sobald Sie fertig sind, können Sie mit dem nächsten Schritt fortfahren.

Zugriff auf SeaweedFS

Sie können nun über die URL http://your-server-ip:8080/7,016bad1bc0 auf das SeaweedFS zugreifen, um die Datei, die Sie im SeaweedFS-Objektspeicher abgelegt haben, einzusehen:

Seegras FS Schema

Sie können Ihre Datei, die Sie zuvor hochgeladen haben, im obigen Bildschirm sehen.

Fazit

Herzlichen Glückwunsch! Sie haben den SeaweedFS-Cluster erfolgreich auf einem Ubuntu 20.04-Server installiert und konfiguriert. Für weitere Informationen besuchen Sie bitte die SeaweedFS-Dokumentationsseite. Wenn Sie Fragen haben, können Sie sich gerne an mich wenden.

Das könnte dich auch interessieren …