FastDFS 分布式存储完整教程
FastDFS 是一款轻量级、开源、纯 C 开发的分布式文件系统专为中小文件4KB~500MB存储设计具备高可用、线性扩容、负载均衡等特性广泛用于图片、视频、文档等非结构化数据存储场景。一、核心知识点补充适用场景适合中小文件、高并发读写、低成本集群不适合大文件500MB、数据库类结构化数据存储。核心优势无中心架构Tracker 集群对等无单点故障按 Group 分组存储同组 Storage 互为备份软 RAID10轻量级无依赖部署简单性能优异核心局限不支持文件分片存储元数据由 Storage 上报Tracker 不持久化大文件存储性能一般关键名词解释Tracker调度中心负责负载均衡、状态管理Storage存储节点按 Group 组织负责文件读写与同步Group存储单元同组内数据多副本备份File_id文件唯一索引包含组名、路径、文件名用于文件访问二、环境准备1. 服务器规划OpenEuler24表格角色IP主机名配置Tracker1192.168.10.101tracker012C4GTracker2192.168.10.102tracker022C4GStorage1192.168.10.103storage12C4GStorage2192.168.10.104storage22C4GNginx 代理192.168.10.105nginx2C4G2. 基础环境配置所有节点执行bash运行# 关闭防火墙 systemctl stop firewalld systemctl disable firewalld # 关闭SELinux setenforce 0 sed -i s/^SELINUX.*/SELINUXdisabled/g /etc/selinux/config # 安装依赖 yum -y install zlib-devel gcc* libtool pcre-devel libevent三、依赖库安装libfastcommon所有 Tracker、Storage 节点执行bash运行# 解压源码 tar zxvf libfastcommon-1.0.36.tar.gz cd libfastcommon-1.0.36 # 编译安装 ./make.sh ./make.sh install # 拷贝库文件 cp /usr/lib64/libfastcommon.so /usr/lib扩展知识点libfastcommon 是 FastDFS 官方提供的基础公共库封装了网络、IO、线程等通用功能是 FastDFS 运行的必要依赖。四、FastDFS 安装所有 Tracker、Storage 节点bash运行# 解压源码 tar zxvf fastdfs-5.11.tar.gz cd fastdfs-5.11 # 编译安装 ./make.sh ./make.sh install扩展知识点安装后默认配置文件路径/etc/fdfs/可执行文件路径/usr/bin/服务脚本路径/etc/init.d/。五、Tracker 服务器配置101、102 节点1. 配置文件修改bash运行# 复制模板配置 cp /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf # 编辑配置 vi /etc/fdfs/tracker.conf核心配置项inidisabledfalse port22122 base_path/fastdfs/tracker store_groupgroup12. 创建数据目录bash运行mkdir -p /fastdfs/tracker3. 启动服务bash运行# 启动 /etc/init.d/fdfs_trackerd start # 开机自启 echo /etc/init.d/fdfs_trackerd start /etc/rc.local # 重启命令 fdfs_trackerd /etc/fdfs/tracker.conf restart # 查看状态 ps -ef | grep fdfs_trackerd扩展知识点Tracker 不存储数据只存储元数据重启不丢失集群状态Tracker 集群所有节点对等客户端可随机连接六、Storage 服务器配置103、104 节点1. 配置文件修改bash运行# 复制模板配置 cp /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf # 编辑配置 vi /etc/fdfs/storage.conf核心配置项inidisabledfalse port23000 base_path/fastdfs/storage store_path0/fastdfs/storage tracker_server192.168.10.101:22122 tracker_server192.168.10.102:22122 group_namegroup1 http.server_port88882. 创建数据目录bash运行mkdir -p /fastdfs/storage3. 启动服务bash运行# 启动 /etc/init.d/fdfs_storaged start # 开机自启 echo /etc/init.d/fdfs_storaged start /etc/rc.local # 重启命令 fdfs_storaged /etc/fdfs/storage.conf restart # 查看状态 ps -ef | grep fdfs_storaged扩展知识点同组 Storage 会自动同步文件保证数据一致性Storage 支持多磁盘挂载通过store_path0~store_pathN配置七、Client 客户端配置任意节点bash运行# 复制模板配置 cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf # 编辑配置 vi /etc/fdfs/client.conf核心配置项inibase_path/fastdfs/tracker tracker_server192.168.10.101:22122 tracker_server192.168.10.102:22122八、文件上传测试bash运行# 基础上传命令 fdfs_upload_file /etc/fdfs/client.conf logo.jpg # 详细测试命令 fdfs_test /etc/fdfs/client.conf upload logo.jpg返回示例plaintextgroup1/M00/00/00/wKgKaGadD5aAZBiJAAFMnKMUrMI833.jpg扩展知识点文件实际存储路径/fastdfs/storage/data/00/00/File_id 是文件唯一访问凭证需持久化保存九、Storage 节点安装 Nginx fastdfs-nginx-module1. 解压模块并修改配置bash运行tar zxvf fastdfs-nginx-module_v1.16.tar.gz cd fastdfs-nginx-module/src vi config修改配置iniCORE_INCS$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/ CORE_LIBS$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient2. 编译安装 Nginxbash运行tar zxvf nginx-1.19.5.tar.gz cd nginx-1.19.5 useradd nginx # 编译配置 ./configure \ --add-module/root/fastdfs-nginx-module/src \ --prefix/usr/local/nginx \ --with-cc-opt-Wno-errorformat-truncation # 编译安装 make make install # 创建软链接 ln -s /usr/local/nginx/sbin/* /usr/local/sbin/3. 配置 mod_fastdfs.confbash运行# 拷贝模块配置 cp /root/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/ # 编辑配置 vi /etc/fdfs/mod_fastdfs.conf核心配置项iniconnect_timeout10 base_path/tmp tracker_server192.168.10.101:22122 tracker_server192.168.10.102:22122 url_have_group_nametrue group_namegroup1 storage_server_port23000 store_path_count1 store_path0/fastdfs/storage4. 拷贝 FastDFS 配置bash运行cp /root/fastdfs-5.11/conf/http.conf /etc/fdfs cp /root/fastdfs-5.11/conf/mime.types /etc/fdfs5. 创建软链接映射bash运行ln -s /fastdfs/storage/data /fastdfs/storage/M006. Nginx 配置bash运行vi /usr/local/nginx/conf/nginx.conf核心配置nginxhttp { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location /group1/M00 { ngx_fastdfs_module; } } }7. 启动 Nginxbash运行nginx扩展知识点fastdfs-nginx-module 解决同步延迟问题文件未同步完成时自动重定向到源 Storage 节点读取。十、Nginx 代理层部署105 节点bash运行# 安装依赖 yum -y install pcre-devel zlib-devel gcc* # 编译安装 Nginx tar zxvf nginx-1.19.5.tar.gz cd nginx-1.19.5 useradd nginx ./configure --prefix/usr/local/nginx --usernginx --groupnginx make make install ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ # 配置代理 vi /usr/local/nginx/conf/nginx.conf代理配置nginxhttp { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; upstream storage_server_group1 { server 192.168.10.103:80 weight10; server 192.168.10.104:80 weight10; } server { listen 80; server_name localhost; location / { proxy_pass http://storage_server_group1; } } }bash运行# 启动代理 Nginx nginx扩展知识点代理层实现统一入口、负载均衡、故障转移对外屏蔽后端 Storage 节点细节。十一、文件访问测试bash运行# 直接访问 Storage http://192.168.10.103/group1/M00/00/00/wKgKZ2gaACmAb6raAAFMnKMUrMI895_big.jpg # 通过代理访问 http://192.168.10.105/group1/M00/00/00/wKgKZ2gaACmAb6raAAFMnKMUrMI895_big.jpg十二、高级知识点补充文件同步机制Storage 写入文件后通过binlog记录元数据后台线程异步同步到同组其他节点Tracker 记录同步时间戳避免读取未同步文件。Group 选择策略轮询Round robin指定组Specified group剩余空间优先Load balanceStorage 选择策略组内轮询IP 排序优先优先级排序优先集群扩容扩容 Tracker直接新增节点配置一致即可扩容 Storage新增节点加入现有 Group 或新建 Group常见问题文件无法访问检查 Nginx 配置、软链接、防火墙Storage 未注册检查 Tracker 地址、网络连通性同步延迟开启 fastdfs-nginx-module 解决