FastDFS
FastDFS介绍
FastDFS(Fast Distributed File System)是一个开源的分布式文件系统,主要用于大规模的分布式存储。它最初是由中国开发者Yu Qiao开发的,旨在提供高性能、可靠性和可扩展性的文件存储解决方案。FastDFS主要用于解决海量文件存储和访问的问题,特别适用于互联网应用中的大规模文件存储需求,如图片、音视频文件等。
以下是FastDFS的一些主要特点和组件:
分布式架构: FastDFS采用分布式架构,文件被分割成若干小块,然后分布式存储在多个存储服务器上,实现了水平扩展,提高了系统的可扩展性和性能。
轻量级协议: FastDFS使用自定义的轻量级协议进行通信,客户端通过这个协议与存储服务器进行交互,实现文件的上传、下载、删除等操作。
Tracker服务器: FastDFS的架构中包含Tracker服务器和Storage服务器。Tracker服务器主要用于协调和管理存储服务器,负责文件的上传、下载请求的调度。
Storage服务器: Storage服务器用于存储实际的文件数据,可以通过横向扩展增加存储容量。每个Storage服务器负责一部分文件的存储和管理。
高性能: FastDFS被设计成高性能的文件存储系统,具有快速的文件上传和下载速度。它采用了一些优化策略,如异步写入、负载均衡等,以提高系统的整体性能。
支持文件同步: FastDFS支持文件的同步功能,可以将文件在多个Storage服务器之间同步,提高文件的可用性和可靠性。
开源: FastDFS是开源的,采用了GPL协议,用户可以根据自己的需求进行定制和扩展。
使用FastDFS的步骤一般包括安装Tracker服务器和Storage服务器,配置客户端,然后通过客户端进行文件的上传和下载操作。由于FastDFS的轻量级设计和分布式存储特性,它在一些需要大规模文件存储和访问的场景中得到了广泛应用。
下载地址
FastDFS:
https://github.com/happyfish100
Nginx:
http://nginx.org/en/download.html
部署的环境
系统环境:Centos 7
gcc:4.8.5
安装运行依赖
yum -y install wget perl gcc gcc-c++ libevent bzip2-devel libxml2 libxslt-devel gd-devel GeoIP-devel
wget下载
wget https://github.com/happyfish100/libfastcommon/archive/refs/tags/V1.0.57.tar.gz
wget https://github.com/happyfish100/libserverframe/archive/refs/tags/V1.1.15.tar.gz
wget https://github.com/happyfish100/fastdfs/archive/refs/tags/V6.08.tar.gz
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/refs/tags/V1.22.tar.gz
wget http://nginx.org/download/nginx-1.18.0.tar.gz
安装 libfastcommon-1.0.57
tar -zxvf V1.0.57.tar.gz
cd libfastcommon-1.0.57
./make.sh clean && ./make.sh && ./make.sh install
查找libfastcommon.so
#/usr/lib存在该文件 则不需要创建软连接 如果没有需要创建
ls -ltr /usr/lib/libfastcommon.so
ls -ltr /usr/lib64/libfastcommon.so
安装 libserverframe-1.1.15
tar -zxvf V1.1.15.tar.gz
cd libserverframe-1.1.15
./make.sh clean && ./make.sh && ./make.sh install
安装 fastdfs-6.08
tar -zxvf V6.08.tar.gz
cd fastdfs-6.08
./make.sh clean && ./make.sh && ./make.sh install
备份fastdfs的配置文件 (一定要做 不可以省略)
cd /etc/fdfs
cp client.conf client.conf.bak
cp storage.conf storage.conf.bak
cp storage_ids.conf storage_ids.conf.bak
cp tracker.conf tracker.conf.bak
fastdfs关联tracker配置
#创建 存储tracker的数据文件和日志文件
mkdir -p /fastdfs/data/fastdfs_tracker
# 设置tracker的数据文件和日志目录
sed -i 's|^base_path = .*|base_path = /fastdfs/data/fastdfs_tracker|' /etc/fdfs/tracker.conf
#启动
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
#检查
netstat -lntup |grep fdfs
fastdfs关联storage配置
#创建storage服务器文件存放路径
mkdir -p /fastdfs/data/fastdfs_storage
mkdir -p /fastdfs/data/fastdfs_storage_data
#编辑安装 fastdfs 软件时产生的storage.conf配置文件
sed -i 's|^base_path = .*|base_path = /fastdfs/data/fastdfs_storage|' /etc/fdfs/storage.conf #设置storage数据文件和日志目录
sed -i 's|^store_path0 = .*|store_path0 = /fastdfs/data/fastdfs_storage_data|' /etc/fdfs/storage.conf #图片文件实际存储路径
sed -i '0,/^#* *tracker_server =/s/^#* *tracker_server =.*//' /etc/fdfs/storage.conf
sed -i 's|^tracker_server = .*|tracker_server = 10.158.3.76:22122|' /etc/fdfs/storage.conf #tracker 服务器的 IP地址和端口号
#启动
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
#检查tracker与storage是否整合成功
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
测试fastdfs客户端工具进行文件上传下载
sed -i 's|^base_path = .*|base_path = /fastdfs/data/fastdfs_tracker|' /etc/fdfs/client.conf # tracker服务器文件路径
sed -i '0,/^#* *tracker_server =/s/^#* *tracker_server =.*//' /etc/fdfs/client.conf
sed -i 's|^tracker_server = .*|tracker_server = 10.158.3.76:22122|' /etc/fdfs/client.conf #tracker 服务器的 IP地址和端口号
sed -i 's|^http.tracker_server_port = .*|http.tracker_server_port = 8080|' /etc/fdfs/client.conf #tracker 服务的 http.server_port 端口号,必须和tracker配置文件里的设置对应起来
准备需要上传的图片(我的在/root下放了一个123.jpg)
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/123.jpg
#回显group1/M00/00/00/Cp4DTGWEA-yAXUP-AAFxEz9LpLc848.jpg
如果返回了一个路径,就表示文件已经上传成功了。
组名:group1
磁盘:M00
目录:00/00
文件名称:Cp4DTGWEA-yAXUP-AAFxEz9LpLc848.jpg
查看上传的图片新的信息
/usr/bin/fdfs_file_info /etc/fdfs/client.conf group1/M00/00/00/Cp4DTGWEA-yAXUP-AAFxEz9LpLc848.jpg
#回显
GET FROM SERVER: false
file type: normal
source storage id: 0
source ip address: 10.158.3.76
file create timestamp: 2023-12-21 17:22:52
file size: 94483
file crc32: 1061921975 (0x3f4ba4b7)
下载图片
/usr/bin/fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/Cp4DTGWEA-yAXUP-AAFxEz9LpLc848.jpg
查看存储节点状态
/usr/bin/fdfs_monitor /etc/fdfs/client.conf
安装 fastdfs-nginx-module-1.22
tar -zxvf V1.22.tar.gz
cd fastdfs-nginx-module-1.22/src
修改fastdfs-nginx-module软件安装包里面的config文件
vim fastdfs-nginx-module-1.22/src/config
删除ngx_module_incs开头的行
删除CORE_INCS开头的行
:wq 保存
安装配置nginx为storage server提供http访问接口
tar -zxvf nginx-1.18.0.tar.gz
cd nginx-1.18.0
./configure \
--user=nginxxyz \
--group=nginxxyz \
--with-threads \
--with-file-aio \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_geoip_module=dynamic \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_auth_request_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_degradation_module \
--with-http_slice_module \
--with-http_stub_status_module \
--with-stream=dynamic \
--with-stream_ssl_module \
--with-stream_realip_module \
--with-stream_geoip_module=dynamic \
--with-stream_ssl_preread_module \
--with-compat \
--with-pcre-jit \
--prefix=/usr/local/nginx \
--add-module=/opt/fastdfs-nginx-module-1.22/src
如果这里报错 就是 libxml2 libxslt-devel gd-devel GeoIP-devel 依赖没安装成功
#编译 安装
make && make install
编辑修改nginx(nginx.conf)配置文件
vim /usr/local/nginx/conf/nginx.conf
grep -Ev '#|^$' /usr/local/nginx/conf/nginx.conf
user root;
worker_processes 1;
events {
worker_connections 1024;
}
http {
default_type application/octet-stream;
include mime.types;
sendfile on;
keepalive_timeout 65;
server {
listen 80 ;
server_name localhost;
location / {
if ($args ~ type=download){
add_header Content-Disposition "attachment;";
}
ngx_fastdfs_module; #模块名称
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
拷贝fastdfs的配置文件
cp /opt/fastdfs-6.08/conf/http.conf /etc/fdfs/
cp /opt/fastdfs-6.08/conf/mime.types /etc/fdfs/
cp /opt/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/
编辑mod_fastdfs.conf文件 按照我提供的修改 添加
cat /etc/fdfs/mod_fastdfs.conf
#include http.conf
http.default_content_type = application/octet-stream
http.mime_types_filename=/etc/fdfs/mime.types
connect_timeout=2
network_timeout=30
base_path=/fastdfs/data/fastdfs_tracker # 设置storage数据文件和日志目录
load_fdfs_parameters_from_tracker=true
storage_sync_file_max_delay = 86400
use_storage_id = false
storage_ids_filename = storage_ids.conf
tracker_server=10.158.3.76:22122 # tracker服务的IP地址以及端口号
storage_server_port=23000
group_name=group1
url_have_group_name = true
store_path_count=1
store_path0=/fastdfs/data/fastdfs_storage_data # 文件实际存储路径
log_level=info
log_filename=
response_mode=proxy
if_alias_prefix=
flv_support = true
flv_extension = flv
group_count = 2 # 设置组的个数,默认为0,事实上这次只使用了group1
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/fastdfs/data/fastdfs_storage_data
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/fastdfs/data/fastdfs_storage_data
启动nginx
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
#关闭防火墙
systemctl stop firewalld
测试storage的http访问:浏览器访问ip+http端口号
http://10.158.3.76/group1/M00/00/00/Cp4DTGWEA-yAXUP-AAFxEz9LpLc848.jpg
集群 可以后面nginx加上负载均衡
upstream fdfs_group1 {
server 127.0.0.1:80;
}
server {
listen 8080;
server_name localhost;
location /group1/M00 {
proxy_pass http://fdfs_group1;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}