博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FastDFS-Nginx分布式文件系统搭建
阅读量:2074 次
发布时间:2019-04-29

本文共 14229 字,大约阅读时间需要 47 分钟。

因为不想把博客的图片放在别人的图床上,所以自己研究了个图片服务器。本人搭建的为单机方案,当然此服务器自带集群方案,只是博主没有配置。有需要集群配置方案的也很简单,改几个配置就可以了。具体集群步骤可以问问度娘。首先感谢大佬的试错总结,没有他的总结,我也写不出来这篇博客,当然我也出现了不少未知错误。话不多说,直接开始!

首先声明:本文不介绍Nginx和FastDfs的来源及应用场景,文中出现的120.\*\*.\*\*\*.165地址为博主服务器ip地址,实际搭建时请更改为自己的ip!

fastdfs 5.11 版本对照:Version 5.11对应的fastdfs-nginx-module的Version 1.20
fastdfs 5.10 版本对照:Version 5.10对应的fastdfs-nginx-module的Version 1.19
如果版本不对应,后期安装会报错!!!

安装FastDfs

作者的GitHub地址:(本次所需的工具大部分都可以找到)

首先搭建需要用到的所有工具截图

在此直接公布下载地址,毕竟时间宝贵!


  • fastdfs 5.11 点击如下图即可,完成下载。


  • fastdfs-client-java-master 点击如下图即可,完成下载。


  • fastdfs-nginx-module-master 点击如下图即可,完成下载。


  • libfastcommon-master 点击如下图即可,完成下载。


  • nginx-1.12.0.tar 点击如下图即可,完成下载。


到此,所需要的工具已经下载完毕。

下面开始搭建,博主使用的是阿里云轻量级服务器下的linux系统,下面的工具运行命令可看情况安装,但实际安装后已存在的工具不会重复安装,所以完全可以直接复制过去执行一遍,以防万一。

首先下载 所需全部工具运行命令

yum -y install zlib zlib-devel pcre pcre-devel gcc gcc-c++ openssl openssl-devel libevent libevent-devel perl unzip net-tools wget

等待下载完成 然后安装rz 命令

yum install lrzsz -y

通过rz命令 或者sftp上传到/home目录下自己新建一个目录(根据个人习惯)

cd /var 进入var目录

mkdir fdfs 创建fdfs文件夹
cd fdfs 进入fdfs文件夹
rz(或直接将文件拖拽进shell窗口) 将下载好的文件传输至服务器
ls 如下图所示5个压缩文件

安装libfastcommon

解压刚才上传的文件,然后进入解压完成的文件目录

unzip libfastcommon-master.zip 解压libfastcommon-master

cd libfastcommon-master 进入libfastcommon-master
ll
我们会看到

开始安装 执行

./make.sh./make.sh install

看看有没有报错,如果没有错误就可以执行软链接了。

ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.soln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

安装FastDfs

然后回到/var/fdfs(或者你创建的文件下)

解压fastdfs

unzip fastdfs-5.11.zip

解压完成进入fastdfs5.11

cd fastdfs-5.11 ./make.sh./make.sh install

如果没有报错那么,万里长征第一步已经成功,如果报错,请根据报错提示重装。

成功之后查看目录

[root@izwz9hx50rbasf6sqasl7vz fdfs]# cd /etc/fdfs/  [root@izwz9hx50rbasf6sqasl7vz fdfs]# ll  -rw-r--r-- 1 root root  1461 Jun  8 21:56 client.conf.sample  -rw-r--r-- 1 root root  7927 Jun  8 21:56 storage.conf.sample  -rw-r--r-- 1 root root  7389 Jun  8 21:56 tracker.conf.sample

我们需要把这三个实例文件服务一份,去掉sample

cp client.conf.sample client.confcp storage.conf.sample storage.confcp tracker.conf.sample tracker.conf

到此~FastDFS安装结束。

安装tracker

创建tarcker工作目录

这个目录可以自定义,用来保存tracker的data和log

根据个人习惯创建下面的目录:

[root@izwz9hx50rbasf6sqasl7vz ~]# cd /var/[root@izwz9hx50rbasf6sqasl7vz var]# mkdir fastdfs[root@izwz9hx50rbasf6sqasl7vz var]# cd fastdfs/[root@izwz9hx50rbasf6sqasl7vz fastdfs]# mkdir fastdfs_tracker[root@izwz9hx50rbasf6sqasl7vz fastdfs]# cd fastdfs_tracker/[root@izwz9hx50rbasf6sqasl7vz fastdfs_tracker]# pwd/var/fastdfs/fastdfs_tracker        #这个是我最终创建的目录[root@izwz9hx50rbasf6sqasl7vz fastdfs_tracker]#

配置tracker

cd /etc/fdfsvim tracker.conf

打开后找到下面4处然后修改即可(点点111)

1. disabled=false #默认开启 2. port=22122 #默认端口号 3. base_path=/var/fastdfs/fastdfs_tracker #刚刚创建的目录 4. http.server_port=6666 #默认端口是8080

保存修改文件

启动 tracker 命令如下。

service fdfs_trackerd start

如果不能成功启动,可以通systemctl命令

systemctl start fdfs_trackerd

成功之后可以看见

[root@izwz9hx50rbasf6sqasl7vz fdfs]# service fdfs_trackerd startStarting fdfs_trackerd (via systemctl):                    [  OK  ]

进入 (点点111) 创建的tracker目录。发现目录多了data和log两个目录

[root@izwz9hx50rbasf6sqasl7vz fdfs]# cd /var/fastdfs/fastdfs_tracker/[root@izwz9hx50rbasf6sqasl7vz fastdfs_tracker]# lltotal 0drwxr-xr-x 2 root root 178 Jun 16 21:19 datadrwxr-xr-x 2 root root  26 Jun 13 22:01 logs

然后 我们不能每次都这么启动tracker,我们需要给tracker加入开机启动

首先需要给执行权限,

chmod +x /etc/rc.d/rc.local

然后开始修改rc.local

vim /etc/rc.d/rc.local

在配置文件最后加下最后一句话即可

#!/bin/bash# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES## It is highly advisable to create own systemd services or udev rules# to run scripts during boot instead of using this file.## In contrast to previous versions due to parallel execution during boot# this script will NOT be run after all other services.## Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure# that this script will be executed during boot.touch /var/lock/subsys/localservice fdfs_trackerd start

保存,然后 查看tracker端口监听情况

[root@izwz9hx50rbasf6sqasl7vz fastdfs_tracker]# netstat -unltp|grep fdfstcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      2233/fdfs_trackerd

到此22122端口监听成功。

安装storage

为storage配置工作目录,由于storage还需要一个目录用来存储数据,所以我另外多建了一个fasdfs_storage_data

[root@izwz9hx50rbasf6sqasl7vz fastdfs]# lsfastdfs_storage  fastdfs_storage_data  fastdfs_tracker

修改storage配置文件

修改storage.conf

vim /etc/fdfs/storage.conf

找到如下几处地方修改即可

1. disabled=false 2. group_name=group1 #组名,根据实际情况修改 3. port=23000  #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致 4. base_path=/var/fastdfs/fastdfs_storage  #设置storage数据文件和日志目录 5. store_path_count=1 #存储路径个数,需要和store_path个数匹配 6. store_path0=/var/fastdfs/fastdfs_storage_data #实际文件存储路径 7. tracker_server=120.\*\*.\*\*\*.165:22122 #我CentOS7的ip地址 8. http.server_port=8888 #设置 http 端口号

保存之后 创建软引用

ln -s /usr/bin/fdfs_storaged /usr/local/bin

启动storage

service fdfs_storaged start

同理 如果不能启动可以用下述命令

systemctl start fdfs_storaged

成功应该是如下

[root@izwz9hx50rbasf6sqasl7vz fdfs]# service fdfs_stroaged startStarting fdfs_storaged (via systemctl):                    [  OK  ]

同样设置开机启动

修改rc.local

vim /etc/rc.d/rc.local#!/bin/bash# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES## It is highly advisable to create own systemd services or udev rules# to run scripts during boot instead of using this file.## In contrast to previous versions due to parallel execution during boot# this script will NOT be run after all other services.## Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure# that this script will be executed during boot.touch /var/lock/subsys/localservice fdfs_trackerd startservice fdfs_storaged start

同样查看服务是否启动

[root@izwz9hx50rbasf6sqasl7vz fastdfs]# netstat -unltp | grep fdfstcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      2233/fdfs_trackerdtcp        0      0 0.0.0.0:23000           0.0.0.0:*               LISTEN      2323/fdfs_storaged

服务启动,到此fastdfs已经配置完成了。最后我们再确认一下,storage是否注册到了tracker中去。

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

成功后可以看到:

ip_addr = 120.\*\*.\*\*\*.165 (localhost.localdomain) ACTIVE 的字样

ok,修改客户端配置文件

vim /etc/fdfs/client.confbase_path=/var/fastdfs/fastdfs_tracker #tracker服务器文件路径tracker_server=120.\*\*.\*\*\*.165:22122 #tracker服务器IP地址和端口号http.tracker_server_port=6666 # tracker 服务器的 http端口号,必须和tracker的设置对应起来

接下来上传图片到centos7为测试

rz 命令选择一张照片 上传到随便一个目录但是 一定要复制出来

接下来

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /root/测试.jpg  #你上传的图片路径(linux上的)

成功之后会返回图片的路径

group1/M00/00/00/rBEcC1ykgdiALaceAACZsuwCbKE956.jpg

我们去刚才上传的路径查看是否上传成功~~~

cd /var/fastdfs/fastdfs_storage_data/datals0  0D  1A  27  34  41  4E  5B  68  75  82  8F  9C  A9  B6  C3  D0  DD  EA  F701  0E  1B  28  35  42  4F  5C  69  76  83  90  9D  AA  B7  C4  D1  DE  EB  F802  0F  1C  29  36  43  50  5D  6A  77  84  91  9E  AB  B8  C5  D2  DF  EC  F903  10  1D  2A  37  44  51  5E  6B  78  85  92  9F  AC  B9  C6  D3  E0  ED  FA04  11  1E  2B  38  45  52  5F  6C  79  86  93  A0  AD  BA  C7  D4  E1  EE  FB05  12  1F  2C  39  46  53  60  6D  7A  87  94  A1  AE  BB  C8  D5  E2  EF  FC06  13  20  2D  3A  47  54  61  6E  7B  88  95  A2  AF  BC  C9  D6  E3  F0  FD07  14  21  2E  3B  48  55  62  6F  7C  89  96  A3  B0  BD  CA  D7  E4  F1  FE08  15  22  2F  3C  49  56  63  70  7D  8A  97  A4  B1  BE  CB  D8  E5  F2  FF09  16  23  30  3D  4A  57  64  71  7E  8B  98  A5  B2  BF  CC  D9  E6  F3  M000A  17  24  31  3E  4B  58  65  72  7F  8C  99  A6  B3  C0  CD  DA  E7  F40B  18  25  32  3F  4C  59  66  73  80  8D  9A  A7  B4  C1  CE  DB  E8  F50C  19  26  33  40  4D  5A  67  74  81  8E  9B  A8  B5  C2  CF  DC  E9  F6[root@izwz9hx50rbasf6sqasl7vz data]# cd 00[root@izwz9hx50rbasf6sqasl7vz 00]# ls00  0D  1A  27  34  41  4E  5B  68  75  82  8F  9C  A9  B6  C3  D0  DD  EA  F701  0E  1B  28  35  42  4F  5C  69  76  83  90  9D  AA  B7  C4  D1  DE  EB  F802  0F  1C  29  36  43  50  5D  6A  77  84  91  9E  AB  B8  C5  D2  DF  EC  F903  10  1D  2A  37  44  51  5E  6B  78  85  92  9F  AC  B9  C6  D3  E0  ED  FA04  11  1E  2B  38  45  52  5F  6C  79  86  93  A0  AD  BA  C7  D4  E1  EE  FB05  12  1F  2C  39  46  53  60  6D  7A  87  94  A1  AE  BB  C8  D5  E2  EF  FC06  13  20  2D  3A  47  54  61  6E  7B  88  95  A2  AF  BC  C9  D6  E3  F0  FD07  14  21  2E  3B  48  55  62  6F  7C  89  96  A3  B0  BD  CA  D7  E4  F1  FE08  15  22  2F  3C  49  56  63  70  7D  8A  97  A4  B1  BE  CB  D8  E5  F2  FF09  16  23  30  3D  4A  57  64  71  7E  8B  98  A5  B2  BF  CC  D9  E6  F30A  17  24  31  3E  4B  58  65  72  7F  8C  99  A6  B3  C0  CD  DA  E7  F40B  18  25  32  3F  4C  59  66  73  80  8D  9A  A7  B4  C1  CE  DB  E8  F50C  19  26  33  40  4D  5A  67  74  81  8E  9B  A8  B5  C2  CF  DC  E9  F6[root@localhost 00]# cd 00[root@localhost 00]# lsrBEcC1ykgdiALaceAACZsuwCbKE956.jpg

果然我们找到了图片了。

data下有256个1级目录,每级目录下又有256个2级子目录,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

然后我们HTTP访问文件

我们发现,http不能直接访问到图片。这是为什么呢。

原来早在4.05的时候,就remove embed HTTP support

Version 4.05  2012-12-30 * client/fdfs_upload_file.c can specify storage ip port and store path index * add connection pool * client load storage ids config * common/ini_file_reader.c does NOT call chdir * keep the mtime of file same * use g_current_time instead of call time function * remove embed HTTP support

HTTP请求不能访问文件的原因

我们在使用FastDFS部署一个分布式文件系统的时候,通过FastDFS的客户端API来进行文件的上传、下载、删除等操作。同时通过FastDFS的HTTP服务器来提供HTTP服务。但是FastDFS的HTTP服务较为简单,无法提供负载均衡等高性能的服务,所以FastDFS的开发者——淘宝的架构师余庆同学,为我们提供了Nginx上使用的FastDFS模块(也可以叫FastDFS的Nginx模块)。

FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题.假设Tracker服务器将文件上传到了120.**.***.165,文件ID已经返回客户端,这时,后台会将这个文件复制到120.**.***.1651,如果复制没有完成,客户端就用这个ID在120.**.***.165取文件,肯定会出现错误。这个fastdfs-nginx-module可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。
正是这样,FastDFS需要结合nginx,所以取消原来对HTTP的直接支持。

FastDFS的nginx模块安装

配置storage nginx

准备nginx安装

cd /var/fdfs

在安装nginx之前要安装nginx所需的依赖lib:

yum -y install pcre pcre-devel  yum -y install zlib zlib-devel  yum -y install openssl openssl-devel

安装nginx并添加fastdfs-nginx-module

解压nginx,和fastdfs-nginx-module:

tar -zxvf nginx-1.12.0.tar.gzunzip fastdfs-nginx-module-master.zip

然后进入nginx安装目录,添加fastdfs-nginx-module:

./configure --prefix=/usr/local/nginx \--add-module=/var/fdfs/fastdfs-nginx-module-master/src

注意,这里有个坑!一开始对nginx的插件安装并不了解,使用的是yum下载的nginx,这样下载后的nginx好像是自带了某些插件,不需要配置SSL(因为博主的博客使用nginx做的静态代理,并且使用了SSL加密)。然而!从官网下载的nginx并不带有这个插件,所有导致博主在编译的时候一直报错。因为nginx的插件是批量添加的,所以,如果配置了HTTPS代理,那么就需要按如下方式配置两个插件!

./configure --prefix=/usr/local/nginx \--with-http_ssl_module \--add-module=/var/fdfs/fastdfs-nginx-module-master/src

如果没有错误信息,开始安装

makemake install

这里还有个坑!make编译的时候可能会报这个错/usr/include/fastdfs/fdfs_define.h:15:27: fatal error: common_define.h: No such file or directory

下面给出解决方案:
修改fastdfs-nginx-module-1.20/src/config文件,并且重新配置一次./configure
ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/"
CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
配置完毕后再次./configure后进行make。

nginx的默认目录是/usr/local/nginx 开始 配置storage nginx

root@izwz9hx50rbasf6sqasl7vz nginx-1.12.0]# cd /usr/local/nginx[root@izwz9hx50rbasf6sqasl7vz nginx]# ll

修改nginx.conf:

[root@izwz9hx50rbasf6sqasl7vz nginx]# cd conf/[root@izwz9hx50rbasf6sqasl7vz conf]# lsfastcgi.conf            koi-win             scgi_paramsfastcgi.conf.default    mime.types          scgi_params.defaultfastcgi_params          mime.types.default  uwsgi_paramsfastcgi_params.default  nginx.conf          uwsgi_params.defaultkoi-utf                 nginx.conf.default  win-utf[root@izwz9hx50rbasf6sqasl7vz conf]# vi nginx.conf

修改listen 9999.然后 新增本地location

server {        listen       9999;        server_name  localhost;        location / {            root   html;            index  index.html index.htm;        }        location /group1/M00 {            root /var/fastdfs/fastdfs_storage_data/data;            ngx_fastdfs_module;        }

然后进入FastDFS安装时的解压过的目录,将http.conf和mime.types拷贝到/etc/fdfs目录下:

[root@izwz9hx50rbasf6sqasl7vz fastdfs-5.11]# cd /var/fdfs/fastdfs-5.11/conf[root@izwz9hx50rbasf6sqasl7vz conf]# lsanti-steal.jpg  http.conf   storage.conf      tracker.confclient.conf     mime.types  storage_ids.confcp http.conf /etc/fdfs/cp mime.types /etc/fdfs/

另外还需要把fastdfs-nginx-module安装目录中src目录下的mod_fastdfs.conf也拷贝到/etc/fdfs目录下:

cp /var/fdfs/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/

对刚刚拷贝的mod_fastdfs.conf文件进行修改:

vim /etc/fdfs/mod_fastdfs.confbase_path=/usr/muyou/dev/fastdfs/fastdfs_storage  #保存日志目录tracker_server=120.\*\*.\*\*\*.165:22122 #tracker服务器的IP地址以及端口号storage_server_port=23000 #storage服务器的端口号url_have_group_name = true #文件 url 中是否有 group 名store_path0=/var/fastdfs/fastdfs_storage_data   #存储路径group_count = 3 #设置组的个数,事实上这次只使用了group1

在文件的最后,设置group

[group1]group_name=group1storage_server_port=23000store_path_count=1store_path0=/var/fastdfs/fastdfs_storage_datastore_path1=/var/fastdfs/fastdfs_storage_data# group settings for group #2# since v1.14# when support multi-group, uncomment following section as neccessary[group2]group_name=group2storage_server_port=23000store_path_count=1store_path0=/var/fastdfs/fastdfs_storage_data[group3]group_name=group3storage_server_port=23000store_path_count=1store_path0=/var/fastdfs/fastdfs_storage_data

创建M00至storage存储目录的符号连接:

ln  -s  /var/fastdfs/fastdfs_storage_data/data/ /var/fastdfs/fastdfs_storage_data/data/M00

启动nginx:

/usr/local/nginx/sbin/nginx

成功启动:

[root@localhost conf]# /usr/local/nginx/sbin/nginxngx_http_fastdfs_set pid=1231

恭喜你,storage的nginx已配置成功。接下来,我们还要继续配置tracker的nginx。

配置tracker nginx

一样的还是修改nginx.conf。需将upstream指向tracker的nginx地址。

vim /usr/local/nginx/conf/nginx.conf upstream fdfs_group1 {        server 127.0.0.1:9999;    }    server {        listen       9989;        server_name  localhost;        #charset koi8-r;        #access_log  logs/host.access.log  main;        location /group1/M00 {            proxy_pass http://fdfs_group1;        }

重新加载nginx的配置文件:

[root@localhost conf]# nginx -s reload

如果 访问不了 那就修改防火墙吧(阿里服务器上请不要随意关闭防火墙,可能是安全组没有打开!)

firewall-cmd –zone=public –add-port=23000/tcp –permanent #开户端口号

或者

systemctl enable firewalld.service #开启防火墙

systemctl stop firewalld.service #关闭防火墙(开机会仍会启动)

systemctl disable firewalld.service #禁用防火墙(开机后不再启动)

然后在找刚才那个路径 测试

OK,到此已经结束,大功告成~

后记

  • 本篇博客基于网上很多资料完成,按照流程搭建下来不会报错。但碍于linux环境的复杂多样,如果遇到未知错误,请多耐心查找原因(百度是个好东西!)。当然也可以联系博主~博主有时间会解答的噢。

  • FastDFS的Java客户端,

转载地址:http://aotmf.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】155-Min Stack
查看>>
【LEETCODE】20-Valid Parentheses
查看>>
【LEETCODE】290-Word Pattern
查看>>
【LEETCODE】36-Valid Sudoku
查看>>
【LEETCODE】205-Isomorphic Strings
查看>>
【LEETCODE】204-Count Primes
查看>>
【LEETCODE】228-Summary Ranges
查看>>
【LEETCODE】27-Remove Element
查看>>
【LEETCODE】66-Plus One
查看>>
【LEETCODE】26-Remove Duplicates from Sorted Array
查看>>
【LEETCODE】118-Pascal's Triangle
查看>>
【LEETCODE】119-Pascal's Triangle II
查看>>
word2vec 模型思想和代码实现
查看>>
怎样做情感分析
查看>>
用深度神经网络处理NER命名实体识别问题
查看>>
用 RNN 训练语言模型生成文本
查看>>
RNN与机器翻译
查看>>
用 Recursive Neural Networks 得到分析树
查看>>
RNN的高级应用
查看>>
TensorFlow-7-TensorBoard Embedding可视化
查看>>