介绍
FastDFS 是一个开源的分布式文件系统,主要用于高效地存储和管理大规模的文件。它特别适合处理海量文件存储的场景,如图片、视频等。
主要特点
- 高性能:FastDFS 设计为高性能的文件系统,支持高并发读写操作,能够满足大规模文件存储和访问的需求。
- 分布式存储:文件被分布在多个服务器上,通过分布式的方式管理文件,提升了系统的可扩展性和可靠性。
- 自动负载均衡:系统内置负载均衡机制,可以自动将文件请求分配到负载较低的服务器上,确保系统的稳定性和高效性。
- 高可用性:支持主从复制,通过多个存储节点进行数据备份和恢复,确保数据的安全性和系统的高可用性。
主要组件
- Tracker:负责客户端的连接管理和文件存储节点的负载均衡。Tracker 节点保存了文件存储节点的信息,并处理客户端的请求,决定将文件存储到哪个存储节点。
- Storage:负责实际的文件存储和管理。Storage 节点用于存储文件数据,并对文件进行读写操作。每个 Storage 节点可以有多个数据分片,以提高存储容量和性能。
- Client:与 Tracker 进行通信,获取文件存储节点的信息,并将文件上传到指定的 Storage 节点。客户端也可以通过 Tracker 获取文件的存储位置来进行下载操作。
常见应用
- 图片和视频存储:用于存储大量的图片和视频文件,适合互联网平台、大型社交网站等场景。
- 备份和归档:用于数据备份和归档,确保数据的长期存储和恢复能力。
使用场景
- 电商平台:存储商品图片、用户上传的图片等。
- 社交网络:存储用户上传的照片、视频等内容。
- 内容分发网络 (CDN):用于存储和分发大量的静态资源文件。
环境
IP | 主机名 | 系统 |
---|---|---|
10.255.101.102 | 10-255-101-10 | CentOS Linux release 7.9.2009 (Core) |
所需安装包版本
软件 | 版本 |
---|---|
fastdfs | 6.06 |
nginx | 1.26.2 |
libfastcommon | 1.0.43 |
fastdfs-nginx-module | 1.22 |
fastdfs源码地址
csdn下载
Fastdfs部署
安装依赖包
首先,安装 FastDFS 和 Nginx 所需的依赖包:
yum -y install gcc gcc-c++ libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel libevent libevent-devel perl unzip net-tools
安装libfastcommon
# 解压 libfastcommon 安装包
tar xf libfastcommon-1.0.43.tar.gz
# 进入 libfastcommon 目录
cd libfastcommon-1.0.43
# 执行安装脚本
./make.sh
# 安装 libfastcommon
./make.sh install
注: 确认 $?
的值为 0
表示安装成功。
安装fastdfs
# 解压 FastDFS 安装包
unzip fastdfs-V6.06.zip
# 进入 FastDFS 目录
cd fastdfs-V6.06
# 执行安装脚本
./make.sh
# 安装 FastDFS
./make.sh install
注: 确认 $?
的值为 0
表示安装成功。
检查fastdfs是否安装成功
# 检查 FastDFS 的命令是否在 /usr/bin 目录下
ls /usr/bin|grep fdfs
配置fastdfs的客户端使用的配置文件
# 进入 FastDFS 配置目录
cd /etc/fdfs
# 备份示例配置文件
mkdir bak
mv *sample bak/
# 修改 ulimit 限制
ulimit -n 25600
# 创建 FastDFS 数据目录
mkdir -p /data/app/fastdfs
# 编辑配置文件
vim client.conf
vim storage.conf
vim tracker.conf
client.conf
connect_timeout=30
network_timeout=60
## 路径
base_path=/data/app/fastdfs
## 地址
tracker_server=10.255.101.102:22122
log_level=info
use_connection_pool = true
connection_pool_max_idle_time = 3600
load_fdfs_parameters_from_tracker=false
use_storage_id = false
storage_ids_filename = storage_ids.conf
http.tracker_server_port=80
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=/data/app/fastdfs
max_connections=25600
buff_size = 256KB
accept_threads=2
work_threads=20
disk_rw_separated = true
disk_reader_threads = 5
disk_writer_threads = 5
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=/data/app/fastdfs
subdir_count_per_path=256
## 地址
tracker_server=10.255.101.102: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 = true
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=/data/app/fastdfs
max_connections=25600
accept_threads=1
work_threads=20
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
启动
# 启动 Tracker 服务
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
# 启动 Storage 服务
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
# 检查服务是否启动成功
ps -ef | grep fdfs
netstat -nltp
配置开机启动
编辑 /etc/rc.local
,添加启动命令:
#!/bin/bash
touch /var/lock/subsys/local
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
注: 确保 /etc/rc.d/rc.local
文件具有执行权限 chmod +x /etc/rc.d/rc.local
。
nginx部署
解压压缩包
# 进入 FastDFS 部署目录
cd /data/bag/fastdfs/
# 解压 fastdfs-nginx-module 和 nginx
tar xf fastdfs-nginx-module-1.22.tar.gz
tar xf nginx-1.26.2.tar.gz
安装nginx
# 进入 Nginx 目录
cd nginx-1.26.2
# 配置 Nginx,添加 FastDFS 模块
./configure --prefix=/data/app/nginx --add-module=/data/bag/fastdfs/fastdfs-nginx-module-1.22/src
# 编译和安装 Nginx
make
make install
配置fastdfs-nginx-module
生成配置文件并进行配置:
cp /data/bag/fastdfs/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/
# 编辑 mod_fastdfs.conf
vim /etc/fdfs/mod_fastdfs.conf
mod_fastdfs.conf
#include http.conf
connect_timeout=2
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=10.255.101.102:22122
storage_server_port=23000
group_name=group1
url_have_group_name = true
store_path_count=1
# 路径
store_path0=/data/app/fastdfs
log_level=info
log_filename=
response_mode=proxy
if_alias_prefix=
flv_support = true
flv_extension = flv
group_count = 0
复制另两个web访问用到配置文件到fdfs配置目录下:
cp /data/bag/fastdfs/fastdfs-V6.06/conf/http.conf /etc/fdfs/
cp /data/bag/fastdfs/fastdfs-V6.06/conf/mime.types /etc/fdfs/
配置nginx.conf
vim /data/app/nginx/conf/nginx.conf
nginx.conf
user root;
worker_processes 1;
error_log logs/error.log debug;
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"';
access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
server {
listen 8888;
access_log logs/host.access.log main;
location ~/group([0-9])/M00 {
alias /data/app/fastdfs/data;
ngx_fastdfs_module;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
配置启动
# 判断下配置文件是否正确
/data/app/nginx/sbin/nginx -t
# 启动
/data/app/nginx/sbin/nginx -c /data/app/nginx/conf/nginx.conf
# 查看是否启动成功
netstat -nltp |grep 8888
ps -ef | grep nginx
supervisord配置
[program:nginx]
command=/data/app/nginx/sbin/nginx -g 'daemon off;'
directory=/data/app/nginx
autostart=true
autorestart=true
redirect_stderr=true
priority=10
stdout_logfile=/data/app/nginx/nginx.log
测试
[root@10-255-101-102 fastdfs]# pwd
/data/bag/fastdfs
[root@10-255-101-102 fastdfs]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf ./kong.jpg
group1/M00/00/00/Cv9lZmbNn1yARojDACTXTYP85pw642.jpg
[root@10-255-101-102 fastdfs]#
查看fdfs的版本
fdfs_monitor /etc/fdfs/client.conf | grep version