一、简介
FastDFS是由国人余庆所开发,其项目地址:https://github.com/happyfish100
FastDFS是一个轻量级的开源分布式文件系统,主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。
FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过 专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用。准确地讲,Google FS以及FastDFS、mogileFS、 HDFS、TFS等类Google FS都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。
二、分布式文件系统
三、FastDFS 架构原理
Client 客户端:上传与下载文件、图片等的客户端
Tracker 调度器:负责维持集群的信息等,例如各group及其内部的storage node,这些信息也是storage node报告所生成;
每个storage node会周期性向tracker发心跳信息
Storage 存储服务器:存储数据。以group为单位进行组织,任何一个storage server都应该属于某个group,一个group应该包含多个storage server;在同一个group内部,各storage server的数据互相冗余
四、文件上传流程
当文件存储到某个子目录后,即认为该文件存储成功,接下来会为该文件生成一个文件名,文件名由group、存储目录、两级子目录、文件名、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成
五、文件下载流程
六、实战安装
1、环境以及依赖
(1)docker(如果不需要docker容器中操作,可以忽略此步骤)
(2)libfastcommon包(安装FastDFS依赖需要)
(3)FastDFS
(4)FastDFS的Nginx模块
(5)Nginx
2、docker安装
(1)安装docker引擎
yum install docker
(2)拉取镜像
docker pull centos:7
(3)创建容器
docker run -di --name java5-tracker-01 -p 8080:80 centos:7
(4)查看镜像
docker ps -a
3、下载安装包
(1)下载 libfastcommon
https://github.com/happyfish100/libfastcommon/releases
wget https://github.com/happyfish100/libfastcommon/releases/tag/V1.0.39
(2)下载FastDFS
https://github.com/happyfish100/libfastcommon/releases
wget https://github.com/happyfish100/fastdfs/releases/tag/V5.11
(3)下载FastDFS的Nginx模块
https://github.com/happyfish100/fastdfs-nginx-module/releases
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.20.tar.gz
(4)下载Nginx
https://github.com/nginx/nginx/releases
wget http://nginx.org/download/nginx-1.15.6.tar.gz
下载结果:
(5)把下载包拷贝到容器
docker cp nginx-1.15.6.tar.gz java5-tracker-01:/opt
docker cp V1.0.39.tar.gz java5-tracker-01:/opt
docker cp V1.20.tar.gz java5-tracker-01:/opt
docker cp V5.11.tar.gz java5-tracker-01:/opt
(6)登录容器,查看是否拷贝成功
docker exec -it java5-tracker-01 /bin/bash
4、安装
(1)容器里安装依赖
yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget vim
(2)安装与编译libfastcommon
解压libfastcommon
tar -zxvf V1.0.39.tar.gz
进入解压目录
cd libfastcommon-1.0.39
安装
./make.sh && ./make.sh install
拷贝 libfastcommon.so 文件至 /usr/lib 目录(新版本不需要此步)
cp /usr/lib64/libfastcommon.so /usr/lib/
注:
libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录,所以需要将/usr/lib64下的库文件拷贝至/usr/lib下
(3)安装 FastDFS
解压
tar -zxvf V5.11.tar.gz
进入解压目录
cd fastdfs-5.11
安装
./make.sh && ./make.sh install
拷贝/root/opt/fastdfs-5.11/conf目录下的文件到/etc/fdfs目录下
cp fastdfs-5.11/conf/* /etc/fdfs/
(4)tracker server配置
修改/etc/fdfs/tracker.conf
vim /etc/fdfs/tracker.conf
修改内容如下 :
base_path=/zhuzq/server/fastdfs/tracker
创建tracker服务器上面的目录
mkdir /zhuzq/server/fastdfs/tracker -p
(5)storage server配置
修改/etc/fdfs/storage.conf
vim /etc/fdfs/storage.conf
修改内容如下:
#指定storage的组名
group_name=group1
#日志与数据路径
base_path=/zhuzq/server/fastdfs/storage
#M00虚拟磁盘路径
store_path0=/zhuzq/server/fastdfs/storage
#配置tracker服务器IP和端口
tracker_server=172.18.0.3:22122
创建storage服务器上面的目录
mkdir /zhuzq/server/fastdfs/storage -p
(6)安装FastDFS的Nginx模块
解压
tar -zxvf V1.20.tar.gz
进入解压目录
cd fastdfs-nginx-module-1.20/src
修改
vim config
修改前的内容如下 :
ngx_addon_name=ngx_http_fastdfs_module
if test -n "${ngx_module_link}"; then
ngx_module_type=HTTP
ngx_module_name=$ngx_addon_name
ngx_module_incs="/usr/local/include"
ngx_module_libs="-lfastcommon -lfdfsclient"
ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c"
ngx_module_deps=
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
. auto/module
else
HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
CORE_INCS="$CORE_INCS /usr/local/include"
CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
fi
**其中第6行和第15行要进行修改,修改后的内容如下:
ngx_addon_name=ngx_http_fastdfs_module
if test -n "${ngx_module_link}"; then
ngx_module_type=HTTP
ngx_module_name=$ngx_addon_name
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
ngx_module_libs="-lfastcommon -lfdfsclient"
ngx_module_srcs="$ngx_addon_dir/ngx_http_fastdfs_module.c"
ngx_module_deps=
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
. auto/module
else
HTTP_MODULES="$HTTP_MODULES ngx_http_fastdfs_module"
NGX_ADDON_SRCS="$NGX_ADDON_SRCS $ngx_addon_dir/ngx_http_fastdfs_module.c"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
CORE_LIBS="$CORE_LIBS -lfastcommon -lfdfsclient"
CFLAGS="$CFLAGS -D_FILE_OFFSET_BITS=64 -DFDFS_OUTPUT_CHUNK_SIZE='256*1024' -DFDFS_MOD_CONF_FILENAME='\"/etc/fdfs/mod_fastdfs.conf\"'"
fi
拷贝mod_fastdfs.conf
将fastdfs-nginx-module-1.20/src/mod_fastdfs.conf
拷贝至/etc/fdfs/
下
cp mod_fastdfs.conf /etc/fdfs/
修改mod_fastdfs.conf
vim /etc/fdfs/mod_fastdfs.conf
文件内容修改如下:
base_path=/zhuzq/server/fastdfs/storage
tracker_server=172.18.0.3:22122
url_have_group_name = true
store_path0=/zhuzq/server/fastdfs/storage
(7)安装Nginx
解压
tar -xf nginx-1.15.6.tar.gz
进入解压目录
cd nginx-1.15.6/
编译与安装
./configure \
--prefix=/zhuzq/servier/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 \
--http-client-body-temp-path=/var/temp/nginx/client \
--http-proxy-temp-path=/var/temp/nginx/proxy \
--http-fastcgi-temp-path=/var/temp/nginx/fastcgi \
--http-uwsgi-temp-path=/var/temp/nginx/uwsgi \
--http-scgi-temp-path=/var/temp/nginx/scgi \
--with-http_gzip_static_module \
--add-module=/opt/fastdfs-nginx-module-1.20/src
注意:
prefix=/zhuzq/servier/nginx中的/zhuzq/servier/nginx指的是要安装的nginx的路径
add-module=/opt/fastdfs-nginx-module-1.20/src中的路径指的是fastdfs-nginx-module模块
的解压缩路径
创建目录
mkdir /zhuzq/servier -p
mkdir /var/temp/nginx -p
安装
make & make install
修改nginx.conf 配置
vim /zhuzq/servier/nginx/conf/nginx.conf
说明:
location /group1/M00/
:以/group1/M00/开头的请求,才会正常使用Nginx模块ngx_fastdfs_module下载访问图片。
5、启动
(1)启动tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
(2)启动storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
(3)启动Nginx
/zhuzq/servier/nginx/sbin/nginx
6、上传测试图片
(1)进入/etc/fdfs目录
cd /etc/fdfs
(2)修改配置
vim /etc/fdfs/client.conf
(3)执行上传图片
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/anti-steal.jpg
说明:
http://172.18.0.3/group1/M00/00/00/rBIAA10p-66AZpEpAABdrSqbHGQ206_big.jpg
因为这个是容器,浏览器测试
http://外网IP:8080/group1/M00/00/00/rBIAA10p-66AZpEpAABdrSqbHGQ206_big.jpg
8080是服务器映射容器80端口
七、集群搭建
(1)架构设计
2个tracker服务器,4台storage服务器,分为2组
(2)创建镜像
docker commit java5-tracker-01 java5-fastdfs
(3)创建tracker和storage
docker run -di --name java5-tracker01 -p 8081:80 java5-fastdfs /bin/bash
docker run -di --name java5-tracker02 -p 8082:80 java5-fastdfs /bin/bash
docker run -di --name java5-storage01 -p 9091:80 java5-fastdfs /bin/bash
docker run -di --name java5-storage02 -p 9092:80 java5-fastdfs /bin/bash
docker run -di --name java5-storage03 -p 9093:80 java5-fastdfs /bin/bash
docker run -di --name java5-storage04 -p 9094:80 java5-fastdfs /bin/bash
(4)修改java5-tracker01与java5-tracker02的tracker.conf
主要为了效果修改上传文件的选组方式为轮询
store_lookup=0
java5-tracker01
java5-tracker02
(5)修改java5-storage01与java5-storage02
java5-storage01
修改nginx配置nginx.conf文件
vim /zhuzq/servier/nginx/conf/nginx.conf
修改storage.conf配置文件
vim /etc/fdfs/storage.conf
修改mod_fastdfs.conf文件
vim /etc/fdfs/mod_fastdfs.conf
java5-storage02
修改nginx配置nginx.conf文件
vim /zhuzq/servier/nginx/conf/nginx.conf
修改storage.conf配置文件
vim /etc/fdfs/storage.conf
修改mod_fastdfs.conf文件
vim /etc/fdfs/mod_fastdfs.conf
(5)修改java5-storage03与java5-storage03
与修改java5-storage03与java5-storage03一样,唯一不同就是文件中的group1变成group2
(6)启动服务
java5-tracker01与java5-tracker02执行
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
java5-storage01与java5-storage02、java5-storage03、java5-storage04
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
/zhuzq/servier/nginx/sbin/nginx
(7)测试
进入java5-storage01
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/anti-steal.jpg
结果
http://172.18.0.6/group2/M00/00/00/rBIABl0x-kyAJL3HAABdrSqbHGQ169_big.jpg
浏览器访问改为
http://39.97.176.160:9093/group2/M00/00/00/rBIABl0x-kyAJL3HAABdrSqbHGQ169_big.jpg
http://172.18.0.7/group2/M00/00/00/rBIAB10x-m-ANTxKAABdrSqbHGQ197_big.jpg
浏览器访问改为
http://39.97.176.160:9094/group2/M00/00/00/rBIAB10x-m-ANTxKAABdrSqbHGQ197_big.jpg
(8)测试扩展
备份镜像
docker save -o java5-fastdfs.tar java5-fastdfs
导入镜像
docker load -i java5-fastdfs.tar
八、基本命令
(1)防火墙关
systemctl stop firewalld
(2)禁止防火墙开机启动
systemctl disable firewalld
(3)Tracker 启动命令
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
(4)Storage 启动命令
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
(5)集群状态检查命令
fdfs_monitor /etc/fdfs/storage.conf
(6)删除 Storage
fdfs_monitor /etc/fdfs/storage.conf delete 组名 storage的ip
(7)Tracker 关闭命令
killall fdfs_trackerd
(8)Storage 关闭命令
killall fdfs_storaged
(9)缺少 killall 命令进行安装
yum install psmisc -y
(10)Tracker 开机自启动
vim /etc/rc.d/rc.local
将运行命令行添加进文件:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
(11)Storage 开机自启动
vim /etc/rc.d/rc.local
将运行命令行添加进文件:
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
推荐文章