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 file=@/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:
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.