分布式文件系统FastDFS介绍
FastDFS 是用 c 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS 架构包括 Tracker server 和 Storage server。客户端请求 Tracker server 进行文件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。
Tracker server 作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些策略找到 Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。
Storage server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上,Storageserver 没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。
FastDFS安装
安装gcc环境
以为FastDFS是c语言编写的,所以需要先安装gcc环境
yum install -y gcc gcc-c++
安装libevent依赖库
如果你是安装了图形界面,则不需要安装
yum -y install libevent
安装libfastcommon
libfastcommon是FastDFS官网提供的,里面包含了FastDFS运行所需要的基础库
把下载好的包放在/usr/local目录下
解压libfastcommon
tar -zxvf libfastcommon_v1.01.tar.gz
进入解压目录
cd libfastcommon/
进行编译和安装
./make.sh
./make.sh install
libfastcommon安装好后,会在/usr/lib目录下生成 libfastcommon.so 库文件;
ll /usr/lib64/libfastcommon.so
注意:libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib下。
要拷贝的文件如下:
cp /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
tracker编译安装
将FastDFS_v5.05.tar.gz拷贝至/usr/local/下
解压
tar -zxvf FastDFS_v5.05.tar.gz
切换到解压目录
cd FastDFS
编译源码和安装
./make.sh
./make.sh install
安装成功将安装目录下的conf下的文件拷贝到/etc/fdfs/下。
cp /usr/local/FastDFS/conf/* /etc/fdfs/
配置
安装成功后进入/etc/fdfs目录:
cd /etc/fdfs/
拷贝一份新的tracker配置文件:
修改tracker.conf
vim tracker.conf
base_path=/home/yuqing/FastDFS
改为:
base_path=/home/FastDFS
创建/home/FastDFS目录
启动
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
注意:在/home/fastdfs/ 目录下生成两个目录, 一个是数据,一个是日志;
配置storage
前面安装好了fastDFS,所以现在只需要配置storage即可;
切换目录到: /etc/fdfs/ 目录下;
拷贝一份新的storage配置文件
cp storage.conf.sample storage.conf
修改storage.conf文件
base_path=/home/yuqing/fastdfs 改为: base_path=/home/fastdfs
#store存放文件的位置(store_path) store_path0=/home/yuqing/fastdfs 改为: store_path0=/home/fdfs_storage
如果有多个挂载磁盘则定义多个store_path,如下
#store_path1=... #store_path2=...
#配置tracker服务器:IP tracker_server=192.168.226.140:22122 #如果有多个则配置多个tracker #tracker_server=192.168.226.141:22122
#配置http端口 http.server_port=88
创建 /home/fdfs_storage 目录
mkdir /home/fdfs_storage
启动storage, 运行命令如下:
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
使用自带工具测试fastDFS
切换目录到 /etc/fdfs/ 目录下;
拷贝一份新的client配置文件
cp client.conf.sample client.conf
修改client.conf文件
base_path的路径改成和tracker_server一样
放一张图片到虚拟机中,用于以测试
进行测试,运行如下:(运行测试程序,读取/etc/fdfs/client.conf 文件)
/usr/bin/fdfs_test /etc/fdfs/client.conf upload /root/1.jpg
结果如下,表示搭建成功;
以上图中的文件地址:http://192.168.226.139/group1/M00/00/00/wKjii16tYBOAENgJAACSG3eUT5o243.jpg 对应storage服务器上的/home/fdfs_storage/data/00/00/wKisFFpBG9eAHaQvAAAWKd1hQR4158_big.jpg文件;
由于现在还没有和nginx整合无法使用http下载。
和nginx整合
在tracker上安装 nginx
在服务器上安装一个nginx,如果有多个tracker节点,那么在每个tracker上安装nginx,的主要目的是做负载均衡及实现高可用。如果只有一台tracker服务器可以不配置nginx。
在storage 上安装nginx
上传 fastdfs-nginx-module_v1.16.tar.gz 到Centos服务器上;
解压 fastdfs-nginx-module_v1.16.tar.gz 到 /usr/local目录下;
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
切换目录到: /usr/local/fastdfs-nginx-module/src/ 目录下
cd fastdfs-nginx-module/src/
修改config文件,将文件中的所有 /usr/local/ 路径改为 /usr/
修改之后的
将fastdfs-nginx-module/src下的mod_fastdfs.conf拷贝至/etc/fdfs/下
cp mod_fastdfs.conf /etc/fdfs/
并修改 /etc/fdfs/mod_fastdfs.conf 的内容;vim /etc/fdfs/mod_fastdfs.conf
base_path=/tmp 修改为 base_path=/home/fastdfs
将libfdfsclient.so拷贝至/usr/lib下
cp /usr/lib64/libfdfsclient.so /usr/lib/
创建nginx/client目录
mkdir -p /var/temp/nginx/client
nginx安装
下载 nginx到Centos服务器上;
解压 nginx到 /usr/local目录下;
tar -zxvf nginx-1.17.10.tar.gz
安装nginx相关依赖库
yum install gcc-c++ -y yum install -y openssl openssl-devel yum install pcre -y yum install pcre-devel -y yum install zlib -y yum install zlib-devel -y
进入nginx解压的目录下:
cd nginx-1.17.10
加入模块命令配置
./configure \
--prefix=/usr/local/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 \
--with-http_gzip_static_module \
--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 \
--add-module=/usr/local/fastdfs-nginx-module/src
注意:上边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录;
编译并安装
make&&make install
安装成功后查看生成的目录,如下所示:
拷贝配置文件到 /etc/fdfs 下;
cd /usr/local/FastDFS/conf cp http.conf mime.types /etc/fdfs/
切换目录到/usr/local/nginx/conf目录,找到下面文件进行修改
mkdir /usr/local/nginx/log
vim nginx.conf
server_name指定本机ip;
/group1/M00/:group1为nginx 服务FastDFS的分组名称,M00是FastDFS自动生成编号,对应store_path0=/home/fdfs_storage,如果FastDFS定义store_path1,这里就是M01
启动nginx
nginx和fastDFS开启自启
虚拟机每次启动之后都要重新启动一下fastdfs 和 nginx服务,比较麻烦,所以增加开机自启动;
编辑 /etc/rc.d/rc.local 文件,增加启动项;
vim /etc/rc.d/rc.local
往文件中添加下面内容
# fastdfs start /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart # nginx start /usr/local/nginx/sbin/nginx
在centos7中, /etc/rc.d/rc.local 文件的权限被降低了,需要给rc.local 文件增加可执行的权限;
chmod +x /etc/rc.d/rc.local
在浏览器中访问上传到fastDFS的图片
因为Centos系统有防火墙,需要先关闭掉,才可以在浏览器中访问;
systemctl stop firewalld.service systemctl disable firewalld.service firewall-cmd --state
览器中访问刚才上传的图片: