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