1,FastDFS基本介绍:FastDFS 系统有三个角色,跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。
Tracker Server: 跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server
和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。
Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。
Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。这里免不了放一张余庆老师介绍 FastDFS 的 PPT 中的一张架构图,清晰的说明了上述职责及关系:
这里免不了放一张余庆老师介绍 FastDFS 的 PPT 中的一张架构图,清晰的说明了上述职责及关系:
上述架构优点:1.高可靠性:无单点故障 2.高吞吐性:只要 Group 足够多,数据流量将足够分散。
那么怎么上传下载以及同步文件这么操作呢?我在这就不详细说全部流程了,大概上传流程就是客户端发送上传请求到Tracker Server服务器,接着Tracker Server服务器分配group和Storage Server,当然这是有一定规则的,选择好Storage Server后再根据一定规则选择存储在这个服务器会生成一个file_id,这个file_id 包含字段包括:storage server ip、文件创建时间、文件大小、文件 CRC32 校验码和随机数;每个存储目录下有两个 256 * 256 个子目录,后边你会知道一个Storage Server存储目录下有好多个文件夹的,storage 会按文件file_id进行两次 hash ,路由到其中一个子目录,然后将文件存储到该子目录下,最后生成文件路径:group 名称、虚拟磁盘路径、数据两级目录、file_id和文件后缀就是一个完整的文件地址。
2,FastDFS 在 CentOS 下配置安装部署
一、安装 libfastcommon 和 FastDFS
1,下载安装 libfastcommon ,这里是通过wget下载:
wget https://github.com /happyfish100/libfastcommon/archive/V1.0 .7 .tar .gz
解压 libfastcommon,命令:
tar -zxvf V1.0 .7 .tar .gz
移动解压目录到/usr/local下:
mv libfastcommon-1.0 .7 /usr/local /
编译,进入libfastcommon-1.0.7目录,命令:
cd /usr/local/libfastcommon-1.0 .7
./make.sh
安装,命令:
./make.sh install
显示这样的画面,就是安装 libfastcommon 成功啦。
2,下载安装 FastDFS,这里也是通过wget下载
wget https://github.com /happyfish100/fastdfs/archive/V5.05 .tar .gz
解压 FastDFS ,命令:
tar -zxvf V5.05 .tar .gz
移动解压目录到/usr/local下:
mv fastdfs-5.05 / /usr/local /
编译,进入fastfds-5.05目录,命令:
cd /usr/local/fastdfs-5.05
./make.sh
安装,命令:
./make.sh install
显示这样的画面,就是安装 FastDFS 成功啦。
二、配置 Tracker 服务
上述安装成功后,在/etc/目录下会有一个fdfs的目录,进入它。会看到三个.sample后缀的文件,这是作者给我们的示例文件,我们需要把其中的tracker.conf.sample文件改为tracker.conf配置文件并修改它。参照以下命令:
cd /etc/fdfs/
cp tracker.conf .sample tracker.conf
vim tracker.conf
# the base path to store data and log files
base_path=/home/yuqing/fastdfs
# HTTP port on this tracker server
http.server_port=8070
修改完成后我们需要建立tracker的工作目录,不然启动报错(上面base_path配置的目录)
mkdir -p /home/yuqing/fastdfs
启动tracker服务:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
查看监听:
ps -ef|grep fdfs 或 netstat -lnpt|grep fdfs
看到trackerd服务正常启动后,这时候就算 Tracker服务安装成功啦!
三、配置 Storage 服务
现在开始配置 Storage 服务,由于我这是单机器测试,你把 Storage 服务放在多台服务器也是可以的,它有 Group(组)的概念,同一组内服务器互备同步,这里不再演示。直接开始配置,依然是进入/etc/fdfs的目录操作,首先进入它。会看到三个.sample后缀的文件,我们需要把其中的storage.conf.sample文件改为storage.conf配置文件并修改它。参照以下命令:
cd /etc/fdfs/
cp storage.conf .sample storage.conf
vim storage.conf
打开storage.conf文件后,找到下面参数进行修改:
# the base path to store data and log files
base_path=/home/yuqing/fastdfs
# path(disk or mount point) count, default value is 1
store_path_count=1
# store_path#, based 0 , if store_path0 not exists, it's value is base_path
# the paths must be exist
store_path0=/home/yuqing/fastdfs
# tracker_server can ocur more than once, and tracker_server format is
# "host:port" , host can be hostname or ip address
tracker_server=192.168 .2 .121 :22122
修改完成后我们需要建立tracker的工作目录,不然启动报错(上面base_path配置的目录和store_path0配置的目录)
mkdir -p /home/yuqing/fastdfs
启动storage服务:
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
查看监听:
ps -ef|grep fdfs 或 netstat -lnpt|grep fdfs
很好,22122 和 23000端口都在监听了,这个时候你去/home/yuqing/fastdfs文件夹下看的话,会出现一大堆文件夹,而且进去还有一大堆,哈哈,这就是存放文件的啦!
到这里,我们安装配置并启动了 Tracker 和 Storage 服务,也没有报错了。那他俩是不是在通信呢?我们可以监视一下:
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
看到我红线处ACTIVE这样就 ok 啦!
四、配置 fdfs_upload_file 上传文件
依然是进入/etc/fdfs的目录操作,首先进入它。会看到三个.sample后缀的文件,我们需要把其中的client.conf.sample文件改为client.conf配置文件并修改它。参照以下命令:
cd /etc/fdfs/
cp client.conf .sample client.conf
vim client.conf
找到下面参数进行修改:
# the base path to store log files
base_path=/home/yuqing/fastdfs
# tracker_server can ocur more than once, and tracker_server format is
# "host:port" , host can be hostname or ip address
tracker_server=192.168 .2 .121 :22122
修改完成后我们就可以通过/usr/bin/fdfs_upload_file命令上传文件了,/usr/bin/fdfs_upload_file 命令用法:
[root@localhost fdfs]# /usr/bin/fdfs_upload_file
Usage: /usr/bin/fdfs_upload_file <config_file> <local_filename> [storage_ip:port] [store_path_index]
文件上传后会返回文件所在路径,我们只要把这路径保存起来,后续集成Nginx我们就可以访问到上传的文件了
总结一下
这篇文章只是进行了 FastDFS 的安装与配置,没有任何难度可言,只要按照步骤一步步走下去就可以搞定。可能中间过程中我们会由于不细心经历各种错误,只要仔细看日志信息都能解决掉的。
由于余老师在 V4.05 以后的版本就把内置 HTTP服务去掉了,推荐大家结合 Nginx 使用 fastdfs-nginx-module 模块,所以,就算这篇你测试上传成功了,你也访问不了,下一篇分布式文件系统 - FastDFS 配置 Nginx 模块及访问测试中会进行配合 Nginx 完成全部FastDFS的安装测试上传下载等等全部工作。
FastDFS 配置 Nginx 模块及访问测试点击进入
以下附带 tracker.conf 和 storage.conf 的具体配置注释
1,tracker.conf
tracker.conf 配置文件分析:
disabled=false
bind_addr=
port=22122
connect_timeout=30
network_timeout=60
base_path=/opt/fdfs
max_connections=256
work_threads=4
store_lookup=2
store_server=0
download_server=0
store_path=0
reserved_storage_space = 4 GB
log_level=info
run_by_group=
run_by_user=
allow_hosts=*
sync_log_buff_interval = 10
check_active_interval = 120
thread_stack_size = 64 KB
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 = 16 MB
trunk_file_size = 64 MB
http .disabled=false
http .server_port=8080
http .check_alive_interval=30
http .check_alive_type=tcp
http .check_alive_uri=/status.html
http .need_find_content_type=true
2,storage.conf配置文件分析
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=/opt/fdfs
max_connections=256
buff_size = 256 KB
work_threads=4
disk_rw_separated = true
disk_rw_direct = false
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=/opt/fdfs
subdir_count_per_path=256
tracker_server=x.x.x.x: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_stat_file_interval=300
thread_stack_size=512 KB
upload_priority=10
check_file_duplicate=0
key_namespace=FastDFS
keep_alive=0
http .disabled=false
http .domain_name=
http .server_port=8888
http .trunk_size=256 KB
http .need_find_content_type=true