FastDFS图片服务器的原理和安装配置

1. 分布式文件存储 FastDfs

1.1. 技术说明

FastDFSC语言编写的一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。

1.2. 技术内部架构

1.2.1. 设计思想

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

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

存储系统由一个或多个卷也可称为组组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷可以动态扩大了存储系统的容量

1.2.2. 系统组成

· 跟踪器tracker Tracker server作用是Storage server进行负载均衡和调度,在文件上传时会直接请求Tracker server,然后Tracker server可以根据一些策略找到Storage server来提供文件上传服务。所以可以将tracker称为追踪服务器或调度服务器

· 存储节点storage Storage server作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器

1.2.3. 架构图

        

 

1.2.4. 文件上传流程:

         

 

1.3. 应用场景

1.3.1. 对比传统图片上传

         

存在问题:

1)大并发量上传访问图片时,需要对web应用做负载均衡,但是会存在图片共享问题

2web应用服务器的存储空间有限,它是web应用服务器,而不是存储服务器。

3web应用服务器的本身的io读写性能不高,图片上传下载时,速度偏慢

务器的带宽,这样该web应用服务器的其他功能就会受到较大的影响。

 解决方案:

1)将图片集中存储到IO读写性能高的图片服务器中。

2)下载访问图片时,使用http服务器直接读取图片服务器中的图片。

1.3.2. 独立的图片服务器上传

     

使用独立的图片服务器可以解决传统上传方式遇到的并发,空间等问题

1.4. 应用案例架构

1.4.1. 安装配置FastDFS服务器

l 所需安装包

 

FastDFS为安装包

Fastdfs-nginx-module为文件服务器与nginx整合所需模块包

libfastcommonV1.0.7.tar.gz包括fdfs运行所需的各种组件

Nginx 为上传的文件提供http访问

l 安装步骤

  安装准备:

1. 准备一台lunix服务器,这里使用的是Centos7.0

2. 上传安装包到服务器

  安装步骤:

1. 安装gcc环境(编译c环境)

yum install gcc-c++

2. 安装libebvent环境(fastdfs环境)

yum -y install libevent

3. 安装perl环境(编译c文件环境)

yum -y install perl

4. 安装libfastcommon环境(fastdfs环境)

首先解压libfastcommonV1.0.7.tar:

tar -zxvf libfastcommonV1.0.7.tar.gz

cd libfastcommon-1.0.7/

./make.sh

./make.sh install

libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下,由于FastDFS程序引用usr/lib目录所以需要将/usr/lib64下的库文件拷贝至/usr/lib:

cp /usr/lib64/libfastcommon.so /usr/lib

5. 安装tracker服务

5.1 解压FastDFS

tar -zxf FastDFS_v5.05.tar.gz

5.2 编译FastDFS

cd FastDFS

./make.sh

./make.sh install

5.3 安装成功后,FastDFS下的conf文件下的所有文件复制到/etc/fdfs/

cp -r conf/* /etc/fdfs/

5.4 配置tracker

cd /etc/fdfs/

vi tracker.conf

base_path=/home/yuqing/FastDFS改为base_path=/home/fastdfs(可以通过命令符去查找,命令符:/base_path)

保存退出

5.5 创建fastdfs目录

mkdir /home/fastdfs

5.6启动tracker

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

5.7 设置开机自启

vi /etc/rc.d/rc.local

将命令添加到文件里面:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

6. 安装storage服务

如果单机安装,无需编译和环境安装,如果存储文件的跟客户端不在同一台机器则需要按照安装tracker一样的环境步骤安装

7. 配置trackerstorage服务

7.1 配置storage服务

vi storage.conf

修改以下配置:

group_name=group1

base_path=/home/yuqing/FastDFS改为:base_path=/home/fastdfs

store_path0=/home/yuqing/FastDFS 改为:store_path0=/home/fastdfs/fdfs_storage

#如果有多个挂载磁盘则定义多个store_path,如下

#store_path1=.....

#store_path2=......

tracker_server=192.168.101.3:22122

#配置tracker服务器:IP

#如果有多个则配置多个tracker

tracker_server=192.168.101.4:22122

7.2 创建数据存储目录

mkdir /home/fastdfs/fdfs_storage

7.3 启动storage

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

7.4 设置开机自启

vi /etc/rc.d/rc.local

将此命令添加到文件里面:

/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

7.5 整体完成,可以通过内部上传测试,看返回结果(但是没有和nginx整合所以无法使用http下载)

1.修改上传客户端配置

vi /etc/fdfs/client.conf

修改以下配置

base_path=/home/fastdfs

tracker_server=你的ip:22122

2.上传命令

命令使用格式:

/usr/bin/fdfs_test 客户端配置文件地址  upload  上传文件

返回格式如下图:

8. 配置fastdfs-nginx-module

8.1 解压fastdfs-nginx-module

tar -zxf fastdfs-nginx-module_v1.16.tar.gz

8.2 配置fastdfs-nginx-module

cd fastdfs-nginx-module/src

vi config

将文件中的/usr/local/路径改为/usr/(两个都改)

mod_fastdfs.conf复制到/etc/fdfs/

cp mod_fastdfs.conf /etc/fdfs/

修改etc/fdfs/下的mod_fastdfs.conf

vi mod_fastdfs.conf

修改mod_FastDFS.conf的以下内容:

base_path=/home/fastdfs

tracker_server=你的ip:22122

#tracker_server=你的ip:22122(多个tracker配置多行)

url_have_group_name=true #url中包含group名称

store_path0=/home/fastdfs/fdfs_storage  #指定文件存储路径

libfdfsclient.so拷贝至/usr/lib

cp /usr/lib64/libfdfsclient.so /usr/lib/

创建nginx/client目录

mkdir -p /var/temp/nginx/client

9. nginx整合

9.1 解压nginx

tar -zxf nginx-1.8.0.tar.gz

9.2 安装nginx环境

gcc环境(编译环境,上面已经安装):yum install gcc-c++

pcre环境(perl,nginxhttp模块使用pcre来解析正则表达 式):yum install -y pcre pcre-devel

zlib环境(提供多种压缩和解压缩的方式,nginx使用zlibhttp包 的内容进行gzip):yum install -y zlib zlib-devel

openssl环境(算法和安全,https使用):yum install -y openssl openssl-devel

9.3编译nginx

cd /root/nginx-1.8.0

./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(fastdfs专有)

make

make install

9.4 创建编译链接

ln -s /usr/include/fast* /usr/local/include/

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

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

9.5 修改nginx配置

编译完成后,会自动将nginx安装到/usr/local/nginx

cd /usr/local/nginx/conf

vi nginx.conf

添加一个server

server {

listen       80;

server_name  本机;

location /group1/M00/ {

   ngx_fastdfs_module;

}

error_page   500 502 503 504  /50x.html;

location = /50x.html {

root   html;

}

}

配置说明:

说明:

server_name指定本机ip

location /group1/M00/group1nginx 服务FastDFS的分 组名称,M00FastDFS自动生成编号,对应 store_path0=/home/FastDFS/fdfs_storage,如果FastDFS定义 store_path1,这里就是M01

9.6 启动nginx

cd /usr/local/nginx/sbin/

./nginx

说明:

如果重启服务器会发现无法启动nginx,报错找不到文件

解决:编辑/usr/local/nginx/conf/nginx.conf

打开#pid    logs/nginx.pid;注释  

/usr/local/nginx下创建/logs/nginx.pid

并赋给 /logsnginx.pid读写权限

然后再运行nginx

10. 开启fdfs所需的2300022122端口

 由于Centos7.0使用的是firewalld和iptables有些区别具体防火墙操作参考我另一片微博:

            Centos7下的防火墙设置:http://blog.csdn.net/hiqingtian/article/details/79027104

   

1.4.2. 客户端配置与使用

项目中使用FstdDfs是当做一个客户端请求安装的服务器完成服务:

项目中引入客户端jar

 

项目中配置请求服务器的地址(本项目中放置在src下)

 

配置文件定义了要请求跟踪器服务器地址:  

tracker_server为初始化客户端需要的属性,当上传文件时它会根据此地址请求Tracker server服务器,查询可用storage后,返回给客户端状态良好的Storage server服务器地址和端口(23000)此时客户端直接访问storage地址进行上传并获取返回的文件访问地址;

 

编写java客户端

 

定义初始化方法:

 

定义上传方法:

 

定义下载方法:

 

l 代码中的使用

1. 创建FastDfs客户端并传入参数classpath:fast_dfs.conf(图片服务器配置文件),

  FastDFSClient client = new FastDFSClient("classpath:fast_dfs.conf");

2. 创建完毕之后调用客户端的相应方法完成所需功能:

 

其中fileByte为上传文件的byte数组,extName为上传文件的后缀(例: jpg

url为上传成功后返回的访问路径:

 

注意:这个路径不包含ip地址所以需要手动拼接ip地址

可以配置在配置文件中地址后注入进所需要拼接的地址:

 

拼接之后返回可直接访问的地址:

 


由于整合了nginx所以此地址可直接在浏览器访问

Url可根据具体业务需求进行数据库保存;

到此,FastDfs的安装配置和项目中的使用记录完毕

java客户端代码参考我另一篇微博:

     http://blog.csdn.net/hiqingtian/article/details/79413777


猜你喜欢

转载自blog.csdn.net/hiqingtian/article/details/79413471
今日推荐