FastDFS +Nginx实现动态缩略

一、FastDFS是什么?

FastDFS是一款开源的轻量级分布式文件系统纯C实现,支持Linux、FreeBSD等UNIX系统类google FS,不是通用的文件系统,只能通过专有API访问,目前提供了C、Java和PHP API为互联网应用量身定做,她对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量文件存储问题,追求高性能和高扩展性FastDFS可以看做是基于文件的key value pair存储系统,称作分布式文件存储服务更为合适。
特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。

存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。

二、相关术语释义:

tracker-server:
跟踪服务器, 主要做调度工作, 起负载均衡的作用。 在内存中记录集群中所有存储组和存储服务器的状态信息, 是客户端和数据服务器交互的枢纽。 相比GFS中的master更为精简, 不记录文件索引信息, 占用的内存量很少。

storage-server:
存储服务器( 又称:存储节点或数据服务器) , 文件和文件属性( metadata) 都保存到存储服务器上。 Storage server直接利用OS的文件系统调用管理文件。

group:
组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的storage server之间是对等的, 文件上传、 删除等操作可以在任意一台storage server上进行 。

meta data:
meta data:文件相关属性,键值对( Key Value Pair) 方式,如:width=1024,heigth=768 。

三、FastDFS系统结构如下图所示:

FastDFS系统结构

跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷 的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起 到了冗余备份和负载均衡的作用。

在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。

当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。
FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。

四、上传下载文件交互过程:

FastDFS file upload
上传文件交互过程:

client询问tracker上传到的storage,不需要附加参数;
tracker返回一台可用的storage;
client直接和storage通讯完成文件上传。

FastDFS file download
下载文件交互过程:

client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);
tracker返回一台可用的storage;
client直接和storage通讯完成文件下载。
需要说明的是,client为使用FastDFS服务的调用方,client也应该是一台服务器,它对tracker和storage的调用均为服务器间的调用。

五、配置要求:
1、下载的安装包路径 /usr/local/src/

2、使用两台服务器,其中一台做tracker和storage,另一台仅仅做storage

3、在两台storage中进行轮巡存储,每台服务器设置一个group,分别为group1和group2

如下:
tracker+storage 192.168.110.114 group1
storage 192.168.110.113 group2

六、配置安装:

group1+ group2
1 cd /udr/local/src
2 systemctl stop firewalld
setenforce 0 #关闭防火墙和沙盒和selinux
vi /etc/selinux/config
将 SELINUX=disabled
reboot
getenforce //验证
3安装依赖包和开发工具
yum –y install pcre* pcre-* gcc-c++ gcc* zlib zlib-devel openssl openssl-devel gc-devel gd gd-devel git unzip
4 安装lib套件-安装libfastcommon
git clone https://github.com/happyfish100/libfastcommon.git
cd libfastcommon
./make.sh
echo $?
./make.sh install
echo $?
5 设置软连接
ln -s /usr/lib64/libfastcommon.so /usr/lib/
ln -s /usr/lib64/libfastcommon.so /usr/local/lib/
ln -s /usr/lib64/libfastcommon.so /usr/local/lib64/
ln -s /usr/lib64/libfdfsclient.so /usr/lib/
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/
ln -s /usr/lib64/libfdfsclient.so /usr/local/lib64/
6 安装fastdfs
unzip FastDFS.zip
cd fastdfs-master
./make.sh
./ make.sh install
cp –r /usr/local/src/fastdfs-master/conf/* /etc/fdfs/
cd /etc/fdfs

FastDFS安装完成之后,所有配置文件在/etc/fdfs目录下,
即可通过ls-l /etc/fdfs/查看
tracker需要tracker.conf配置文件,
storage需要storage.conf配置文件。

group 1:
1 配置tracker配置文件
vim /etc/fdfs/track.conf
//修改以下内容
bind_addr=192.168.110.114 #绑定tracker的地址,tracker和storage为同一台服务器
port=22122 # 端口
base_path=/data/server/fastdfs
store_lookup=0 #0为轮巡
store_group=group1 #该服务器为group1
store_server=0 #0为轮巡
use_storage_id=true #这里使用组id而不是ip地址
id_type_in_filename=id
2 vim /etc/fdfs/storage_ids.conf
100001 group1 192.168.110.114
100002 group2 192.168.110.113
3 配置client配置文件
vim /etc/fdfs/client.conf
base_path=/data/server/fastds_client
tracker_server=192.168.110.114:22122
use_storage_id = true
4 配置storage配置文件
vim /etc/fdfs/storage.conf
group_name=group1
bind_addr=192.168.110.114
base_path=/data/server/fastdfs_storage
store_path0=/data/server/fastdfs_storage
tracker_server=192.168.110.114:22122
5 创建相关目录
mkdir –p /data/server/fastdfs_client
mkdir –p /data/server/fastdfs_storage
mkdir –p /data/server/fastdfs
mkdir /data/server/fastdfs_tracker

group2:
1 vim /etc/fdfs/storage_ids.conf
100001 group1 192.168.117.130
100002 group2 192.168.117.131
2 vim /etc/fdfs/storage.conf
group_name=group2
bind_addr=192.168.110.113
base_path=/data/server/fastdfs_storage
store_path0=/data/server/fastdfs_storage
tracker_server=192.168.110.114:22122
3 mkdir –p /data/server/fastdfs_storage

group1+ group2
1 cd /usr/local/src/
2 tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
vim /usr/local/src/ fastdfs-nginx-module /src/config
//修改为 CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

group1
安装nginx,解压fastdfs_nginx_module,然后编译安装nginx,加上此模块一起编译
1 cd /usr/local/src/
tar -zxvf fastdfs_nginx_module.tar.gz
2 tar zxf nginx-1.10.0.tar.gz
cd nginx-1.10.0
3 ./configure --prefix=/data/server/nginx --add-module=/usr/local/src/fastdfs-nginx-module/src --with-http_gunzip_module --with-pcre --with-http_image_filter_module --with-http_stub_status_module echo $?
make
echo $?
make install
echo $?
在这里插入图片描述
编译安装nginx时遇到的问题:

问题一:
In file included from /data/server/fastdfs-nginx-module/src/ngx_http_fastdfs_module.c:6:0:
/data/server/fastdfs-nginx-module/src/common.c:21:25: 致命错误:fdfs_define.h:没有那个文件或目录
#include “fdfs_define.h”
答案:
编译中断。

原因:编译安装nginx的fastdfs插件的头文件没有找到,由于编译nginx时候系统会到/usr/local/include,而编译安装fastdfs-nginx-module时则默认保存在了/usr/include目录。

修复:ln -s /usr/include/fast* /usr/local/include/

解决方法一:
ln -s /usr/include/fast* /usr/local/include/
解决方法二,修改配置文件中一个地方(建议用此方法,最好在编译前先修改好,就不会出错了):
vim /usr/local/src/fastdfs-nginx-module/src/config
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

然后重新进行上一步./configure 步骤。

开始编译
#make
如果没有问题就开始install
#make install

3 编辑nginx配置文件
vim /data/server/nginx/conf/nginx.conf
//在server模块下添加
location /photo {
rewrite “/photo/path=M00/(\w+)/(\w+)/x=(\d+)&(\d+)/(.+).(png|jpg|gif)” /group1/M00/$1/$2/$5_$3x$4.$6;
}

location ~* /group1/M00/(\w+)/(\w+)/(.+)_(\d+)x(\d+).(png|jpg|gif){
root “/data/server/nginx/html/”;
ngx_fastdfs_module;
set $iw “$4”;
set $ih “$5”;
image_filter resize $iw $ih;
image_filter_buffer 2M;
try_files /group1/M00/$1/$2/$3.$6 /404.html;
}

  location /group1/M00 {
           root "/data/server/nginx/html";
           ngx_fastdfs_module;
  }

 location = /favicon.ico {
           log_not_found off;
            access_log off;
 }

cd /data/server/nginx/sbin
./nginx
4 mkdir –p /data/server/nginx/html/group1
ln –s /data/server/fastdfs_storage/data /data/server/nginx/html/group1/M00
5 修改mod_fastdfs.conf
先复制文件到/etc/fdfs目录下:
cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/

vim /etc/fdfs/mod_fastdfs.conf
use_storage_id = true
tracker_server=192.168.110.114:22122
url_have_group_name = true
group_name=group1
store_path0=/data/server/fastdfs_storage
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/data/server/fastdfs_storage

group2:
1 mkdir –p /data/server/nginx/html/group2
ln –s /data/server/fastdfs_storage/data /data/server/nginx/html/group2/M00
2 cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vim /etc/fdfs/mod_fastdfs.conf
use_storage_id = true
tracker_server=192.168.110.114:22122
url_have_group_name = true
group_name=group1
store_path0=/data/server/fastdfs_storage
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/data/server/fastdfs_storage

group1:
1 cd /usr/local/src/nginx/sbin
./nginx
2 fdfs_trackerd /etc/fdfs/tracker.conf
fdfs_storaged /etc/fdfs/storage.conf

group2:
fdfs_storaged /etc/fdfs/storage.conf

group1:
fdfs_upload_file /etc/fdfs/client.conf /etc/fdfs/xxx.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章