> 技术文档 > FastDFS 6.11.0 单机环境搭建与测试(附 Nginx 集成)+ docker构建+k8s启动文件

FastDFS 6.11.0 单机环境搭建与测试(附 Nginx 集成)+ docker构建+k8s启动文件


文章目录

  • FastDFS 简介
  • FastDFS 的核心组成
  • 为什么要用 FastDFS
  • 环境与软件准备
  • 软件包准备
    • csdn包下载
  • 安装与配置
  • 安装基础依赖
    • 安装 libfastcommon
    • 安装 libserverframe(6.09+ 必须安装)
    • 安装 FastDFS
    • 安装 fastdfs-nginx-module 模块
    • 编译安装 Nginx
  • 配置与启动
    • Tracker
    • Storage
    • Client 配置与测试上传
    • nginx 配置启动
  • Dockerfile编写
    • Dockerfile
    • nginx.conf
    • entrypoint.sh
    • mod_fastdfs.conf
    • storage.conf
    • tracker.conf
    • client.conf
    • 构建
  • docker+k8s启动
    • docker-compose.yml
    • k8s-tracker.yaml
    • k8s-storage.yaml
  • 测试
    • 自带fdfs_test命令
    • python脚本测试
  • 常见问题
  • 总结与建议

FastDFS 简介

FastDFS 是一款开源的分布式文件存储系统,由淘宝资深架构师余庆开发并维护。它专门针对互联网海量小文件存储而设计,支持高性能的文件上传、下载以及文件同步功能。


FastDFS 的核心组成

FastDFS 主要由三个角色组成:

  • Tracker(跟踪服务器)
    管理 Storage 节点,提供文件上传、下载的路由功能,类似“目录服务”。

  • Storage(存储服务器)
    负责实际的文件存储和访问,每个 Storage 节点可以划分多个 group(组)。

  • Client(客户端)
    通过 SDK 或命令行与 Tracker 通信,实现文件上传和下载。


为什么要用 FastDFS

  • 适用于 海量小文件 存储,例如图片、音视频、日志文件。
  • 分布式、可横向扩展
  • 自动同步与负载均衡,无需额外配置。
  • 相比传统 NFS,性能和可用性更优。

本文演示的是 FastDFS 6.11.0 单机环境搭建,适合本地开发与功能验证,生产环境建议使用集群部署。


环境与软件准备

组件 版本 说明 FastDFS 6.11.0 文件存储核心服务 FastDFS-Nginx-Module 1.24 Nginx 模块,用于 HTTP 文件访问 libfastcommon 1.0.71 FastDFS 依赖库 libserverframe 1.2.1 FastDFS 6.09+ 必须依赖库 Nginx 1.24.0 作为文件访问的 Web 服务器 系统 Rocky 9.2 (Blue Onyx)/7.9 其他 Linux 发行版类似

注: 目前博主用过两个系统部署,都成功起来了

  • centos7.9.2009
  • Rocky Linux release 9.2 (Blue Onyx)

软件包准备

  • libfastcommon-1.0.71.tar.gz
  • libserverframe-1.2.1.tar.gz
  • fastdfs-6.11.0.tar.gz
  • fastdfs-nginx-module-1.24.tar.gz
  • nginx-1.24.0.tar.gz

csdn包下载

下载

文件名 说明 docker-compose.yml Docker Compose 配置文件,用于快速编排并启动 FastDFS 服务。 Dockerfile 自定义镜像构建文件,定义 FastDFS + Nginx 的构建步骤。 entrypoint.sh 容器启动脚本,负责启动 tracker、storage 服务及 Nginx。 fastdfs-6.11.0.tar.gz FastDFS 核心源码包,提供 tracker、storage、client 功能。 fastdfs-nginx-module-1.24.tar.gz FastDFS 的 Nginx 模块源码包,用于文件的 HTTP 访问。 k8s-storage.yaml Kubernetes Storage 部署配置文件。 k8s-tracker.yaml Kubernetes Tracker 部署配置文件。 libfastcommon-1.0.71.tar.gz FastDFS 所需的公共函数库,必须先安装。 libserverframe-1.2.1.tar.gz FastDFS 所需的服务器框架库,部分新版本依赖该库。 mod_fastdfs.conf FastDFS Nginx 模块配置文件,定义 group 名称、tracker 地址及文件访问映射。 nginx-1.24.0.tar.gz Nginx 源码包,用于编译并集成 FastDFS 模块。 nginx.conf Nginx 主配置文件,用于加载 FastDFS 模块和文件访问规则。 storage.conf Storage 服务配置文件,定义存储路径、tracker 地址及端口等。 tracker.conf Tracker 服务配置文件,定义 tracker 的监听端口、日志路径、存储调度策略等。 client.conf FastDFS 客户端配置文件,用于客户端上传、下载文件时指定 Tracker 服务及本地日志目录。

安装与配置

安装基础依赖

yum install -y epel-releaseyum install -y git gcc gcc-c++ make wget pcre pcre-devel zlib zlib-devel openssl openssl-devel vim && \\yum clean all

安装 libfastcommon

FastDFS 依赖的公共函数库

tar xf libfastcommon-1.0.71.tar.gz -C /usr/local/cd /usr/local/libfastcommon-1.0.71/./make.sh./make.sh install

安装 libserverframe(6.09+ 必须安装)

tar xf libserverframe-1.2.1.tar.gz -C /usr/local/cd /usr/local/libserverframe-1.2.1/./make.sh./make.sh install

安装 FastDFS

tar xf fastdfs-6.11.0.tar.gz -C /usr/local/cd /usr/local/fastdfs-6.11.0/./make.sh./make.sh install

安装完成后,主要的配置文件位于 /etc/fdfs


安装 fastdfs-nginx-module 模块

tar xf fastdfs-nginx-module-1.24.tar.gz -d /usr/local/cd /usr/local/fastdfs-nginx-module-1.24/sed -i \'s#local/##g\' src/config

编译安装 Nginx

tar -xf /usr/local/nginx-1.24.0.tar.gz -C /usr/local/cd /usr/local/nginx-1.24.0./configure --prefix=/usr/local/nginx --with-http_ssl_module --add-module=/usr/local/fastdfs-nginx-module-1.24/srcmakemake install

配置与启动

Tracker

或者直接看下边tracker.conf

cd /etc/fdfs/vi tracker.conf# 配置关键项base_path = /var/fastdfs

创建目录并启动:

mkdir -p /var/fastdfs# 启动fdfs_trackerd /etc/fdfs/tracker.conf start# 检查ps aux | grep tracker
# 重启fdfs_trackerd /etc/fdfs/tracker.conf restart# 停止fdfs_trackerd /etc/fdfs/tracker.conf stop# 状态fdfs_trackerd /etc/fdfs/tracker.conf status# 查看版本fdfs_trackerd /etc/fdfs/tracker.conf -V# 帮助fdfs_trackerd /etc/fdfs/tracker.conf -h

Storage

或者直接看下边storage.conf

cd /etc/fdfs/vi storage.confbase_path = /var/fastdfsgroup_name = group1store_path0 = /var/fastdfstracker_server = 192.168.1.2:22122

创建目录并启动:

mkdir -p /var/fastdfs# 启动fdfs_storaged /etc/fdfs/storage.conf start# 查看进程ps aux | grep storage
# 重启fdfs_storaged /etc/fdfs/storage.conf restart# 停止fdfs_storaged/etc/fdfs/storage.conf stop# 状态fdfs_storaged /etc/fdfs/storage.conf status# 查看版本fdfs_storaged/etc/fdfs/storage.conf -V# 帮助fdfs_storaged/etc/fdfs/storage.conf -h

Client 配置与测试上传

cd /etc/fdfs/vi client.confbase_path = /var/fastdfstracker_server = 192.168.1.2:22122

创建目录并测试:

mkdir -p /var/fastdfsfdfs_test /etc/fdfs/client.conf upload ./01.png

nginx 配置启动

可以直接复制下边的nginx.conf
复制 FastDFS 配置:

cp /usr/local/fastdfs-6.11.0/conf/http.conf /etc/fdfs/cp /usr/local/fastdfs-6.11.0/conf/mime.types /etc/fdfs/# 记得修改 mod_fastdfs.conf里的tracker_server等配置,可以参考下边cp /data/bag/fastdfs/fastdfs-nginx-module-1.24/src/mod_fastdfs.conf /etc/fdfs
# 启动/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

插个图片,这是/etc/fdfs下所有文件
storage_ids.conf 这个是启动后生成的,其他配置博文都有
FastDFS 6.11.0 单机环境搭建与测试(附 Nginx 集成)+ docker构建+k8s启动文件


Dockerfile编写

注: 自行变更配置文件,不变更也可以

首先所有软件放到同一个目录下,再linux下进行的

文件名 说明 Dockerfile 用于构建 FastDFS + Nginx 镜像的核心文件,定义了基础镜像、依赖安装及环境变量等。 entrypoint.sh 容器启动脚本,通常用于启动 trackerstorage 服务,并可附加执行 Nginx、日志输出等命令。 fastdfs-6.11.0.tar.gz FastDFS 的核心程序源码包,提供 tracker、storage、client 的核心功能。 libfastcommon-1.0.71.tar.gz FastDFS 运行所依赖的公共函数库,必须先安装。 libserverframe-1.2.1.tar.gz FastDFS 所需的服务器框架库,部分新版本依赖该库。 nginx-1.24.0.tar.gz Nginx 源码包,用于编译并集成 FastDFS 模块。 fastdfs-nginx-module-1.24.tar.gz Nginx 的 FastDFS 模块源码包,用于实现 FastDFS 文件的 Web 访问。 tracker.conf Tracker 服务的配置文件,用于定义 tracker 的监听端口、日志路径、存储调度策略等。 storage.conf Storage 服务的配置文件,指定存储路径、Tracker 地址、端口及存储策略。 client.conf FastDFS 客户端配置文件,用于客户端上传、下载文件时指定 Tracker 服务及本地日志目录。。 mod_fastdfs.conf Nginx FastDFS 模块的配置文件,定义 group 名称、tracker 地址及文件访问路径映射规则。 nginx.conf Nginx 的主配置文件,需在其中加载 FastDFS 模块并配置文件访问规则。

Dockerfile

FROM docker.wctmd.us.kg/centos:centos7.9.2009LABEL maintainer=\"XMYX-0\" \\ version=\"1.0\" \\ description=\"FastDFS 6.11.0 + Nginx 1.24 + fastdfs-nginx-module 1.24\"WORKDIR /usr/local# 替换国内阿里云镜像源RUN cd /etc/yum.repos.d/ && \\ sed -i.bak \'s|^mirrorlist=|#mirrorlist=|g\' CentOS-*.repo && \\ sed -i.bak \'s|^#baseurl=http://mirror.centos.org|baseurl=http://mirrors.aliyun.com|g\' CentOS-*.repo && \\ yum clean all && yum makecache# 1. 安装基础依赖RUN yum install -y epel-release && \\ yum install -y git gcc gcc-c++ make wget pcre pcre-devel zlib zlib-devel openssl openssl-devel vim && \\ yum clean all# 2. 拷贝源码文件(提前放到 Docker 构建上下文)COPY libfastcommon-1.0.71.tar.gz .COPY libserverframe-1.2.1.tar.gz .COPY fastdfs-6.11.0.tar.gz .COPY fastdfs-nginx-module-1.24.tar.gz .COPY nginx-1.24.0.tar.gz .# 3. 编译安装 libfastcommonRUN tar xf libfastcommon-1.0.71.tar.gz -C /usr/local/ && \\ cd /usr/local/libfastcommon-1.0.71 && \\ ./make.sh && ./make.sh install# 4. 编译安装 libserverframeRUN tar xf libserverframe-1.2.1.tar.gz -C /usr/local/ && \\ cd /usr/local/libserverframe-1.2.1 && \\ ./make.sh && ./make.sh install# 5. 编译安装 FastDFSRUN tar xf fastdfs-6.11.0.tar.gz -C /usr/local/ && \\ cd /usr/local/fastdfs-6.11.0 && \\ ./make.sh && ./make.sh install && \\ mkdir -p /opt/fastdfs/{tracker,storage/log,storage/file,tmp,client}# 6. 编译安装 Nginx + fastdfs-nginx-moduleRUN tar xf fastdfs-nginx-module-1.24.tar.gz -C /usr/local/ && \\ cd /usr/local/fastdfs-nginx-module-1.24 && \\ sed -i \'s#local/##g\' src/config && \\ tar -xf /usr/local/nginx-1.24.0.tar.gz -C /usr/local/ && \\ cd /usr/local/nginx-1.24.0 && \\ ./configure \\ --prefix=/usr/local/nginx \\ --with-http_ssl_module \\ --add-module=/usr/local/fastdfs-nginx-module-1.24/src && \\ make && make install# 7. 配置 FastDFS & Nginx (先拷贝默认配置文件,支持后期通过挂载覆盖)RUN cp /usr/local/fastdfs-6.11.0/conf/* /etc/fdfs/ && \\ cp /usr/local/fastdfs-nginx-module-1.24/src/mod_fastdfs.conf /etc/fdfs/ && \\ cp /usr/local/fastdfs-6.11.0/conf/http.conf /etc/fdfs/ && \\ cp /usr/local/fastdfs-6.11.0/conf/mime.types /etc/fdfs/COPY tracker.conf /etc/fdfs/tracker.confCOPY storage.conf /etc/fdfs/storage.confCOPY client.conf /etc/fdfs/client.confCOPY mod_fastdfs.conf /etc/fdfs/mod_fastdfs.confCOPY nginx.conf /usr/local/nginx/conf/nginx.conf# 8. 暴露端口EXPOSE 22122 23000 80# 9. 数据卷挂载# VOLUME [\"/opt/fastdfs/tracker\", \"/opt/fastdfs/storage\"]# 10. 启动脚本COPY entrypoint.sh /entrypoint.shRUN chmod +x /entrypoint.shCMD [\"/entrypoint.sh\"]# 11. 清理无用文件RUN rm -rf /usr/local/*.tar.gz# 在编译安装后删除源码压缩包和解压目录#RUN rm -rf /usr/local/libfastcommon-1.0.71* \\#  /usr/local/libserverframe-1.2.1* \\#  /usr/local/fastdfs-6.11.0* \\#  /usr/local/fastdfs-nginx-module-1.24* \\#  /usr/local/nginx-1.24.0* \\#  /usr/local/*.tar.gz

nginx.conf

user root;worker_processes 1; pid logs/nginx.pid; events { worker_connections 1024;} http { include mime.types; default_type application/octet-stream; log_format main \'$remote_addr - $remote_user [$time_local] \"$request\" \'\'$status $body_bytes_sent \"$http_referer\" \'\'\"$http_user_agent\" \"$http_x_forwarded_for\"\'; sendfile on; keepalive_timeout 65; client_max_body_size 100M; server { listen 8888; server_name localhost; location / { root html; index index.html index.htm; } location ~/group([0-9])/M00 { ngx_fastdfs_module; } } }

entrypoint.sh

#!/bin/bashset -e### 1. 默认环境变量设置 ###: ${FASTDFS_BASE_PATH:=/var/fdfs}: ${GROUP_NAME:=group1}: ${PORT:=22122}: ${TRACKER_SERVER:=127.0.0.1:22122}FASTDFS_MODE=\"tracker\" # 默认运行 trackerLOG_DIR=\"${FASTDFS_BASE_PATH}/logs\"mkdir -p \"${LOG_DIR}\"### 2. 解析模式参数 ###case \"$1\" in tracker) FASTDFS_MODE=\"tracker\" ;; storage) FASTDFS_MODE=\"storage\" ;; monitor) sed -i \"s|tracker_server=.*$|tracker_server=${TRACKER_SERVER}|g\" /etc/fdfs/client.conf exec fdfs_monitor /etc/fdfs/client.conf ;; all) FASTDFS_MODE=\"all\" ;; *) echo \"Usage: $0 {tracker|storage|monitor|all}\" exit 1 ;;esac### 3. 配置文件动态替换 ###if [ \"$FASTDFS_MODE\" = \"storage\" ] || [ \"$FASTDFS_MODE\" = \"all\" ]; then sed -i \"s|store_path0.*$|store_path0=/var/fdfs|g\" /etc/fdfs/mod_fastdfs.conf sed -i \"s|url_have_group_name =.*$|url_have_group_name = true|g\" /etc/fdfs/mod_fastdfs.conffiif [ \"$FASTDFS_MODE\" != \"all\" ]; then # tracker 或 storage 模式 sed -i \"s|^port=.*$|port=${PORT}|g\" /etc/fdfs/${FASTDFS_MODE}.conf sed -i \"s|tracker_server=.*$|tracker_server=${TRACKER_SERVER}|g\" /etc/fdfs/storage.conf sed -i \"s|tracker_server=.*$|tracker_server=${TRACKER_SERVER}|g\" /etc/fdfs/client.conf sed -i \"s|tracker_server=.*$|tracker_server=${TRACKER_SERVER}|g\" /etc/fdfs/mod_fastdfs.conf sed -i \"s|group_name=.*$|group_name=${GROUP_NAME}|g\" /etc/fdfs/storage.conf sed -i \"s|group_name=.*$|group_name=${GROUP_NAME}|g\" /etc/fdfs/mod_fastdfs.conffi### 4. 启动服务并记录日志文件 ###start_service() { local mode=$1 local conf=\"/etc/fdfs/${mode}.conf\" local log_file=\"${LOG_DIR}/${mode}d.log\" local pid_file=\"${FASTDFS_BASE_PATH}/data/fdfs_${mode}d.pid\" echo \"Starting ${mode} service...\" # ✅ 清理遗留 PID 文件(关键) [ -f \"$pid_file\" ] && echo \"Removing old pid: $pid_file\" && rm -f \"$pid_file\" [ -f \"$log_file\" ] && echo \"Removing old log: $log_file\" && rm -f \"$log_file\" fdfs_${mode}d \"$conf\" start}### 5. 优雅停止处理 ###stop_service() { echo \"Stopping services...\" if [ \"$FASTDFS_MODE\" = \"all\" ]; then fdfs_storaged /etc/fdfs/storage.conf stop || true fdfs_trackerd /etc/fdfs/tracker.conf stop || true else fdfs_${FASTDFS_MODE}d /etc/fdfs/${FASTDFS_MODE}.conf stop || true fi /usr/local/nginx/sbin/nginx -s quit || true exit 0}trap stop_service SIGTERM SIGINT### 6. 启动对应模式 ###if [ \"$FASTDFS_MODE\" = \"all\" ]; then start_service \"tracker\" start_service \"storage\" /usr/local/nginx/sbin/nginx tail -F \"${LOG_DIR}/trackerd.log\" \"${LOG_DIR}/storaged.log\"else [ \"$FASTDFS_MODE\" = \"storage\" ] && /usr/local/nginx/sbin/nginx start_service \"$FASTDFS_MODE\" tail -F \"${LOG_DIR}/${FASTDFS_MODE}d.log\"fi

mod_fastdfs.conf

connect_timeout=10network_timeout=30base_path=/tmpload_fdfs_parameters_from_tracker=truestorage_sync_file_max_delay = 86400use_storage_id = falsestorage_ids_filename = storage_ids.conftracker_server=127.0.0.1:22122storage_server_port=23000group_name=group1url_have_group_name = truestore_path_count=1store_path0=/var/fdfslog_level=infolog_filename=response_mode=proxyif_alias_prefix=flv_support = trueflv_extension = flvgroup_count = 0# 这里注意mime.types是再nginx编译出来的,可以拷贝走,我懒http.mime_types_filename=/usr/local/nginx/conf/mime.typeshttp.default_content_type=application/octet-stream

storage.conf

disabled=falsegroup_name=group1bind_addr=client_bind=trueport=23000connect_timeout=30network_timeout=60heart_beat_interval=30stat_report_interval=60base_path=/var/fdfsmax_connections=256buff_size = 256KBaccept_threads=1work_threads=4disk_rw_separated = truedisk_reader_threads = 1disk_writer_threads = 1sync_wait_msec=50sync_interval=0sync_start_time=00:00sync_end_time=23:59write_mark_file_freq=500store_path_count=1store_path0=/var/fdfssubdir_count_per_path=256tracker_server=127.0.0.1:22122log_level=inforun_by_group=run_by_user=allow_hosts=*file_distribute_path_mode=0file_distribute_rotate_count=100fsync_after_written_bytes=0sync_log_buff_interval=10sync_binlog_buff_interval=10sync_stat_file_interval=300thread_stack_size=512KBupload_priority=10if_alias_prefix=check_file_duplicate=0file_signature_method=hashkey_namespace=FastDFSkeep_alive=0use_access_log = falserotate_access_log = falseaccess_log_rotate_time=00:00rotate_error_log = falseerror_log_rotate_time=00:00rotate_access_log_size = 0rotate_error_log_size = 0log_file_keep_days = 0file_sync_skip_invalid_record=falseuse_connection_pool = falseconnection_pool_max_idle_time = 3600http.domain_name=http.server_port=8888

tracker.conf

disabled=falsebind_addr=port=22122connect_timeout=30network_timeout=60base_path=/var/fdfsmax_connections=256accept_threads=1work_threads=4min_buff_size = 8KBmax_buff_size = 128KBstore_lookup=2store_group=group2store_server=0store_path=0download_server=0reserved_storage_space = 10%log_level=inforun_by_group=run_by_user=allow_hosts=*sync_log_buff_interval = 10check_active_interval = 120thread_stack_size = 64KBstorage_ip_changed_auto_adjust = truestorage_sync_file_max_delay = 86400storage_sync_file_max_time = 300use_trunk_file = false slot_min_size = 256slot_max_size = 16MBtrunk_file_size = 64MBtrunk_create_file_advance = falsetrunk_create_file_time_base = 02:00trunk_create_file_interval = 86400trunk_create_file_space_threshold = 20Gtrunk_init_check_occupying = falsetrunk_init_reload_from_binlog = falsetrunk_compress_binlog_min_interval = 0use_storage_id = falsestorage_ids_filename = storage_ids.confid_type_in_filename = ipstore_slave_file_use_link = falserotate_error_log = falseerror_log_rotate_time=00:00rotate_error_log_size = 0log_file_keep_days = 0use_connection_pool = falseconnection_pool_max_idle_time = 3600http.server_port=8080http.check_alive_interval=30http.check_alive_type=tcphttp.check_alive_uri=/status.html

client.conf

connect_timeout = 5network_timeout = 60base_path = /var/fastdfstracker_server = 127.0.0.1:22122log_level = infoconnect_first_by = trackeruse_connection_pool = falseconnection_pool_max_idle_time = 3600load_fdfs_parameters_from_tracker = falseuse_storage_id = falsestorage_ids_filename = storage_ids.confhttp.tracker_server_port = 80

构建

一切准备就绪直接进行构建

docker build -t fastdfs-nginx:6.11.0-20250722 .

docker+k8s启动

注: 先启动tracker,再启动storage,下边镜像自行替换,k8s我是挂载的目录,可以自行修改挂载到pv

docker-compose.yml

version: \'3.8\'services: tracker: image: fastdfs-nginx:6.11.0 container_name: fastdfs-tracker environment: FASTDFS_BASE_PATH: /var/fdfs ports: - \"22122:22122\" volumes: - /data/tracker:/var/fdfs restart: always command: [\"/entrypoint.sh\", \"tracker\"] storage: image: fastdfs-nginx:6.11.0 container_name: fastdfs-storage environment: TRACKER_SERVER: tracker:22122 # 使用服务名,自动DNS解析 PORT: 23000 ports: - \"23000:23000\" - \"8888:8888\" volumes: - /data/storage:/var/fdfs depends_on: - tracker restart: always command: [\"/entrypoint.sh\", \"storage\"]

k8s-tracker.yaml

apiVersion: apps/v1kind: Deploymentmetadata: name: fastdfs-tracker namespace: testspec: replicas: 1 selector: matchLabels: app: fastdfs-tracker strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: creationTimestamp: null labels: app: fastdfs-tracker spec: containers: - command: - /bin/bash - /entrypoint.sh - tracker env: - name: FASTDFS_BASE_PATH value: /var/fdfs - name: PORT value: \"22122\" - name: TRACKER_SERVER value: fastdfs-tracker:22122 image: fastdfs-nginx:6.11.0 imagePullPolicy: IfNotPresent name: tracker ports: - containerPort: 22122 hostPort: 22122 protocol: TCP volumeMounts: - mountPath: /var/fdfs name: tracker-volume #hostNetwork: true volumes: - hostPath: path: /data/fastdfs/tracker type: \"\" name: tracker-volume---apiVersion: v1kind: Servicemetadata: name: fastdfs-tracker namespace: testspec: ipFamilyPolicy: SingleStack ports: - name: fastdfs-tracker port: 22122 protocol: TCP targetPort: 22122 selector: app: fastdfs-tracker sessionAffinity: None type: NodePort

k8s-storage.yaml

apiVersion: apps/v1kind: Deploymentmetadata: name: fastdfs-storage namespace: testspec: replicas: 1 selector: matchLabels: app: fastdfs-storage strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: creationTimestamp: null labels: app: fastdfs-storage spec: containers: - command: - /bin/bash - /entrypoint.sh - storage env: - name: TRACKER_SERVER value: fastdfs-tracker:22122 - name: PORT value: \"23000\" image: fastdfs-nginx:6.11.0 imagePullPolicy: IfNotPresent name: storage ports: - containerPort: 23000 hostPort: 23000 protocol: TCP - containerPort: 8888 hostPort: 8888 protocol: TCP volumeMounts: - mountPath: /var/fdfs name: storage-volume #hostNetwork: true volumes: - hostPath: path: /data/fastdfs/storage type: \"\" name: storage-volume---apiVersion: v1kind: Servicemetadata: name: fastdfs-storage namespace: testspec: ipFamilyPolicy: SingleStack ports: - name: fastdfs-storage port: 23000 protocol: TCP targetPort: 23000 - name: fastdfs-storage-http port: 8888 protocol: TCP targetPort: 8888 selector: app: fastdfs-storage sessionAffinity: None type: NodePort

测试

自带fdfs_test命令

fdfs_test /etc/fdfs/client.conf upload ./aaa.jpeg

FastDFS 6.11.0 单机环境搭建与测试(附 Nginx 集成)+ docker构建+k8s启动文件


python脚本测试

这里博主放置两个脚本,分别是测试fastdfs5.X 和fastdfs 6.X的,两个是不一样,图片自行配置

  • client.conf

    # 这个不分版本,记得修改地址connect_timeout=30network_timeout=60base_path=/tmptracker_server=192.168.1.2:22122log_level=info
  • f5.py

    # fastdfs 5.Xfrom fdfs_client.client import Fdfs_client, get_tracker_confdef test_fastdfs_upload(): # 加载配置文件路径 conf_path = \'./client.conf\' # 请根据实际路径调整 client = Fdfs_client(conf_path) # 上传文件(根据实际文件名改) filename = \'./aaa.jpeg\' try: result = client.upload_by_filename(filename) print(\"上传结果:\", result) except Exception as e: print(\"上传出错:\", e)if __name__ == \'__main__\': test_fastdfs_upload()
  • f6.py
    fastdfs-client的github地址

    pip install fastdfs-client
    # fastdfs 6.Xfrom fastdfs_client import FastdfsClientclient = FastdfsClient(\'./client.conf\')print(\'1\')res = client.upload_by_filename(\'./aaa.jpeg\')print(\'2\')print(\"上传结果:\", res)

执行结果参考

[root@sonar test]# python3 f5.py 上传结果: {\'Group name\': \'group1\', \'Remote file_id\': \'group1/M00/0A/0F/Cv9lHmh_V8qAWtmJAACatpnOrTc65.jpeg\', \'Status\': \'Upload successed.\', \'Local file name\': \'./aaa.jpeg\', \'Uploaded size\': \'38.68KB\', \'Storage IP\': \'192.168.1.3\'}[root@sonar test]# python3 f6.py 12上传结果: {\'Group name\': \'group1\', \'Remote file_id\': \'group1/M00/0A/0F/Cv9lHmh_V86AfIy3AACatpnOrTc23.jpeg\', \'Status\': \'Upload successed.\', \'Local file name\': \'./aaa.jpeg\', \'Uploaded size\': \'38.68KB\', \'Storage IP\': \'192.168.1.2\'}[root@sonar test]# 

常见问题

  1. 访问 404
    检查 mod_fastdfs.confstore_path0 是否与 storage.conf 保持一致。

  2. Nginx 启动无 Worker
    检查 /var/log/nginx/error.log,确认 mod_fastdfs.conf 配置正确。

  3. Tracker 显示磁盘空间为 0
    确保 store_path0 目录存在且权限正确。

  4. 存储剩余10%时候fastdfs上传失败
    检查tracker.conf中的reserved_storage_space值,默认是10%可以自行更改

  5. k8s重启问题
    注意存储下边的storage/data/fdfs_storaged.pid是否被清理tracker/data/fdfs_trackerd.pid


总结与建议

  • 单机环境 适合功能验证,生产环境建议 多 Tracker + 多 Storage 集群
  • 定期清理日志,避免 base_path 空间被占满。