当前位置:首页 > 技术 > 正文内容

CentOS 7 环境下 FastDFS 与 Nginx 分布式文件系统集群部署指南

访客 技术 2026年6月9日 1

一、 系统环境初始化与依赖安装

在构建分布式文件系统之前,需要确保操作系统的编译环境和基础依赖库已就绪。这里我们切换至国内镜像源以提升下载速度,并安装必要的开发工具包。

# 备份并替换为网易镜像源(可选)
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
yum clean all && yum makecache

# 安装编译工具及FastDFS运行所需的依赖库
yum install -y gcc gcc-c++ make automake autoconf libtool
yum install -y zlib zlib-devel pcre pcre-devel openssl openssl-devel
yum install -y libevent libevent-devel perl unzip net-tools wget

二、 部署基础公共库 libfastcommon

FastDFS 依赖于 libfastcommon 提供的基础 C 语言函数库。我们需要从源码进行编译安装。

# 解压并进入 libfastcommon 源码目录
tar -zxvf libfastcommon-1.0.43.tar.gz
cd libfastcommon-1.0.43

# 执行编译与安装脚本
./make.sh
./make.sh install

安装完成后,动态链接库默认会被放置于 /usr/lib64 目录下。由于 FastDFS 主程序在运行时默认寻找 /usr/lib 路径,因此需要建立符号链接以防止找不到库文件的错误。

ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so

三、 安装与配置 FastDFS 核心组件

3.1 编译安装 FastDFS

# 解压 FastDFS 源码包
tar -zxvf fastdfs-6.06.tar.gz
cd fastdfs-6.06

# 编译并安装
./make.sh
./make.sh install

安装成功后,相关的配置文件模板会被自动复制到 /etc/fdfs/ 目录下。为了方便使用,我们将模板重命名并统一规划数据存储路径。

# 创建统一的数据与日志存储根目录
mkdir -p /data/fastdfs/{tracker,storage,client}

# 复制并重命名配置文件
cd /etc/fdfs/
cp tracker.conf.sample tracker.conf
cp storage.conf.sample storage.conf
cp client.conf.sample client.conf

3.2 配置并启动 Tracker(追踪器)

Tracker 主要负责调度和负载均衡。编辑 tracker.conf,修改基础路径:

vim /etc/fdfs/tracker.conf

找到 base_path 参数并修改为:

base_path=/data/fastdfs/tracker

启动 Tracker 服务并验证进程状态:

# 启动服务
fdfs_trackerd /etc/fdfs/tracker.conf

# 检查进程是否正常运行
ps aux | grep fdfs_trackerd

3.3 配置并启动 Storage(存储器)

Storage 负责实际的文件存储。编辑 storage.conf,调整以下核心参数:

vim /etc/fdfs/storage.conf
base_path=/data/fastdfs/storage
store_path0=/data/fastdfs/storage
# 假设 Tracker 节点的 IP 为 10.0.0.50,默认端口为 22122
tracker_server=10.0.0.50:22122

启动 Storage 服务并确认进程:

fdfs_storaged /etc/fdfs/storage.conf
ps aux | grep fdfs_storaged

3.4 客户端上传测试

在验证 Nginx 集成前,先通过自带的客户端工具测试文件上传功能。修改 client.conf

base_path=/data/fastdfs/client
tracker_server=10.0.0.50:22122

执行上传命令:

fdfs_upload_file /etc/fdfs/client.conf /tmp/test_image.png
# 成功输出示例:group1/M00/00/00/wKgBOl3r2XuAHmqvAAE2TibrR2c044.png

四、 Nginx 与 FastDFS 模块集成

为了实现通过 HTTP 协议直接访问 FastDFS 中的文件,需要编译 Nginx 并加载 fastdfs-nginx-module 模块。

4.1 调整模块配置与依赖链接

进入 fastdfs-nginx-module 的源码目录,修改 config 文件以修正包含路径和库路径:

cd /usr/local/src/fastdfs-nginx-module/src
vim config

将原有的路径配置修改为实际安装路径:

CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"

同样,为客户端库建立软链接:

ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

将模块的配置文件复制到 FastDFS 配置目录:

cp mod_fastdfs.conf /etc/fdfs/

4.2 配置 mod_fastdfs.conf

编辑 /etc/fdfs/mod_fastdfs.conf,使其与 Tracker 和 Storage 的配置保持一致:

base_path=/data/fastdfs/storage
tracker_server=10.0.0.50:22122
url_have_group_name = true
store_path0=/data/fastdfs/storage

4.3 编译安装 Nginx

创建 Nginx 运行所需的临时目录,并开始配置编译参数:

mkdir -p /var/tmp/nginx/{client,proxy,fastcgi,uwsgi,scgi}

cd /usr/local/src/nginx-1.20.1
./configure \
--prefix=/usr/local/nginx \
--pid-path=/var/run/nginx/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client \
--http-proxy-temp-path=/var/tmp/nginx/proxy \
--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--add-module=/usr/local/src/fastdfs-nginx-module/src

make && make install

4.4 配置 Nginx 路由规则

编辑 Nginx 主配置文件 /usr/local/nginx/conf/nginx.conf,添加针对 FastDFS 文件路径的拦截规则:

server {
    listen       80;
    server_name  10.0.0.50;

    # 拦截包含 group 名称的请求路径,交由 fastdfs 模块处理
    location ~ /group[1-9]/M0[0-9] {
        ngx_fastdfs_module;
    }
}

启动 Nginx 服务:

/usr/local/nginx/sbin/nginx

五、 最终联调与故障排查

使用测试工具生成带有完整 URL 的上传报告:

fdfs_test /etc/fdfs/client.conf upload /tmp/test_image.png

在输出的日志中,找到 example file url 对应的 HTTP 链接,在浏览器中访问。如果文件能够正常显示,说明整个集群部署成功。

若上传成功但浏览器访问返回 404 或 502 错误,请重点排查以下环节:

  • 确认 /etc/fdfs/mime.types 文件是否存在,Nginx 模块依赖该文件识别文件类型。
  • 检查 mod_fastdfs.conf 中的 tracker_server IP 和端口是否与 Tracker 实际监听一致。
  • 查看 Nginx 的 error.log,确认是否存在权限不足或模块加载失败的报错信息。

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。