公司动态

基于FastDFS 搭建一个最小化的分布式文件系统安装与配置全攻略(Ubuntu 24.04 + Nginx + Java 客户端)

📅 2026/8/19 21:17:30
基于FastDFS 搭建一个最小化的分布式文件系统安装与配置全攻略(Ubuntu 24.04 + Nginx + Java 客户端)
1. 环境准备在开始之前请确保你拥有一台干净的 Ubuntu 服务器推荐 24.04并拥有sudo权限。1.1 更新系统并安装依赖首先更新软件源并安装编译所需的工具链sudo apt update sudo apt upgrade -y sudo apt install -y vim wget unzip gcc g make perl libpcre3-dev zlib1g-dev libssl-dev1.2 创建工作目录为了保持系统整洁我们统一在用户目录下建立工作文件夹mkdir -p ~/fastdfs/{lib,src} cd ~/fastdfs2. 安装基础库 libfastcommonFastDFS 依赖libfastcommon基础库必须优先安装。2.1 下载与编译cd ~/fastdfs # 下载 V1.0.83 版本 (若网络不畅可尝试使用代理地址) wget https://github.com/happyfish100/libfastcommon/archive/refs/tags/V1.0.83.tar.gz tar -xzvf V1.0.83.tar.gz cd libfastcommon-1.0.83/ # 编译并安装 chmod x make.sh ./make.sh sudo ./make.sh install2.2 验证安装确保动态库和头文件已正确安装ls /usr/lib/libfastcommon.so ls /usr/include/fastcommon/ ldconfig -p | grep fastcommon3. 安装 FastDFS 主程序本次教程安装 FastDFSV6.15.2版本。新版本依赖libserverframe需按顺序安装。3.1 下载 FastDFS 源码cd ~/fastdfs/src wget https://github.com/happyfish100/fastdfs/archive/refs/tags/V6.15.2.tar.gz tar -xzvf V6.15.2.tar.gz cd fastdfs-6.15.23.2 安装 libserverframe# 下载依赖库 wget https://github.com/happyfish100/libserverframe/archive/refs/tags/V1.2.11.tar.gz tar -xzvf V1.2.11.tar.gz # 编译安装 cd libserverframe-1.2.11 chmod x make.sh ./make.sh sudo ./make.sh install # 刷新动态库缓存 sudo ldconfig3.3 编译安装 FastDFS返回 FastDFS 源码目录进行编译cd ~/fastdfs/src/fastdfs-6.15.2 chmod x make.sh ./make.sh sudo ./make.sh install4. 规划目录结构与权限假设我们使用hadoop用户运行服务若无此用户请先创建sudo useradd -m hadoop。# 创建数据目录 # tracker: Tracker 服务数据 # storage: Storage 服务数据 # store/file: 实际文件存储路径 sudo mkdir -p /data/fastdfs/{tracker,storage,store,file} # 授权 sudo chown -R hadoop:hadoop /data/fastdfs5. 服务配置5.1 配置 Tracker (/etc/fdfs/tracker.conf)sudo vi /etc/fdfs/tracker.conf关键修改项base_path/data/fastdfs/tracker port22122 http.server_port8080 use_connection_pool true connection_pool_max_idle_time 36005.2 配置 Storage (/etc/fdfs/storage.conf)sudo vi /etc/fdfs/storage.conf关键修改项注意替换 IP 为你的服务器内网 IPgroup_namegroup1 base_path/data/fastdfs/storage store_path0/data/fastdfs/file tracker_server192.168.5.55:22122 # --- 修改为实际 IP port23000 use_connection_pool true connection_pool_max_idle_time 3600 http.server_port80805.3 配置 Client (/etc/fdfs/client.conf)用于后续测试上传sudo vi /etc/fdfs/client.conf关键修改项base_path/data/fastdfs/client tracker_server192.168.5.55:22122 # --- 修改为实际 IP注需手动创建 client 目录sudo mkdir -p /data/fastdfs/client sudo chown -R hadoop:hadoop /data/fastdfs/client6. 配置 Systemd 服务为了实现开机自启和方便管理我们创建 systemd 服务文件。6.1 创建 Tracker 服务sudo tee /etc/systemd/system/fastdfs-tracker.service EOF [Unit] DescriptionFastDFS Tracker Afternetwork.target [Service] Typeforking Userhadoop ExecStart/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start ExecStop/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop Restarton-failure [Install] WantedBymulti-user.target EOF6.2 创建 Storage 服务sudo tee /etc/systemd/system/fastdfs-storage.service EOF [Unit] DescriptionFastDFS Storage Service Afternetwork.target fastdfs-tracker.service Wantsfastdfs-tracker.service [Service] Typeforking Userhadoop Grouphadoop ExecStart/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start ExecStop/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop Restarton-failure RestartSec5 TimeoutStopSec10 StandardOutputjournal StandardErrorjournal [Install] WantedBymulti-user.target EOF6.3 启动服务sudo systemctl daemon-reload sudo systemctl start fastdfs-tracker sudo systemctl start fastdfs-storage sudo systemctl enable fastdfs-tracker sudo systemctl enable fastdfs-storage # 查看状态 sudo systemctl status fastdfs-tracker sudo systemctl status fastdfs-storage7. 防火墙设置 (UFW)开放必要端口sudo ufw allow 22122/tcp # Tracker sudo ufw allow 23000/tcp # Storage sudo ufw allow 80/tcp # Nginx HTTP (可选) sudo ufw allow 8080/tcp # Nginx HTTP (本教程使用) sudo ufw enable8. 功能测试8.1 命令行上传测试echo Hello FastDFS on Ubuntu 24.04! test.txt fdfs_upload_file /etc/fdfs/client.conf test.txt成功标志返回类似group1/M00/00/00/wKjzhF_xA...txt的文件 ID。8.2 集群状态监控fdfs_monitor /etc/fdfs/client.conf确保 Storage 状态显示为ACTIVE。9. 集成 Nginx (fastdfs-nginx-module)为了让文件可以通过 HTTP 访问需要编译带模块的 Nginx。9.1 下载源码cd /usr/local/src sudo wget https://github.com/happyfish100/fastdfs-nginx-module/archive/refs/tags/V1.26.tar.gz sudo tar -xzvf V1.26.tar.gz sudo wget http://nginx.org/download/nginx-1.24.0.tar.gz sudo tar -xzvf nginx-1.24.0.tar.gz9.2 编译 Nginxcd nginx-1.24.0 ./configure \ --prefix/usr/local/nginx \ --add-module/usr/local/src/fastdfs-nginx-module-1.26/src \ --with-http_ssl_module \ --with-stream make sudo make install9.3 配置 mod_fastdfs.conf复制并修改模块配置文件sudo cp /usr/local/src/fastdfs-nginx-module-1.26/src/mod_fastdfs.conf /etc/fdfs/ sudo vi /etc/fdfs/mod_fastdfs.conf关键修改base_path/data/fastdfs/client tracker_server192.168.5.55:22122 storage_server_port23000 group_namegroup1 url_have_group_name true store_path0/data/fastdfs/file9.4 配置 Nginx编辑/usr/local/nginx/conf/nginx.conf在http块中添加server { listen 8080; server_name localhost; location ~ /group[0-9]/M00 { ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location /50x.html { root html; } }9.5 启动与 HTTP 测试# 验证配置 sudo /usr/local/nginx/sbin/nginx -t # 启动 sudo /usr/local/nginx/sbin/nginx # 测试访问 (替换为你实际上传得到的 file_id) file_id$(fdfs_upload_file /etc/fdfs/client.conf /tmp/fastdfs_test.txt) curl -v http://localhost:8080/$file_id如果返回文件内容则说明 Nginx 集成成功。10. Java 客户端集成示例对于 Java 开发者可以使用fastdfs-client-java进行操作。10.1 Maven 依赖dependency groupIdorg.csource/groupId artifactIdfastdfs-client/artifactId version1.27/version /dependency(注若中央仓库无此版本需参考文档手动安装到本地 Maven 仓库)10.2 客户端配置 (client.conf)放置在src/main/resources/client.conffastdfs.tracker_servers192.168.5.55:22122 connect_timeout30 network_timeout30 charsetUTF-8 http.tracker_http_port808010.3 核心工具类代码以下是一个封装了上传、下载、生成 URL 和删除功能的工具类import org.csource.common.MyException; import org.csource.fastdfs.*; import java.io.IOException; public class FastDFSClientUtil { // 静态初始化配置 static { try { ClientGlobal.initByProperties(client.conf); System.out.println(FastDFS 配置加载成功); } catch (IOException | MyException e) { throw new RuntimeException(初始化 FastDFS 配置失败, e); } } /** * 上传文件 * return 文件 ID (e.g., group1/M00/00/00/xxx.txt) */ public String uploadFile(String localFilePath, String fileExtName) { TrackerServer trackerServer null; try { TrackerClient trackerClient new TrackerClient(); trackerServer trackerClient.getConnection(); StorageClient storageClient new StorageClient(trackerServer, null); String[] result storageClient.upload_file(localFilePath, fileExtName, null); if (result null) throw new RuntimeException(上传失败); return result[0] / result[1]; } catch (Exception e) { throw new RuntimeException(上传异常, e); } finally { if (trackerServer ! null) try { trackerServer.close(); } catch (IOException e) {} } } /** * 生成 HTTP 访问 URL */ public String getHttpUrl(String fileId, String httpHost, int httpPort) { return http:// httpHost : httpPort / fileId; } // 下载和删除方法逻辑类似此处省略... }10.4 测试运行public class Test { public static void main(String[] args) throws Exception { FastDFSClientUtil client new FastDFSClientUtil(); // 1. 上传 String fileId client.uploadFile(/tmp/test.txt, txt); System.out.println(File ID: fileId); // 2. 获取 URL String url client.getHttpUrl(fileId, localhost, 8080); System.out.println(Access URL: url); } }结语至此你已经成功搭建了一个包含 Tracker、Storage、Nginx 反向代理以及 Java 客户端支持的全功能 FastDFS 分布式文件系统。该系统可用于生产环境的图片、视频等大文件存储场景。常见问题排查如果上传失败检查tracker_serverIP 是否可达防火墙是否放行。如果 Nginx 返回 404检查mod_fastdfs.conf中的store_path0是否与实际存储路径一致。如果 Java 客户端连接超时确认client.conf中的端口和 IP 配置正确。