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
- 构建
- 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 的监听端口、日志路径、存储调度策略等。 |
安装与配置
安装基础依赖
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
安装 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/src
make
make 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/fastdfs
group_name = group1
store_path0 = /var/fastdfs
tracker_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/fastdfs
tracker_server = 192.168.1.2:22122
创建目录并测试:
mkdir -p /var/fastdfs
fdfs_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/
# 启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
插个图片,这是/etc/fdfs下所有文件
storage_ids.conf 这个是启动后生成的,其他配置博文都有
Dockerfile编写
注:
自行变更配置文件,不变更也可以
首先所有软件放到同一个目录下,再linux下进行的
文件名 | 说明 |
---|---|
Dockerfile | 用于构建 FastDFS + Nginx 镜像的核心文件,定义了基础镜像、依赖安装及环境变量等。 |
entrypoint.sh | 容器启动脚本,通常用于启动 tracker 或 storage 服务,并可附加执行 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 地址、端口及存储策略。 |
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. 编译安装 libfastcommon
RUN tar xf libfastcommon-1.0.71.tar.gz -C /usr/local/ && \cd /usr/local/libfastcommon-1.0.71 && \./make.sh && ./make.sh install# 4. 编译安装 libserverframe
RUN tar xf libserverframe-1.2.1.tar.gz -C /usr/local/ && \cd /usr/local/libserverframe-1.2.1 && \./make.sh && ./make.sh install# 5. 编译安装 FastDFS
RUN 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-module
RUN 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.conf
COPY storage.conf /etc/fdfs/storage.conf
COPY client.conf /etc/fdfs/client.conf
COPY mod_fastdfs.conf /etc/fdfs/mod_fastdfs.conf
COPY 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.sh
RUN 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/bash
set -e### 1. 默认环境变量设置 ###
: ${FASTDFS_BASE_PATH:=/var/fdfs}
: ${GROUP_NAME:=group1}
: ${PORT:=22122}
: ${TRACKER_SERVER:=127.0.0.1:22122}FASTDFS_MODE="tracker" # 默认运行 tracker
LOG_DIR="${FASTDFS_BASE_PATH}/logs"
mkdir -p "${LOG_DIR}"### 2. 解析模式参数 ###
case "$1" intracker)FASTDFS_MODE="tracker";;storage)FASTDFS_MODE="storage";;monitor)sed -i "s|tracker_server=.*$|tracker_server=${TRACKER_SERVER}|g" /etc/fdfs/client.confexec 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" ]; thensed -i "s|store_path0.*$|store_path0=/var/fdfs|g" /etc/fdfs/mod_fastdfs.confsed -i "s|url_have_group_name =.*$|url_have_group_name = true|g" /etc/fdfs/mod_fastdfs.conf
fiif [ "$FASTDFS_MODE" != "all" ]; then# tracker 或 storage 模式sed -i "s|^port=.*$|port=${PORT}|g" /etc/fdfs/${FASTDFS_MODE}.confsed -i "s|tracker_server=.*$|tracker_server=${TRACKER_SERVER}|g" /etc/fdfs/storage.confsed -i "s|tracker_server=.*$|tracker_server=${TRACKER_SERVER}|g" /etc/fdfs/client.confsed -i "s|tracker_server=.*$|tracker_server=${TRACKER_SERVER}|g" /etc/fdfs/mod_fastdfs.confsed -i "s|group_name=.*$|group_name=${GROUP_NAME}|g" /etc/fdfs/storage.confsed -i "s|group_name=.*$|group_name=${GROUP_NAME}|g" /etc/fdfs/mod_fastdfs.conf
fi### 4. 启动服务并记录日志文件 ###
start_service() {local mode=$1local 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" ]; thenfdfs_storaged /etc/fdfs/storage.conf stop || truefdfs_trackerd /etc/fdfs/tracker.conf stop || trueelsefdfs_${FASTDFS_MODE}d /etc/fdfs/${FASTDFS_MODE}.conf stop || truefi/usr/local/nginx/sbin/nginx -s quit || trueexit 0
}
trap stop_service SIGTERM SIGINT### 6. 启动对应模式 ###
if [ "$FASTDFS_MODE" = "all" ]; thenstart_service "tracker"start_service "storage"/usr/local/nginx/sbin/nginxtail -F "${LOG_DIR}/trackerd.log" "${LOG_DIR}/storaged.log"
else[ "$FASTDFS_MODE" = "storage" ] && /usr/local/nginx/sbin/nginxstart_service "$FASTDFS_MODE"tail -F "${LOG_DIR}/${FASTDFS_MODE}d.log"
fi
mod_fastdfs.conf
connect_timeout=10
network_timeout=30
base_path=/tmp
load_fdfs_parameters_from_tracker=true
storage_sync_file_max_delay = 86400
use_storage_id = false
storage_ids_filename = storage_ids.conf
tracker_server=127.0.0.1:22122
storage_server_port=23000
group_name=group1
url_have_group_name = true
store_path_count=1
store_path0=/var/fdfs
log_level=info
log_filename=
response_mode=proxy
if_alias_prefix=
flv_support = true
flv_extension = flv
group_count = 0
# 这里注意mime.types是再nginx编译出来的,可以拷贝走,我懒
http.mime_types_filename=/usr/local/nginx/conf/mime.types
http.default_content_type=application/octet-stream
storage.conf
disabled=false
group_name=group1
bind_addr=
client_bind=true
port=23000
connect_timeout=30
network_timeout=60
heart_beat_interval=30
stat_report_interval=60
base_path=/var/fdfs
max_connections=256
buff_size = 256KB
accept_threads=1
work_threads=4
disk_rw_separated = true
disk_reader_threads = 1
disk_writer_threads = 1
sync_wait_msec=50
sync_interval=0
sync_start_time=00:00
sync_end_time=23:59
write_mark_file_freq=500
store_path_count=1
store_path0=/var/fdfs
subdir_count_per_path=256
tracker_server=127.0.0.1:22122
log_level=info
run_by_group=
run_by_user=
allow_hosts=*
file_distribute_path_mode=0
file_distribute_rotate_count=100
fsync_after_written_bytes=0
sync_log_buff_interval=10
sync_binlog_buff_interval=10
sync_stat_file_interval=300
thread_stack_size=512KB
upload_priority=10
if_alias_prefix=
check_file_duplicate=0
file_signature_method=hash
key_namespace=FastDFS
keep_alive=0
use_access_log = false
rotate_access_log = false
access_log_rotate_time=00:00
rotate_error_log = false
error_log_rotate_time=00:00
rotate_access_log_size = 0
rotate_error_log_size = 0
log_file_keep_days = 0
file_sync_skip_invalid_record=false
use_connection_pool = false
connection_pool_max_idle_time = 3600
http.domain_name=
http.server_port=8888
tracker.conf
disabled=false
bind_addr=
port=22122
connect_timeout=30
network_timeout=60
base_path=/var/fdfs
max_connections=256
accept_threads=1
work_threads=4
min_buff_size = 8KB
max_buff_size = 128KB
store_lookup=2
store_group=group2
store_server=0
store_path=0
download_server=0
reserved_storage_space = 10%
log_level=info
run_by_group=
run_by_user=
allow_hosts=*
sync_log_buff_interval = 10
check_active_interval = 120
thread_stack_size = 64KB
storage_ip_changed_auto_adjust = true
storage_sync_file_max_delay = 86400
storage_sync_file_max_time = 300
use_trunk_file = false
slot_min_size = 256
slot_max_size = 16MB
trunk_file_size = 64MB
trunk_create_file_advance = false
trunk_create_file_time_base = 02:00
trunk_create_file_interval = 86400
trunk_create_file_space_threshold = 20G
trunk_init_check_occupying = false
trunk_init_reload_from_binlog = false
trunk_compress_binlog_min_interval = 0
use_storage_id = false
storage_ids_filename = storage_ids.conf
id_type_in_filename = ip
store_slave_file_use_link = false
rotate_error_log = false
error_log_rotate_time=00:00
rotate_error_log_size = 0
log_file_keep_days = 0
use_connection_pool = false
connection_pool_max_idle_time = 3600
http.server_port=8080
http.check_alive_interval=30
http.check_alive_type=tcp
http.check_alive_uri=/status.html
构建
一切准备就绪直接进行构建
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.0container_name: fastdfs-trackerenvironment:FASTDFS_BASE_PATH: /var/fdfsports:- "22122:22122"volumes:- /data/tracker:/var/fdfsrestart: alwayscommand: ["/entrypoint.sh", "tracker"]storage:image: fastdfs-nginx:6.11.0container_name: fastdfs-storageenvironment:TRACKER_SERVER: tracker:22122 # 使用服务名,自动DNS解析PORT: 23000ports:- "23000:23000"- "8888:8888"volumes:- /data/storage:/var/fdfsdepends_on:- trackerrestart: alwayscommand: ["/entrypoint.sh", "storage"]
k8s-tracker.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: fastdfs-trackernamespace: test
spec:replicas: 1selector:matchLabels:app: fastdfs-trackerstrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:creationTimestamp: nulllabels:app: fastdfs-trackerspec:containers:- command:- /bin/bash- /entrypoint.sh- trackerenv:- name: FASTDFS_BASE_PATHvalue: /var/fdfs- name: PORTvalue: "22122"- name: TRACKER_SERVERvalue: fastdfs-tracker:22122image: fastdfs-nginx:6.11.0imagePullPolicy: IfNotPresentname: trackerports:- containerPort: 22122hostPort: 22122protocol: TCPvolumeMounts:- mountPath: /var/fdfsname: tracker-volume#hostNetwork: truevolumes:- hostPath:path: /data/fastdfs/trackertype: ""name: tracker-volume
---
apiVersion: v1
kind: Service
metadata:name: fastdfs-trackernamespace: test
spec:ipFamilyPolicy: SingleStackports:- name: fastdfs-trackerport: 22122protocol: TCPtargetPort: 22122selector:app: fastdfs-trackersessionAffinity: Nonetype: NodePort
k8s-storage.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: fastdfs-storagenamespace: test
spec:replicas: 1selector:matchLabels:app: fastdfs-storagestrategy:rollingUpdate:maxSurge: 25%maxUnavailable: 25%type: RollingUpdatetemplate:metadata:creationTimestamp: nulllabels:app: fastdfs-storagespec:containers:- command:- /bin/bash- /entrypoint.sh- storageenv:- name: TRACKER_SERVERvalue: fastdfs-tracker:22122- name: PORTvalue: "23000"image: fastdfs-nginx:6.11.0imagePullPolicy: IfNotPresentname: storageports:- containerPort: 23000hostPort: 23000protocol: TCP- containerPort: 8888hostPort: 8888protocol: TCPvolumeMounts:- mountPath: /var/fdfsname: storage-volume#hostNetwork: truevolumes:- hostPath:path: /data/fastdfs/storagetype: ""name: storage-volume
---
apiVersion: v1
kind: Service
metadata:name: fastdfs-storagenamespace: test
spec:ipFamilyPolicy: SingleStackports:- name: fastdfs-storageport: 23000protocol: TCPtargetPort: 23000- name: fastdfs-storage-httpport: 8888protocol: TCPtargetPort: 8888selector:app: fastdfs-storagesessionAffinity: Nonetype: NodePort
测试
自带fdfs_test命令
fdfs_test /etc/fdfs/client.conf upload ./aaa.jpeg
python脚本测试
这里博主放置两个脚本,分别是测试fastdfs5.X 和fastdfs 6.X的,两个是不一样,图片自行配置
-
client.conf
# 这个不分版本,记得修改地址 connect_timeout=30 network_timeout=60 base_path=/tmp tracker_server=192.168.1.2:22122 log_level=info
-
f5.py
# fastdfs 5.X from 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.X from 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
1
2
上传结果: {'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]#
常见问题
-
访问 404
检查mod_fastdfs.conf
中store_path0
是否与storage.conf
保持一致。 -
Nginx 启动无 Worker
检查/var/log/nginx/error.log
,确认mod_fastdfs.conf
配置正确。 -
Tracker 显示磁盘空间为 0
确保store_path0
目录存在且权限正确。 -
存储剩余10%时候fastdfs上传失败
检查tracker.conf
中的reserved_storage_space
值,默认是10%可以自行更改 -
k8s重启问题
注意存储下边的storage/data/fdfs_storaged.pid
是否被清理tracker/data/fdfs_trackerd.pid
总结与建议
- 单机环境 适合功能验证,生产环境建议 多 Tracker + 多 Storage 集群。
- 定期清理日志,避免
base_path
空间被占满。