Dubbo高级篇_04_FastDFS分布式文件系统的安装与使用

原创 2016年04月04日 09:39:11

FastDFS简介

FastDFS是一个轻量级的开源分布式文件系统
FastDFS主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡
FastDFS实现了软件方式的RAID,可以使用廉价的IDE硬盘进行存储
支持存储服务器在线扩容
支持相同内容的文件只保存一份,节约磁盘空间
FastDFS只能通过Client API访问,不支持POSIX访问方式
FastDFS特别适合大中型网站使用,用来存储资源文件(如:图片、文档、音频、视频等等)


系统架构


跟踪服务器:192.168.1.131(安装到consumer)

存储服务器:192.168.1.51(安装到CI服务器)

环境:CentOS6.6

用户:root

数据目录 :/fastdffs(数据目录按你的数据盘挂载路径而定)

安装包

FastDFS v5.05 

libfastcommon-master.zip(是从 FastDFS  FastDHT 中提取出来的公共 C 函数库) fastdfs-nginx-module_v1.16.tar.gz

 nginx-1.6.2.tar.gz 

fastdfs_client_java._v1.25.tar.gz 

源码地址:https://github.com/happyfish100/ 

下载地址:http://sourceforge.net/projects/fastdfs/files/ 

官方论坛:http://bbs.chinaunix.net/forum-240-1.html


一、所有跟踪服务器和存储服务器均执行如下操作

1.编译和安装所需的依赖包

Connecting to 192.168.1.131:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.


Last login: Sun Apr  3 00:12:21 2016 from 192.168.1.2
[root@consume ~]# yum install make cmake gcc gcc-c++


2.安装 libfastcommon: 

(1)上传或下载 libfastcommon-master.zip 到/usr/local/src 目录 


(2)解压

 [root@consume ~]# cd /usr/local/src/
[root@consume src]# unzip libfastcommon-master.zip 
[root@consume src]# cd libfastcommon-master
[root@consume libfastcommon-master]# ll
total 28
-rw-r--r--. 1 root root 2913 Feb 27  2015 HISTORY
-rw-r--r--. 1 root root  582 Feb 27  2015 INSTALL
-rw-r--r--. 1 root root 1342 Feb 27  2015 libfastcommon.spec
-rwxr-xr-x. 1 root root 2151 Feb 27  2015 make.sh
drwxr-xr-x. 2 root root 4096 Feb 27  2015 php-fastcommon
-rw-r--r--. 1 root root  617 Feb 27  2015 README
drwxr-xr-x. 2 root root 4096 Feb 27  2015 src

(3) 编译、安装

[root@consume libfastcommon-master]# ./make.sh
[root@consume libfastcommon-master]# ./make.sh install 

libfastcommon默认安装到了 

/usr/lib64/libfastcommon.so 

/usr/lib64/libfdfsclient.so

(4)因为 FastDFS 主程序设置的 lib 目录是/usr/local/lib,所以需要创建软链接.

[root@consume libfastcommon-master]# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
[root@consume libfastcommon-master]# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
[root@consume libfastcommon-master]# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
[root@consume libfastcommon-master]# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so


安装 FastDFS 

(1)上传或下载 FastDFS 源码包(FastDFS_v5.05.tar.gz)到 /usr/local/src 目录

 (2)解压

[root@consume libfastcommon-master]# cd /usr/local/src

root@consume src]# ll | grep Fast
-rw-r--r--. 1 root root 345400 Mar 25  2015 FastDFS_v5.05.tar.gz
[root@consume src]# tar -zxvf FastDFS_v5.05.tar.gz 
(3)编译、安装(编译前要确保已经成功安装了 libfastcommon)
[root@consume src]# cd FastDFS
[root@consume FastDFS]# ./make.sh 
[root@consume FastDFS]# ./make.sh install

采用默认安装的方式安装,安装后的相应文件与目录:

A、服务脚本在:
/etc/init.d/fdfs_storaged 
/etc/init.d/fdfs_tracker
[root@consume FastDFS]# ls /etc/init.d | grep fdfs
fdfs_storaged
fdfs_trackerd


B、配置文件在(样例配置文件):
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
[root@consume FastDFS]# ls /etc/fdfs | grep conf
client.conf.sample
storage.conf.sample
tracker.conf.sample


C、命令工具在/usr/bin/目录下的:
[root@consume FastDFS]# ls /usr/bin | grep fdfs
fdfs_appender_test
fdfs_appender_test1
fdfs_append_file
fdfs_crc32
fdfs_delete_file
fdfs_download_file
fdfs_file_info
fdfs_monitor
fdfs_storaged
fdfs_test
fdfs_test1
fdfs_trackerd
fdfs_upload_appender
fdfs_upload_file

4)因为 FastDFS 服务脚本设置的 bin 目录是/usr/local/bin,但实际命令安装在/usr/bin,可以进入
/user/bin 目录使用以下命令查看 fdfs 的相关命令:
[root@consume FastDFS]# cd /usr/bin
[root@consume bin]# ll | grep fdfs
因此需要修改 FastDFS 服务脚本中相应的命令路径,也就是把/etc/init.d/fdfs_storaged
和/etc/init.d/fdfs_tracker 两个脚本中的/usr/local/bin 修改成/usr/bin:
使用查找替换命令进统一修改:%s+/usr/local/bin+/usr/bin

[root@consume bin]# cd /etc/init.d
[root@consume init.d]# vi fdfs_trackerd 
[root@consume init.d]# vi fdfs_storaged
跟踪器与存储器配置文件都更改是为了保证文件的同步和一致性

二、配置 FastDFS 跟踪器(192.168.1.131)

1、复制 FastDFS 跟踪器样例配置文件,并重命名:
[root@consume init.d]# cd /etc/fdfs/
[root@consume fdfs]# ll
total 20
-rw-r--r--. 1 root root 1461 Apr  3 19:11 client.conf.sample
-rw-r--r--. 1 root root 7829 Apr  3 19:11 storage.conf.sample
-rw-r--r--. 1 root root 7102 Apr  3 19:11 tracker.conf.sample
[root@consume fdfs]# cp tracker.conf.sample tracker.conf
2、编辑跟踪器配置文件:
[root@consume fdfs]# vi /etc/fdfs/tracker.conf
修改的内容如下:

disabled=false

port=22122

base_path=/fastdfs/tracker

其它参数保留默认配置具体配置解释请参考官方文档说明

 http://bbs.chinaunix.net/thread-1941456-1-1.html 

3、 创建基础数据目录(参考基础目录 base_path 配置):

[root@consume fdfs]# mkdir -p /fastdfs/tracker

4、 防火墙中打开跟踪器端口(默认为 22122):

[root@consume fdfs]# vi /etc/sysconfig/iptables

添加:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
[root@consume fdfs]# cat /etc/sysconfig/iptables | grep 22122

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT

重启
[root@consume fdfs]# service iptables restart

5、 启动 Tracker:

[root@consume fdfs]# /etc/init.d/fdfs_trackerd start
Starting FastDFS tracker server: 

 查看 FastDFS Tracker 是否已成功启动:

[root@consume fdfs]# ps -ef | grep fdfs
root       3870      1  0 19:50 ?        00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
root       3879   3028  0 19:51 pts/0    00:00:00 grep fdfs

初次成功启动会在/fastdfs/tracker 目录下创建 datalogs 两个目录

[root@consume fdfs]# ll /fastdfs/tracker/
total 8
drwxr-xr-x. 2 root root 4096 Apr  3 19:50 data
drwxr-xr-x. 2 root root 4096 Apr  3 19:50 logs
[root@consume fdfs]# 

6.关闭 Tracker

[root@consume fdfs]# /etc/init.d/fdfs_trackerd stop
stopping fdfs_trackerd ...

7、 设置 FastDFS 跟踪器开机启动:
[root@consume fdfs]# vi /etc/rc.d/rc.local 

## FastDFS Tracker 

/etc/init.d/fdfs_trackerd start

验证是否设置开机启动

[root@consume fdfs]# /etc/init.d/fdfs_trackerd status
fdfs_trackerd is stopped
[root@consume fdfs]# reboot

Connecting to 192.168.1.131:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Sun Apr  3 18:44:38 2016 from 192.168.1.2
[root@consume ~]# /etc/init.d/fdfs_trackerd status
fdfs_trackerd (pid 2152) is running...
[root@consume ~]# 

三、配置 FastDFS 存储(192.168.1.51)
1、 复制 FastDFS 存储器样例配置文件,并重命名:
[root@yxq init.d]# cd /etc/fdfs
[root@yxq fdfs]# ll
total 20
-rw-r--r-- 1 root root 1461 Apr  3 21:45 client.conf.sample
-rw-r--r-- 1 root root 7829 Apr  3 21:45 storage.conf.sample
-rw-r--r-- 1 root root 7102 Apr  3 21:45 tracker.conf.sample
[root@yxq fdfs]# cp storage.conf.sample storage.conf
2、 编辑存储器样例配置文件:
[root@yxq fdfs]# vi /etc/fdfs/storage.conf

修改的内容如下: 

disabled=false port=23000

base_path=/fastdfs/storage 

store_path0=/fastdfs/storage 

tracker_server=192.168.4.131:22122 

http.server_port=8888 

其它参数保留默认配置具体配置解释请参考官方文档说明 

http://bbs.chinaunix.net/thread-1941456-1-1.html 

3、 创建基础数据目录(参考基础目录 base_path 配置):

[root@yxq fdfs]# mkdir -p /fastdfs/storage

4、 防火墙中打开存储器端口(默认为 23000):

[root@yxq fdfs]# vi /etc/sysconfig/iptables

添加如下端口行: 

-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

 [root@yxq fdfs]# cat /etc/sysconfig/iptables | grep 23000
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23000 -j ACCEPT

重启防火墙:

[root@yxq fdfs]# service iptables restart

5、 启动 Storage:

[root@yxq fdfs]# /etc/init.d/fdfs_storaged start
Starting FastDFS storage server: 

看 FastDFS Storage 是否已成功启动

[root@yxq fdfs]# ps -ef | grep fdfs
root      11997      1  0 22:16 pts/0    00:00:00 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf
root      12000  11293  0 22:16 pts/0    00:00:00 grep fdfs

初次成功启动会在/fastdfs/storage 目录下创建datalogs 两个目录

[root@yxq fdfs]# ll /fastdfs/storage/

6、 关闭 Storage:

[root@yxq fdfs]# /etc/init.d/fdfs_storaged stop
stopping fdfs_storaged ...

7、 设置 FastDFS 存储器开机启动:

[root@yxq fdfs]# vi /etc/rc.d/rc.local 

添加:

 ## FastDFS Storage 

/etc/init.d/fdfs_storaged start


四、文件上传测试(192.168.4.121)

 

1、修改 Tracker 服务器中的客户端配置文件:

 

[root@consume ~]# cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf 

[root@consume ~]# vi /etc/fdfs/client.conf

 修改

base_path=/fastdfs/tracker

tracker_server=192.168.1.131:22122

执行如下命令

[root@consume ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/local/src/FastDFS_v5.05.tar.gz 
group1/M00/00/00/wKgBM1cB-y2AFWsAAAVFOL7FJU4.tar.gz

(能返回以上文件ID,说明文件上传成功)

以也可以在存储服务器根据group1查看

[root@yxq fdfs]# ll /fastdfs/storage/data/00/00/
total 340
-rw-r--r-- 1 root root 345400 Apr  3 22:27 wKgBM1cB-y2AFWsAAAVFOL7FJU4.tar.gz
[root@yxq fdfs]# date
Sun Apr  3 22:31:54 PDT 2016
[root@yxq fdfs]# 

六、在每个存储节点上安装nginx(只需要在存储节点服务器上安装即可)
1.fastdfs-nginx-module作用说明:
   FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进入文件复制,有同步延迟问题。
假设Tracker服务器将文件 上传到了192.168.1.51,上传成功后文件ID已经返回给客户端。此时FastDFS存储集群机制会将这个文件


同步到存储192.168.1.52,在文件还没有复制完成的情况下,客户端如果用这个文件 ID在192.168.1.52上取文件,就会出现文件无


法访问的错误,而fastdfs-nginx-module可以重定向文件连接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错


误。(解压后的fastdfs-nnginx-module在nginx安装时使用)
2.上传fastdfs-nginx-module_v1.16.tar.gz到/usr/local/src中(开始已经上传)

3.解压

[root@yxq src]# ls
FastDFS                            FastDFS_v5.05.tar.gz      ng
fastdfs_client_java._v1.25.tar.gz  libfastcommon-master      re
fastdfs-nginx-module_v1.16.tar.gz  libfastcommon-master.zip  re
[root@yxq src]# tar -zxvf fastdfs-nginx-module_v1.16.tar.gz

4、修改fastdfs-nginx-module的config配置文件
[root@yxq src]# cd fastdfs-nginx-module/src
[root@yxq src]# vi config
CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
修改为
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"

5.上传当前稳定版本Nginx(nginx-1.6.2.tar.gz) 到/usr/local/src目录 
6.安装编译Nginx所需的依赖包
[root@yxq src]# yum install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel

7.编译安装Nginx(添加fastdfs-nginx-module模块)
[root@yxq src]# cd /usr/local/src/
[root@yxq src]# tar -zxvf nginx-1.6.2.tar.gz 
[root@yxq src]# cd nginx-1.6.2
[root@yxq nginx-1.6.2]# ./configure --add-module=/usr/local/src/fastdfs-nginx-module/src
[root@yxq nginx-1.6.2]# make && make install

8、复制fastdfs-nginx-module源码中的配置文件到/etc/fdfs目录 ,并修改
[root@yxq nginx-1.6.2]# cp /usr/local/src/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
修改以下配置
connect_timeout=10
base_path=/tmp
tracker_server=192.168.1.131:22122
storage_server_port=23000
group_name=group1
url_have_group_name = true
store_path0=/fastdfs/storage
9、复制FastDFS的部分配置文件到/etc/fdfs目录
[root@yxq nginx-1.6.2]# cd /usr/local/src/FastDFS/conf
[root@yxq conf]# cp http.conf mime.types /etc/fdfs/
10、在/fastdfs/storage文件存储目录 下创建软连接,将其连接到实际存放数据的目录 
[root@yxq conf]# ln -s /fastdfs/storage/data /fastdfs/storage/data/M00
11、配置Nginx
简洁版nginx配置样例
root@yxq conf]# cd /usr/local/nginx/
[root@yxq nginx-1.6.2]# cd conf
[root@yxq conf]# ls
fastcgi.conf    koi-utf  mime.types  scgi_params   win-utf
fastcgi_params  koi-win  nginx.conf  uwsgi_params
[root@yxq conf]# vi nginx.conf 
user  root;
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    server {
        listen       8888;
        server_name  localhost;
         location ~/group([0-9]) /M00{
            #alias /fastdfs/storage/data;
            ngx_fastdfs_module;
        }
        #error_page  404              /404.html;


        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
     }
  }
}
注意、说明
A.8888端口值是要与/etc/fdfs/storage.conf的http.server_port=8888相对应
因为http.server_port默认为8888,如果想改成80,则要对应修改过来
B.Storage对应有多个group的情况下,访问路径带group名,如/group1/M00/00/xxx,
对应的Nginx配置为
 location ~/group([0-9]) /M00{
  ngx_fastdfs_module;
}
C.如查下载时如发现老报404,将nginx.conf第一行的user nobody修改为user root后重启
12.防火墙中打开Nginx的8888端口
[root@yxq conf]# vi /etc/sysconfig/iptables
添加
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
[root@yxq conf]# cat /etc/sysconfig/iptables | grep 8888
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8888 -j ACCEPT
[root@yxq conf]# service iptables restart

13、启动Nginx
[root@yxq conf]# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=15553
(重启Nginx的命令为:/usr/local/nginx/sbin/nginx -s reload
[root@yxq conf]# /usr/local/nginx/sbin/nginx -s reload
ngx_http_fastdfs_set pid=15557
[root@yxq conf]# ps -ef | grep ngx_http_fastdfs_set
root      15561  11293  0 23:25 pts/0    00:00:00 grep ngx_http_fastdfs_set
[root@yxq conf]# 

14、通过浏览器访问测试上传的文件


访问上传的文件


在Java代码中使用FastDFS



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Dubbo高级篇_07_Dubbo服务接口的设计原则

1 、设计方式 action->facade->biz->dao 好的Dubbo服务接品设计,并非只是纯粹的接口服务化 2.接口类型 简单的数据查询接口:action.facade、dao 带业务逻辑...

Dubbox RestEasy 文件上传乱码解决

背景最近开发Dubbox服务,使用了Http协议对PHP系统暴露了一些Service服务,但是在上传时出现了乱码,google没有发现好的解决方案,只能自己debug,发现是配置中缺少一项。解决方案直...

Dubbo高级篇_03_Redis的安装与使用

redis安装与Jedis使用

Dubbo限制大数据传输的解决方案

当service层向web层传输大数据容量的对象时,会受到Dubbo的限制,报类似如下异常: com.alibaba.dubbo.remoting.transport.AbstractCodec.c...

Dubbo高级篇_01_消息中间件在分布式架构的作用和介绍

消息中间件的定义 Message-oriented middleware (MOM) is software infrastructure focused on sending and receivi...

阿里巴巴dubbo处理文件上传下载 java.io.IOException: stream is closed

注:使用InputStream 作为方法参数的时候,需要将该参数作为方法的最后一个参数,否则会有问题     dubbo和hessian的maven依赖:   Jav...
  • whk010
  • whk010
  • 2016-10-08 16:51
  • 1192

持续集成篇_08_Hudson持续集成服务器的使用(远程自动化部署)

持续集成服务器远程自动化部署

Dubbo高级篇_02_activemq的安装与使用

active mq安装及使用

dubbo(三)dubbo的文件上传

在(dubbo二)文章中,我们将customer和provider分开部署了,这次主要记录文件在customer和provider之间的传输. 如果文件直接在customer中进行保存,不需要传递到p...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)