Comment installer et configurer le cluster SeaweedFS sur Ubuntu 20.04

SeaweedFS est un système de fichiers distribué open-source, simple et très évolutif pour stocker et servir rapidement des milliards de fichiers. Il est très similaire à d’autres systèmes de fichiers, notamment Ceph, GlusterFS et HDFS. Il peut être facilement intégré au cloud et atteindre un temps d’accès rapide sans aucune modification côté client. Il possède un riche ensemble de fonctionnalités, notamment le basculement automatique des serveurs maîtres, l’expiration automatique des TTL d’entrée, le traitement parallèle, la gestion des fichiers petits et grands, l’accès à n’importe quel fichier avec une faible latence, et bien d’autres encore.

Dans ce tutoriel, nous allons te montrer comment configurer le cluster SeaweedFS sur le serveur Ubuntu 20.04.

Conditions préalables

  • Un serveur exécutant Ubuntu 20.04 server.
  • Un mot de passe root est configuré sur le serveur.

Démarrage

Avant de commencer, il est recommandé de mettre à jour tes paquets système à la dernière version. Tu peux les mettre à jour avec la commande suivante :

apt-get update -y

Une fois que tous les paquets sont mis à jour, tu devras installer d’autres dépendances nécessaires sur ton serveur. Tu peux les installer toutes en exécutant la commande suivante :

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

Après avoir installé toutes les dépendances, tu dois aussi installer Golang dans ton système. Tu peux l’installer à l’aide de la commande suivante :

apt-get install golang -y

Une fois l’installation terminée, tu peux passer à l’étape suivante.

Installe SeaweedFS

Par défaut, SeaweedFS n’est pas disponible dans le dépôt par défaut d’Ubuntu 20.04. Tu devras donc le télécharger et le compiler à partir de la source.

Tout d’abord, télécharge la dernière version de SeaweedFS depuis le dépôt Git à l’aide de la commande suivante :

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

Une fois le téléchargement terminé, change le répertoire en SeaweedFS et installe-le avec la commande suivante :

cd ~/seaweedfs
make install

La commande ci-dessus installera le binaire SeaweedFS dans le répertoire ~/go/bin/. Maintenant, copie le binaire installé dans le répertoire /usr/loca/bin avec la commande suivante :

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

Ensuite, vérifie la version installée de SeaweedFS avec la commande suivante :

weed version

Tu devrais obtenir le résultat suivant :

version 30GB 2.14 4211601e linux amd64

Une fois que tu as terminé, tu peux passer à l’étape suivante.

Crée un fichier de service Systemd pour Master

Tout d’abord, tu dois créer un fichier de service systemd pour gérer le service SeaweedFS. Tu peux le créer en exécutant la commande suivante :

nano /etc/systemd/system/seaweedmaster.service

Ajoute les lignes suivantes :

[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

Enregistre et ferme le fichier puis recharge le démon systemd avec la commande suivante :

systemctl daemon-reload

Ensuite, démarre le service SeaweedFS et active son démarrage au redémarrage du système avec la commande suivante :

systemctl start seaweedmaster
systemctl enable seaweedmaster

Tu peux vérifier l’état du maître SeaweedFS avec la commande suivante :

systemctl status seaweedmaster

Tu devrais obtenir la sortie suivante :

? 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>

Une fois que tu as terminé, tu peux passer à l’étape suivante.

Créer et démarrer les serveurs de volume

À ce stade, le serveur maître est démarré et attend les volumes. Tout d’abord, crée un répertoire de deux volumes avec la commande suivante :

mkdir /mnt/{vol1,vol2}

Ensuite, crée un fichier de service systemd pour gérer le Volume1 avec la commande suivante :

nano /etc/systemd/system/seaweedvolume1.service

Ajoute les lignes suivantes :

[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

Sauvegarde et ferme le fichier puis recharge le démon systemd avec la commande suivante :

systemctl daemon-reload

Ensuite, démarre le service Volume1 et active-le pour qu’il démarre au redémarrage du système :

systemctl start seaweedvolume1.service
systemctl enable seaweedvolume1.service

Tu peux vérifier l’état du service Volume1 avec la commande suivante :

systemctl status seaweedvolume1

Tu devrais obtenir le résultat suivant :

? 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

Ensuite, crée un fichier de service systemd pour Volume2 avec la commande suivante :

nano /etc/systemd/system/seaweedvolume2.service

Ajoute les lignes suivantes :

[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

Sauvegarde et ferme le fichier puis recharge le démon systemd avec la commande suivante :

systemctl daemon-reload

Ensuite, démarre le service Volume2 et active-le pour qu’il démarre au redémarrage du système :

systemctl start seaweedvolume2.service
systemctl enable seaweedvolume2.service

Tu peux vérifier l’état du service Volume2 avec la commande suivante :

systemctl status seaweedvolume2

Tu devrais obtenir la sortie suivante :

? 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

Une fois que tu as terminé, tu peux passer à l’étape suivante.

Ecris un fichier échantillon sur le Volume

Tout d’abord, tu devras envoyer une requête HTTP POST, PUT ou GET pour obtenir un ID de fichier et l’URL du serveur de volume. Tu peux le faire avec la commande suivante :

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

Tu devrais voir l’ID du fichier et l’URL du serveur de volume dans la sortie suivante :

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

Ensuite, ajoute un fichier échantillon nommé file1.png au volume en utilisant l’ID de fichier et l’URL du volume comme indiqué ci-dessous :

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

Tu devrais obtenir la sortie suivante :

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

Une fois que tu as téléchargé le fichier sur le volume, tu peux le lire avec la commande suivante :

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

Tu devrais obtenir le résultat suivant :

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

Une fois que tu as terminé, tu peux passer à l’étape suivante.

Accède à SeaweedFS

Tu peux maintenant accéder à SeaweedFS en utilisant l’URL http://your-server-ip:8080/7,016bad1bc0 pour voir le fichier que tu as stocké dans le magasin d’objets SeaweedFS :

Schéma FS de Seaweed

Tu peux voir ton fichier que tu as téléchargé plus tôt dans l’écran ci-dessus.

Conclusion

Félicitations ! Tu as réussi à installer et à configurer le cluster SeaweedFS sur le serveur Ubuntu 20.04. Pour plus d’informations, visite la page de documentation deSeaweedFS. N’hésite pas à me demander si tu as des questions.

Vous aimerez aussi...