SeaweedFS est un système de fichiers distribué open-source, simple et hautement é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 à la fois un temps d'accès rapide sans aucune modification côté client. Il dispose d'un riche ensemble de fonctionnalités, notamment le basculement automatique des serveurs maîtres, l'expiration automatique de la durée de vie de l'entrée, le traitement parallèle, la gestion des fichiers volumineux et petits, l'accès à faible latence à n'importe quel fichier, et bien d'autres.
Dans ce tutoriel, nous allons vous montrer comment configurer le cluster SeaweedFS sur le serveur Ubuntu 20.04.
Prérequis
- Un serveur exécutant le serveur Ubuntu 20.04.
- Un mot de passe root est configuré sur le serveur.
Mise en route
Avant de commencer, il est recommandé de mettre à jour vos packages système vers la dernière version. Vous pouvez les mettre à jour avec la commande suivante :
apt-get update -y
Une fois tous les packages mis à jour, vous devrez installer d'autres dépendances requises sur votre serveur. Vous pouvez tous les installer 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, vous devez également installer Golang sur votre système. Vous pouvez l'installer avec la commande suivante :
apt-get install golang -y
Une fois l'installation terminée, vous pouvez passer à l'étape suivante.
Installer SeaweedFS
Par défaut, SeaweedFS n'est pas disponible dans le référentiel par défaut d'Ubuntu 20.04. Vous devrez donc le télécharger et le compiler à partir de la source.
Tout d'abord, téléchargez 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é, changez le répertoire en SeaweedFS et installez-le avec la commande suivante :
cd ~/seaweedfs
make install
La commande ci-dessus installera le binaire SeaweedFS dans le répertoire ~/go/bin/. Maintenant, copiez le binaire installé dans le répertoire /usr/loca/bin avec la commande suivante :
cp ~/go/bin/weed /usr/local/bin/
Ensuite, vérifiez la version installée de SeaweedFS avec la commande suivante :
weed version
Vous devriez obtenir le résultat suivant :
version 30GB 2.14 4211601e linux amd64
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Créer un fichier de service Systemd pour le maître
Tout d'abord, vous devrez créer un fichier de service systemd pour gérer le service SeaweedFS. Vous pouvez le créer en exécutant la commande suivante :
nano /etc/systemd/system/seaweedmaster.service
Ajoutez 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
Enregistrez et fermez le fichier puis rechargez le démon systemd avec la commande suivante :
systemctl daemon-reload
Ensuite, démarrez le service SeaweedFS et activez-le au redémarrage du système avec la commande suivante :
systemctl start seaweedmaster
systemctl enable seaweedmaster
Vous pouvez vérifier l'état du maître SeaweedFS avec la commande suivante :
systemctl status seaweedmaster
Vous devriez obtenir le résultat suivant :
? 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 vous avez terminé, vous pouvez passer à l'étape suivante.
Créer et démarrer des serveurs de volumes
À ce stade, le serveur maître est démarré et attend les volumes. Tout d'abord, créez deux répertoires de volume avec la commande suivante :
mkdir /mnt/{vol1,vol2}
Ensuite, créez un fichier de service systemd pour gérer le Volume1 avec la commande suivante :
nano /etc/systemd/system/seaweedvolume1.service
Ajoutez 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
Enregistrez et fermez le fichier puis rechargez le démon systemd avec la commande suivante :
systemctl daemon-reload
Ensuite, démarrez le service Volume1 et activez-le pour qu'il démarre au redémarrage du système :
systemctl start seaweedvolume1.service
systemctl enable seaweedvolume1.service
Vous pouvez vérifier l'état du service Volume1 avec la commande suivante :
systemctl status seaweedvolume1
Vous devriez 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éez un fichier de service systemd pour Volume2 avec la commande suivante :
nano /etc/systemd/system/seaweedvolume2.service
Ajoutez 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
Enregistrez et fermez le fichier puis rechargez le démon systemd avec la commande suivante :
systemctl daemon-reload
Ensuite, démarrez le service Volume2 et activez-le au redémarrage du système :
systemctl start seaweedvolume2.service
systemctl enable seaweedvolume2.service
Vous pouvez vérifier l'état du service Volume2 avec la commande suivante :
systemctl status seaweedvolume2
Vous devriez obtenir le résultat suivant :
? 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 vous avez terminé, vous pouvez passer à l'étape suivante.
Écrire un exemple de fichier sur le volume
Tout d'abord, vous devrez envoyer une requête HTTP POST, PUT ou GET pour obtenir un ID de fichier et une URL de serveur de volume. Vous pouvez le faire avec la commande suivante :
curl http://localhost:9333/dir/assign
Vous devriez voir l'ID de 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, ajoutez un exemple de fichier 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
Vous devriez obtenir le résultat suivant :
{"name":"file1.png","size":74912,"eTag":"7a6511cbeda98ca00346544ca2968046"}
Une fois que vous avez téléchargé le fichier sur le volume, vous pouvez le lire avec la commande suivante :
curl http://69.87.216.36:9333/dir/lookup?volumeId=7
Vous devriez obtenir le résultat suivant :
{"volumeId":"7","locations":[{"url":"69.87.216.36:8080","publicUrl":"69.87.216.36:8080"}]}
Une fois que vous avez terminé, vous pouvez passer à l'étape suivante.
Accéder à SeaweedFS
Vous pouvez maintenant accéder à SeaweedFS en utilisant l'URL http://your-server-ip:8080/7,016bad1bc0 pour afficher le fichier que vous avez stocké dans le magasin d'objets SeaweedFS :
Vous pouvez voir votre fichier que vous avez téléchargé plus tôt dans l'écran ci-dessus.
Conclusion
Toutes nos félicitations! vous avez installé et configuré avec succès le cluster SeaweedFS sur le serveur Ubuntu 20.04. Pour plus d'informations, consultez la page de documentation de SeaweedFS. N'hésitez pas à me demander si vous avez des questions.