FastDFS 分布式文件系统 搭建部署
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FastDFS 分布式文件系统 搭建部署相关的知识,希望对你有一定的参考价值。
搭建部署FastDFS 分布式文件系统
什么是分布式文件系统
分布式文件系统 ( Distributed File System ) 是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连
分布是文件系统的设计基于客户机/服务器模式
一个典型的网络可能包括多个供多用户访问的服务器
对等特性允许一些系统扮演客户机和服务的双重角色
衡量分布式文件系统的优劣
数据的存储方式
数据的读取速率
数据安全机制
FastDFS介绍
FastDFS是一款开源分布式文件系统,它用纯C语言实现,支持Linux,FreeBSD, AIX 等UNIX系统
作者为淘宝网的余庆
功能包括:文件存储,文件同步,文件访问(文件上传,文件下载) 等
解决了大容量存储和负载均衡的问题
FastDFS基本概念
FastDFS服务端有两个角色:跟踪器 ( tracker ) 和存储节点 ( storage )
— 跟踪器:主要做调度工作,在访问上起负载均衡的作用
— 存储节点:完成文件管理的所有功能,即存储,同步和提供存储接口,同时对文件的元数据进行管理
FastDFS系统结构
跟踪器和存储节点都可以由一台多台服务器构成
跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务
跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或缩小
FastDFS 上传文件过程
client 询问 tracker 上传到的 storage ,不需要附加参数
tracker 返回一台可用的storage
client 直接和 storage 通讯完成文件上传
FastDFS下载文件过程
Client 询问tracker 下载文件的storage , 参数为文件标识( 卷名和文件名 )
tracker 返回一台可用的storage
client 直接和storage 通讯完成文件下载
搭建部署FastDFS 分布式文件系统
实验使用软件包:
fastdfs-nginx-module_v1.16.tar.gz
FastDFS_v4.06.tar.gz
libevent-devel-1.4.13-4.el6.x86_64.rpm
libevent-doc-1.4.13-4.el6.noarch.rpm
libevent-headers-1.4.13-4.el6.noarch.rpm
nginx-1.7.10.tar.gz
实验使用操作系统为:RHEL6
实验拓扑图:
本案例 搭建一个简单的轮询FastDFS 分布式文件系统
只搭建一台跟踪器 俩台存储节点 为方便理解
实际生产项目中可以使用更多 但具体操作步骤不变
操作流程:
跟踪器 (tracker) pc70 192.168.4.70
配置主控服务器
存储节点 (storage) pc71 192.168.4.71 pc72 192.168.4.72
准备存储空间
配置存储节点
搭建nginx web服务器
客户端 ( client ) 192.168.4.254
上传文件
下载文件
操作步骤:
配置主控跟踪器服务器 pc70
1) 安装依赖包
# yum -y install gcc gcc-c++
# rpm -q make
make-3.81-20.el6.x86_64
# yum -y install libevent
# cd fastdfs/
# ls libevent*
libevent-devel-1.4.13-4.el6.x86_64.rpm libevent-headers-1.4.13-4.el6.noarch.rpm
libevent-doc-1.4.13-4.el6.noarch.rpm
# yum -y install *.rpm
2) 安装主包
# tar -zxf FastDFS_v4.06.tar.gz
# cd FastDFS
# ls
client conf HISTORY INSTALL php_client restart.sh storage tracker
common COPYING-3_0.txt init.d make.sh README stop.sh test
# ./make.sh
# ./make.sh install
# ls /usr/local/bin///命令存放路径
fdfs_appender_test fdfs_delete_file fdfs_storaged fdfs_upload_appender
fdfs_appender_test1 fdfs_download_file fdfs_test fdfs_upload_file
fdfs_append_file fdfs_file_info fdfs_test1 restart.sh
fdfs_crc32 fdfs_monitor fdfs_trackerd stop.sh
# ls /etc/fdfs///配置文件存放路径
client.conf http.conf mime.types storage.conf tracker.conf
3) 修改配置文件tracker.conf
# vim /etc/fdfs/tracker.conf
22 base_path=/data/fastdfs//日志文件 数据 存放目录
# mkdir -p /data/fastdfs // 创建数据存储目录
# vim /etc/fdfs/tracker.conf
36 store_lookup=0 //修改调到算法为轮询
46 store_server=0
51 store_path=0
56 download_server=0
182 use_storage_id = true//根据服务器的ID号时别
186 storage_ids_filename = storage_ids.conf//存储主机编号文件
4) 创建存储主机编号文件 storage_ids.conf
//在源码目录下有 storage_ids.conf 文件模版
# ls conf/storage_ids.conf
conf/storage_ids.conf
# cp conf/storage_ids.conf /etc/fdfs/ //使用模版 创建 storage_id 文件
# vim /etc/fdfs/storage_ids.conf //编辑 storage_id 文件,加入存储组声明
100001 group1 192.168.4.71
100002 group1 192.168.4.72
配置存储节点 pc71 pc72
1) 准备存储空间
# fdisk -l /dev/vdb
Disk /dev/vdb: 3221 MB, 3221225472 bytes
16 heads, 63 sectors/track, 6241 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xaf03cc5f
Device Boot Start End Blocks Id System
/dev/vdb1 1 6241 3145432+ 83 Linux
# mkdir -p /data/fastdfs/ //创建数据存储目录
[[email protected] ~]# blkid /dev/vdb1
/dev/vdb1: UUID="e632a1df-60d5-47a6-825b-fc47ece05569" TYPE="ext4"
[[email protected] ~]# vim /etc/fstab //将准备的存储空间挂载到 数据存储目录上
[[email protected] ~]# tail -1 /etc/fstab
UUID=e632a1df-60d5-47a6-825b-fc47ece05569 /data/fastdfs/ ext4defaults0 0
[[email protected] ~]# blkid /dev/vdb1
/dev/vdb1: UUID="86acaaca-6c2c-4a41-8052-60038c41cc92" TYPE="ext4"
[[email protected] ~]# vim /etc/fstab
[[email protected] ~]# tail -1 /etc/fstab
UUID=86acaaca-6c2c-4a41-8052-60038c41cc92/data/fastdfs/ext4defaults0 0
# mount -a
# df -h | grep /dev/vdb1
/dev/vdb1 2.9G 4.5M 2.8G 1% /data/fastdfs
2) 安装软件包
# yum -y install gcc gcc-c++
# rpm -q make
make-3.81-20.el6.x86_64
# yum -y install libevent
# cd fastdfs/
# ls libevent*
libevent-devel-1.4.13-4.el6.x86_64.rpm libevent-headers-1.4.13-4.el6.noarch.rpm
libevent-doc-1.4.13-4.el6.noarch.rpm
# yum -y install *.rpm
# tar -zxf FastDFS_v4.06.tar.gz
# cd FastDFS
# ./make.sh && ./make.sh install
# ls /usr/local/bin/
fdfs_appender_test fdfs_delete_file fdfs_storaged fdfs_upload_appender
fdfs_appender_test1 fdfs_download_file fdfs_test fdfs_upload_file
fdfs_append_file fdfs_file_info fdfs_test1 restart.sh
fdfs_crc32 fdfs_monitor fdfs_trackerd stop.sh
# ls /etc/fdfs/
client.conf http.conf mime.types storage.conf tracker.conf
3) 修改配置文件storage.conf
# vim /etc/fdfs/storage.conf
7 group_name=group1//所属存储组
37 base_path=/data/fastdfs//数据 和日志存储目录
85 sync_start_time=00:00//同步数据的默认开始时间
89 sync_end_time=23:59//同步数据的默认结束时间 实时推送
96 store_path_count=1//存储路径的个数
100 store_path0=/data/fastdfs//第一个存储路径
109 tracker_server=192.168.4.70:22122//主存储服务器的ip 端口号
140 file_distribute_path_mode=0//有多个存储路径时 数据存储路径的选择 0 轮询
145 file_distribute_rotate_count=100//当存储选择为轮询 当存储数据文件达到100时 轮询给下一个存储路径
启动服务
1)启动主控跟踪器服务器 pc70
//进入 源码安装目录中
# cp init.d/fdfs_trackerd /etc/init.d///拷贝启动脚本
# chmod +x /etc/init.d/fdfs_trackerd
# chkconfig --add fdfs_trackerd
# chkconfig fdfs_trackerd on
# service fdfs_trackerd start
Starting FastDFS tracker server:
# netstat -pantu | grep :22122
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2393/fdfs_trackerd
2) 启动存储节点 pc71 pc72
//进入 源码安装目录中
# cp init.d/fdfs_storaged /etc/init.d/
# chmod +x /etc/init.d/fdfs_storaged
# chkconfig --add fdfs_storaged
# chkconfig fdfs_storaged on
# service fdfs_storaged start
会在存储路径 初始化256子文件夹 结束后 按回车继续
storage 数据文件说明
storage 为用户创建256个目录存放上传文件
辅助文件的目录为 /data/fastdfs/data
— .data_init_flag: 初始化信息
— storage_stat.dat:统计信息
— sync/binlog.### : 更新操作记录 ( 日志 )
— sync/${id}.mark : 同步完成情况
[[email protected] ~]# netstat -pantu | grep :23000
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 3848/fdfs_storaged
tcp 0 0 192.168.4.71:35832 192.168.4.72:23000 ESTABLISHED 3848/fdfs_storaged
tcp 0 0 192.168.4.71:23000 192.168.4.72:35316 ESTABLISHED 3848/fdfs_storaged
[[email protected] ~]# netstat -pantu | grep :23000
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 3301/fdfs_storaged
tcp 0 0 192.168.4.72:23000 192.168.4.71:35832 ESTABLISHED 3301/fdfs_storaged
tcp 0 0 192.168.4.72:35316 192.168.4.71:23000 ESTABLISHED 3301/fdfs_storaged
[[email protected] ~]# netstat -pantu | grep :22122
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2393/fdfs_trackerd
tcp 0 0 192.168.4.70:22122 192.168.4.72:56753 ESTABLISHED 2393/fdfs_trackerd
tcp 0 0 192.168.4.70:22122 192.168.4.71:34256 ESTABLISHED 2393/fdfs_trackerd
客户端 访问主控服务器 验证配置
1) 提供访问命令 : 上传文件命令 下载文件命令
//客户端建立存放 提供访问命令文件目录
# mkdir /root/bin
//在主控服务器 pc70 山
# ls /usr/local/bin/
# cd /usr/local/bin/
//将其下的 fdfs_test fdfs_upload_fil fdfs_download_file fdfs_delete_file 拷贝给客户端 /root/bin
# scp fdfs_test fdfs_upload_fil fdfs_download_file fdfs_delete_file 192.168.4.254:/root/bin
2) 编辑连接主控节点主机的配置文件 client.conf
//客户端建立配置文件目录
# mkdir /etc/fdfs/
//靠拷贝主控服务器
# scp /etc/fdfs/client.conf 192.168.4.254:/etc/fdfs/
//修改客户端 上的客户端配置文件
# vim /etc/fdfs/client.conf
10 base_path=/data/fastdfs
14 tracker_server=192.168.4.70:22122//指定主控服务节点的ip 和 端口
//客户端创建 存放数据可日志文件目录
# mkdir /data/fastdfs
3) 客户端上传文件
# head -3 /etc/passwd > user.txt
# fdfs_test /etc/fdfs/client.conf upload user.txt //显示访问详细过程
This is FastDFS client test program v4.06
Copyright (C) 2008, Happy Fish / YuQing
FastDFS may be copied only under the terms of the GNU General
Public License V3, which may be found in the FastDFS source kit.
Please visit the FastDFS Home Page http://www.csource.org/
for more detail.
[2018-01-16 14:30:14] DEBUG - base_path=/data/fastdfs, connect_timeout=30, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0
tracker_query_storage_store_list_without_group:
server 1. group_name=, ip_addr=192.168.4.71, port=23000
server 2. group_name=, ip_addr=192.168.4.72, port=23000
group_name=group1, ip_addr=192.168.4.71, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/wKgER1pdK3WABIFgAAAAaejzMko287.txt
source ip address: 192.168.4.71
file timestamp=2018-01-16 06:30:13
file size=105
file crc32=3908252234
file url: http://192.168.4.70:8080/group1/M00/00/00/wKgER1pdK3WABIFgAAAAaejzMko287.txt
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/wKgER1pdK3WABIFgAAAAaejzMko287_big.txt
source ip address: 192.168.4.71
file timestamp=2018-01-16 06:30:13
file size=105
file crc32=3908252234
file url: http://192.168.4.70:8080/group1/M00/00/00/wKgER1pdK3WABIFgAAAAaejzMko287_big.txt
[[email protected] ~]# ls /data/fastdfs/data/00/00/ //查看存储结果
wKgER1pdK3WABIFgAAAAaejzMko287_big.txt
wKgER1pdK3WABIFgAAAAaejzMko287_big.txt-m
wKgER1pdK3WABIFgAAAAaejzMko287.txt
wKgER1pdK3WABIFgAAAAaejzMko287.txt-m
//因为时实时推送数据文件 所有在 pc72 上也会存在
[[email protected] ~]# ls /data/fastdfs/data/00/00/
wKgER1pdK3WABIFgAAAAaejzMko287_big.txt
wKgER1pdK3WABIFgAAAAaejzMko287_big.txt-m
wKgER1pdK3WABIFgAAAAaejzMko287.txt
wKgER1pdK3WABIFgAAAAaejzMko287.txt-m
# fdfs_upload_file /etc/fdfs/client.conf 1.jpg //上传图片文件 不显示访问过程
group1/M00/00/00/wKgESFpdLzOAUmpNAAB_2jHRplo230.jpg
[[email protected] ~]# ls /data/fastdfs/data/00/00/ //查看存储结果
...
wKgESFpdLzOAUmpNAAB_2jHRplo230.jpg
[[email protected] ~]# ls /data/fastdfs/data/00/00/
...
wKgESFpdLzOAUmpNAAB_2jHRplo230.jpg
4) 下载文件
// 下载文件 将其命名为test.jpg
# fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgESFpdLzOAUmpNAAB_2jHRplo230.jpg test.jpg
# ls test.jpg
test.jpg
5) 删除文件
# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKgESFpdLzOAUmpNAAB_2jHRplo230.jpg
配置Web访问 pc71 pc72
1) 安装提供nginx 软件包
fastdfs-nginx-module_v1.16.tar.gz
nginx-1.7.10.tar.gz
在pc71 和 pc72
# tar -zxf fastdfs-nginx-module_v1.16.tar.gz
# tar -zxf nginx-1.7.10.tar.gz
# useradd nginx
# yum -y install pcre-devel
# yum -y install zlib-devel
# cd nginx-1.7.10
# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --add-module=../fastdfs-nginx-module/src/
# make
# make install
# ls /usr/local/nginx/
conf html logs sbin
2) 修改配置文件
# vim /usr/local/nginx/conf/nginx.conf
43 location / {
44 #root html;
45 #index index.html index.htm;
46 ngx_fastdfs_module; //引入模块文件
47 }
//拷贝模块配置文件 到配置文件目录
# cp /root/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
# vim /etc/fdfs/mod_fastdfs.conf
40 tracker_server=192.168.4.70:22122//指定主控服务器的IP 和端口
44 storage_server_port=23000//存储节点监听端口
47 group_name=group1//当前所在存储组
53 url_have_group_name = true
57 store_path_count=1
62 store_path0=/data/fastdfs
# /etc/init.d/fdfs_storaged restart//重启存储服务
3)启动nginx
# /usr/local/nginx/sbin/nginx
# netstat -pantu | grep nginx
具体访问过程
客户端访问 80 ---> nginx ---> nginx.conf --->模块 ---> 配置文件 ---> 主控服务的IP地址 ---> 主控服务器分配
4) 客户端访问测试
上传文件
# fdfs_upload_file /etc/fdfs/client.conf test.jpg
group1/M00/00/00/wKgER1pdQ0iASS_fAAB_2jHRplo601.jpg
//在浏览器访问 就会看见图片内容
# google-chrome http://192.168.4.71/group1/M00/00/00/wKgER1pdQ0iASS_fAAB_2jHRplo601.jpg
# google-chrome http://192.168.4.72/group1/M00/00/00/wKgER1pdQ0iASS_fAAB_2jHRplo601.jpg
在上述实验的基础上做相关的调整实现下面的实验
搭建扩展存储服务器
实验拓扑图:
操作流程:
跟踪器 (tracker) pc70 192.168.4.70
配置主控服务器
存储节点 (storage) pc71 192.168.4.71 pc72 192.168.4.72
pc73 192.168.4.73 pc74 192.168.4.74
准备存储空间
配置存储节点
搭建nginx web服务器
客户端 ( client ) 192.168.4.254
上传文件
下载文件
操作步骤:
使用上述实验继续实验
具体步骤不详细介绍 只说明与上述文件不同之处和注意之处
配置主控跟踪器服务器 pc70
在之前配置的pc 70 上
修改存储主机编号文件 storage_ids.conf
# vim /etc/fdfs/storage_ids.conf
100001 group1 192.168.4.71
100002 group1 192.168.4.72
100003 group2 192.168.4.73
100004 group2 192.168.4.74
配置存储节点 pc73 pc74
1) 准备存储空间
2) 安装软件包
3) 修改配置文件storage.conf
# vim /etc/fdfs/storage.conf //配置文件中只有声明组与上述不同 其于均相同
7 group_name=group2//所属存储组
配置Web访问 pc71 pc72
1) 安装提供nginx 软件包
2) 修改配置文件
# vim /etc/fdfs/mod_fastdfs.conf //模版配置文件中只有声明组与上述不同 其于均相同
47 group_name=group1//当前所在存储组
3) 启动nginx
启动服务
1) pc70 需要重新启动服务
2) 启动存储节点 pc71 pc72
[[email protected] ~]# netstat -utnalp | grep 22122
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 4875/fdfs_trackerd
tcp 0 0 192.168.4.70:22122 192.168.4.72:57119 ESTABLISHED 4875/fdfs_trackerd
tcp 0 0 192.168.4.70:22122 192.168.4.71:34335 ESTABLISHED 4875/fdfs_trackerd
tcp 0 0 192.168.4.70:22122 192.168.4.74:45914 ESTABLISHED 4875/fdfs_trackerd
tcp 0 0 192.168.4.70:22122 192.168.4.73:45099 ESTABLISHED 4875/fdfs_trackerd
[[email protected] ~]# netstat -pantu | grep 23000
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 8496/fdfs_storaged
tcp 0 0 192.168.4.73:23000 192.168.4.74:38378 ESTABLISHED 8496/fdfs_storaged
tcp 0 0 192.168.4.73:51322 192.168.4.74:23000 ESTABLISHED 8496/fdfs_storaged
[[email protected] ~]# netstat -pantu | grep 23000
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 7905/fdfs_storaged
tcp 0 0 192.168.4.74:23000 192.168.4.73:51322 ESTABLISHED 7905/fdfs_storaged
tcp 0 0 192.168.4.74:38378 192.168.4.73:23000 ESTABLISHED 7905/fdfs_storaged
客户端测试
//会发现 group1 和 group2 已经实现轮询存储
# fdfs_upload_file /etc/fdfs/client.conf 1.jpg
group1/M00/00/00/wKgER1pdbEaAUfkvAAB_2jHRplo065.jpg
# fdfs_upload_file /etc/fdfs/client.conf 1.jpg
group2/M00/00/00/wKgESVpdbEeANZeWAAB_2jHRplo990.jpg
# fdfs_upload_file /etc/fdfs/client.conf test.jpg
group1/M00/00/00/wKgESFpdbE2AVXMfAAB_2jHRplo700.jpg
# fdfs_upload_file /etc/fdfs/client.conf test.jpg
group2/M00/00/00/wKgESlpdbFCAet_vAAB_2jHRplo946.jpg
//在浏览器访问 就会看见图片内容
# google-chrome http://192.168.4.71/group1/M00/00/00/wKgER1pdbEaAUfkvAAB_2jHRplo065.jpg
# google-chrome http://192.168.4.74/group2/M00/00/00/wKgESlpdbFCAet_vAAB_2jHRplo946.jpg
以上是关于FastDFS 分布式文件系统 搭建部署的主要内容,如果未能解决你的问题,请参考以下文章