Concepts de FastDFS
FastDFS est un système de gestion de fichiers distribué, développé en langage C par Yu Qing en 2008, conçu pour répondre aux besoins de stockage à grande échelle et d'équilibrage de charge. Il prend en charge l'extension horizontale et la synchronisation en temps réel, avec des fonctionnalités principales telles que le stockage, la synchronisation, le téléchargement et l'accès aux fichiers. Ce système est idéal pour gérer des fichiers volumineux comme des images ou des vidéos dans des envirnonements à trafic élevé.
L'architecture de FastDFS se compose de deux parties : un cluster de trackers pour gérer les requêtes et équilibrer la charge, et un cluster de stockage pour les données. Le cluster de stockage est divisé en groupes, où les serveurs au sein d'un même groupe effectuent une synchronisasion des données, tandis que les groupes différents ne communiquent pas directement.
Étapes d'Installation
Connectez-vous à votre système Linux pour commencer l'installation.
1. Préparation de l'environnement
Installez les dépendances requises :
apt-get install build-essential -y
apt-get install libevent-dev -y
2. Installation de libfastcommon
Téléchargez et installez libfastcommon à partir du dépôt officiel :
cd /opt/
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz
tar -xzf V1.0.43.tar.gz
cd libfastcommon-1.0.43
./make.sh && ./make.sh install
3. Installation de FastDFS
Téléchargez et compilez FastDFS :
cd /opt/
wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz
tar -xzf V6.06.tar.gz
cd fastdfs-6.06
./make.sh && ./make.sh install
Vérifiez l'installation avec les commandes suivantes :
ls -l /usr/bin/fdfs*
cp /opt/fastdfs-6.06/conf/http.conf /etc/fdfs/
cp /opt/fastdfs-6.06/conf/mime.types /etc/fdfs/
4. Configuration des services
Accédez au répertoire de configuraton et renommez les fichiers exemple :
cd /etc/fdfs/
mv tracker.conf.sample tracker.conf
mv storage.conf.sample storage.conf
mv client.conf.sample client.conf
Modifiez tracker.conf pour définir le répertoire de stockage :
mkdir -p /var/data/fastdfs/tracker
vim tracker.conf # Remplacez "base_path" par "/var/data/fastdfs/tracker"
Configurez storage.conf avec les paramètres suivants :
mkdir -p /var/data/fastdfs/storage
vim storage.conf # Définissez "base_path" sur "/var/data/fastdfs/storage" et "tracker_server" sur l'adresse IP de votre tracker
5. Démarrage des services
Lancez d'abord le tracker, puis le stockage :
fdfs_trackerd /etc/fdfs/tracker.conf start
fdfs_storaged /etc/fdfs/storage.conf start
Vérifiez l'enregistrement du stockage auprès du tracker :
fdfs_monitor /etc/fdfs/storage.conf
6. Test d'upload de fichiers
Créez un fichier de test et configurez le client :
echo "Contenu exemple" > /tmp/test.txt
vim /etc/fdfs/client.conf # Modifiez "base_path" et "tracker_server" selon votre configuration
Uploadez le fichier et récupérez l'URL :
fdfs_test /etc/fdfs/client.conf upload /tmp/test.txt
Intégration avec Nginx
Pour servir les fichiers via HTTP, installez le module Nginx pour FastDFS :
cd /opt/
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz
tar -xzf V1.22.tar.gz
cp fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/
Configurez mod_fastdfs.conf pour pointer vers votre tracker, puis compilez Nginx avec le module :
cd /opt/nginx-1.17.0
./configure --add-module=/opt/fastdfs-nginx-module-1.22/src
make && make install
Ajoutez une directive dans nginx.conf pour servir les fichiers :
location /group1/M00 {
ngx_fastdfs_module;
}
Démarrez Nginx :
/usr/local/nginx/sbin/nginx
Utilisation avec Spring Boot
Créez un projet Spring Boot et ajoutez la dépendance Maven :
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>
</dependency>
Configurez le fichier fastdfs-client.properties :
fastdfs.connect_timeout_in_seconds = 5
fastdfs.network_timeout_in_seconds = 30
fastdfs.charset = UTF-8
fastdfs.tracker_servers = votre_ip:22122
fastdfs.connection_pool.enabled = true
Exemple de code pour uploader un fichier :
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
public class FastDFSUploader {
public static void main(String[] args) throws Exception {
ClientGlobal.initByProperties("fastdfs-client.properties");
TrackerClient tracker = new TrackerClient();
TrackerServer server = tracker.getConnection();
StorageClient1 client = new StorageClient1(server, null);
NameValuePair[] metadata = new NameValuePair[] { new NameValuePair("description", "test file") };
String[] result = client.upload_file("chemin/vers/fichier.jpg", "jpg", metadata);
StringBuilder path = new StringBuilder();
for (String segment : result) {
path.append(segment).append("/");
}
System.out.println("URL accessible : " + path.toString().substring(0, path.length() - 1));
}
}