CentOS7 搭建FastDFS分布式文件系统(下)

1.测试

前面一篇文章已对FastDFS的安装和配置,做了比较详细的讲解。FastDFS的基础模块都搭好了,现在开始测试下载。

1.1 配置客户端

同样的,需要修改客户端的配置文件:

[root@docker-01 00]# vim /etc/fdfs/client.conf

修改如下:

base_path=/usr/yunweimao/fastdfs/fastdfs_tracker #tracker服务器文件路径

tracker_server=172.17.120.50:22122 #tracker服务器IP地址和端口号

http.tracker_server_port=6666 # tracker 服务器的 http端口号,必须和tracker的设置对应起来

通过ftp上传图片到CentOS:

mac1.png

[root@docker-01 fastdfs]# ls

fastdfs_storage  fastdfs_storage_data  fastdfs_tracker  mac1.png

1.2 模拟上传

确定图片位置后,我们输入上传图片命令:

[root@docker-01 opt]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/yunweimao/fastdfs/mac1.png  #这后面放的是图片的位置

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

[root@docker-01 opt]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /usr/yunweimao/fastdfs/mac1.png

group1/M00/00/00/rBF4Ml1rV3uAQqKmABkOCxpvlZg936.png

组名:group1

磁盘:M00

目录:00/00

文件名称:rBF4Ml1rV3uAQqKmABkOCxpvlZg936.png

上传的图片会被上传到我们创建的storage_data目录下,可以去查看一下:

[root@docker-01 opt]# cd /usr/yunweimao/fastdfs/fastdfs_storage_data/data

[root@docker-01 data]# ls

00  0D  1A  27  34  41  4E  5B  68  75  82  8F  9C  A9  B6  C3  D0  DD  EA  F7

01  0E  1B  28  35  42  4F  5C  69  76  83  90  9D  AA  B7  C4  D1  DE  EB  F8

02  0F  1C  29  36  43  50  5D  6A  77  84  91  9E  AB  B8  C5  D2  DF  EC  F9

03  10  1D  2A  37  44  51  5E  6B  78  85  92  9F  AC  B9  C6  D3  E0  ED  FA

04  11  1E  2B  38  45  52  5F  6C  79  86  93  A0  AD  BA  C7  D4  E1  EE  FB

05  12  1F  2C  39  46  53  60  6D  7A  87  94  A1  AE  BB  C8  D5  E2  EF  FC

06  13  20  2D  3A  47  54  61  6E  7B  88  95  A2  AF  BC  C9  D6  E3  F0  FD

07  14  21  2E  3B  48  55  62  6F  7C  89  96  A3  B0  BD  CA  D7  E4  F1  FE

08  15  22  2F  3C  49  56  63  70  7D  8A  97  A4  B1  BE  CB  D8  E5  F2  FF

09  16  23  30  3D  4A  57  64  71  7E  8B  98  A5  B2  BF  CC  D9  E6  F3

0A  17  24  31  3E  4B  58  65  72  7F  8C  99  A6  B3  C0  CD  DA  E7  F4

0B  18  25  32  3F  4C  59  66  73  80  8D  9A  A7  B4  C1  CE  DB  E8  F5

0C  19  26  33  40  4D  5A  67  74  81  8E  9B  A8  B5  C2  CF  DC  E9  F6

[root@docker-01 data]# cd 00/

[root@docker-01 00]# ls

00  0D  1A  27  34  41  4E  5B  68  75  82  8F  9C  A9  B6  C3  D0  DD  EA  F7

01  0E  1B  28  35  42  4F  5C  69  76  83  90  9D  AA  B7  C4  D1  DE  EB  F8

02  0F  1C  29  36  43  50  5D  6A  77  84  91  9E  AB  B8  C5  D2  DF  EC  F9

03  10  1D  2A  37  44  51  5E  6B  78  85  92  9F  AC  B9  C6  D3  E0  ED  FA

04  11  1E  2B  38  45  52  5F  6C  79  86  93  A0  AD  BA  C7  D4  E1  EE  FB

05  12  1F  2C  39  46  53  60  6D  7A  87  94  A1  AE  BB  C8  D5  E2  EF  FC

06  13  20  2D  3A  47  54  61  6E  7B  88  95  A2  AF  BC  C9  D6  E3  F0  FD

07  14  21  2E  3B  48  55  62  6F  7C  89  96  A3  B0  BD  CA  D7  E4  F1  FE

08  15  22  2F  3C  49  56  63  70  7D  8A  97  A4  B1  BE  CB  D8  E5  F2  FF

09  16  23  30  3D  4A  57  64  71  7E  8B  98  A5  B2  BF  CC  D9  E6  F3

0A  17  24  31  3E  4B  58  65  72  7F  8C  99  A6  B3  C0  CD  DA  E7  F4

0B  18  25  32  3F  4C  59  66  73  80  8D  9A  A7  B4  C1  CE  DB  E8  F5

0C  19  26  33  40  4D  5A  67  74  81  8E  9B  A8  B5  C2  CF  DC  E9  F6

[root@docker-01 00]# cd 00/

[root@docker-01 00]# ls

rBF4Ml1rV3uAQqKmABkOCxpvlZg936.png

果然通过刚刚返回的路径,我们成功找到了图片。

我们仔细看一下,实际文件存储路径下有创建好的多级目录。

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

1.3 HTTP访问文件

我们去浏览器用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

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

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

FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组之间的服务器需要复制文件,有延迟的问题.

假设Tracker服务器将文件上传到了192.168.235.32,文件ID已经返回客户端,这时,后台会将这个文件复制到192.168.235.32,如果复制没有完成,客户端就用这个ID在192.168.235.32取文件,肯定会出现错误。

这个fastdfs-nginx-module可以重定向连接到源服务器取文件,避免客户端由于复制延迟的问题,出现错误。

正是这样,FastDFS需要结合nginx,所以取消原来对HTTP的直接支持。

2. FastDFS的nginx模块安装

2.1安装nginx准备

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

[root@docker-01 00]# yum -y install pcre pcre-devel 

[root@docker-01 00]# yum -y install zlib zlib-devel 

[root@docker-01 00]# yum -y install openssl openssl-devel

2.2 安装nginx并添加fastdfs-nginx-module

解压nginx,和fastdfs-nginx-module:

[root@docker-01 opt]# wget http://nginx.org/download/nginx-1.13.0.tar.gz

[root@docker-01 opt]# tar -zxvf nginx-1.13.0.tar.gz

[root@docker-01 opt]# unzip fastdfs-nginx-module-master.zip

解压后进入nginx目录编译安装nginx,并添加fastdfs-nginx-module:

[root@docker-01 opt]# mkdir /usr/yunweimao/nginx

[root@docker-01 opt]# mv fastdfs-nginx-module-master /usr/yunweimao/nginx/

[root@docker-01 opt]# cd nginx-1.13.0

[root@docker-01 nginx-1.13.0]# mkdir /usr/software/nginx 

[root@docker-01 nginx-1.13.0]# ./configure --prefix=/usr/software/nginx --add-module=/usr/yunweimao/nginx/fastdfs-nginx-module-master/src/    #解压后fastdfs-nginx-module所在的位置

如果配置不报错的话,就开始编译:

[root@docker-01 nginx-1.13.0]# make

[root@docker-01 nginx-1.13.0]# make install

如果报错的话,很可能是版本的原因,在我的第二篇博文中提供了我测试成功不报错的版本下载。

nginx的默认目录是/usr/software/nginx,安装成功后查看:

[root@docker-01 nginx-1.13.0]# cd /usr/software/nginx/

[root@docker-01 nginx]# ll

总用量 4

drwxr-xr-x. 2 root   root 4096 9月   1 14:02 conf

drwxr-xr-x. 2 root   root   40 9月   1 13:43 html

drwxr-xr-x. 2 root   root   58 9月   1 14:02 logs

drwxr-xr-x. 2 root   root   19 9月   1 13:43 sbin

2.3 配置storage nginx

修改nginx.conf:

[root@docker-01 nginx]# cd conf/

[root@docker-01 conf]# ls

fastcgi.conf            koi-win             scgi_params

fastcgi.conf.default    mime.types          scgi_params.default

fastcgi_params          mime.types.default  uwsgi_params

fastcgi_params.default  nginx.conf          uwsgi_params.default

koi-utf                 nginx.conf.default  win-utf

[root@docker-01 conf]# vim nginx.conf

修改监听端口 listen 9999, 新增location:

server {

        listen       9999;

        server_name  localhost;

        location / {

            root   html;

            index  index.html index.htm;

        }

        location ~/group1/M00 {

            root /usr/yunweimao/dev/fastdfs/fastdfs_storage_data/data;

            ngx_fastdfs_module;

        }

        location = /50x.html {

            root   html;

        }

}

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

[root@docker-01 fdfs]# cd /opt/fastdfs-master/conf

[root@docker-01 conf]# ls

anti-steal.jpg  http.conf   storage.conf      tracker.conf

client.conf     mime.types  storage_ids.conf

[root@docker-01 conf]# cp http.conf /etc/fdfs/

[root@docker-01 conf]# cp mime.types  /etc/fdfs/

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

[root@docker-01 conf]# cp /usr/yunweimao/nginx/fastdfs-nginx-module-master/src/mod_fastdfs.conf /etc/fdfs/

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

[root@docker-01 conf]# vim /etc/fdfs/mod_fastdfs.conf

修改内容如下:

base_path=/usr/yunweimao/fastdfs/fastdfs_storage  #保存日志目录

tracker_server=172.17.120.50:22122 #tracker服务器的IP地址以及端口号

storage_server_port=23000 #storage服务器的端口号

url_have_group_name = true #文件 url 中是否有 group 名

store_path0=/usr/yunweimao/fastdfs/fastdfs_storage_data   #存储路径

group_count = 3 #设置组的个数,事实上这次只使用了group1

在文件的最后,设置group

[group1]

group_name=group1

storage_server_port=23000

store_path_count=1

store_path0=/usr/yunweimao/fastdfs/fastdfs_storage_data

[group2]

group_name=group2

storage_server_port=23000

store_path_count=1

store_path0=/usr/yunweimao/fastdfs/fastdfs_storage_data

[group3]

group_name=group3

storage_server_port=23000

store_path_count=1

store_path0=/usr/yunweimao/fastdfs/fastdfs_storage_data

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

[root@docker-01 conf]# ln -s /usr/yunweimao/fastdfs/fastdfs_storage_data/ /usr/yunweimao/fastdfs/fastdfs_storage_data/data/M00

启动nginx:

[root@docker-01 conf]# /usr/software/nginx/sbin/nginx 

成功启动:

[root@docker-01 conf]# /usr/software/nginx/sbin/nginx 

ngx_http_fastdfs_set pid=24740

访问一下:

172.17.120.50:9999

可以看到 welcome 界面,那么storage的nginx已配置成功。

2.4 配置tracker nginx

再解压一个nginx:

我在我自己的工作下再建了一个nginx2,把原来的nginx-1.13.0.tar.gz又解压了一份到里面

[root@docker-01 conf]# cd /usr/yunweimao/

[root@docker-01 yunweimao]# ls

fastdfs  nginx

[root@docker-01 yunweimao]# mkdir nginx2

[root@docker-01 yunweimao]# ls

fastdfs  nginx  nginx2

配置:

[root@docker-01 nginx2]# mkdir /usr/software/nginx2

[root@docker-01 nginx2]# tar -xzvf nginx-1.13.0.tar.gz 

[root@docker-01 src]# cd /usr/yunweimao/nginx2/nginx-1.13.0

[root@docker-01 nginx-1.13.0]# ls

auto    CHANGES.ru  configure  html    man    src

CHANGES  conf        contrib    LICENSE  README

[root@docker-01 nginx-1.13.0]# ./configure --prefix=/usr/software/nginx2 --add-module=/usr/yunweimao/nginx/fastdfs-nginx-module-master/src   #解压后fastdfs-nginx-module所在的位置

编译:

[root@docker-01 nginx-1.13.0]# make

[root@docker-01 nginx-1.13.0]# make install

接下来,一样的还是修改nginx.conf,端口号可以不改,用80的。需将upstream指向tracker的nginx地址。

[root@docker-01 nginx-1.13.0]# vim /usr/software/nginx2/conf/nginx.conf

upstream fdfs_group1 {

        server 127.0.0.1:9999;

}

server {

        listen       80;

        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /group1/M00 {

            proxy_pass http://fdfs_group1;

        }

        #location / {

        #    root   html;

        #    index  index.html index.htm;

        #}

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

            root   html;

        }

}

启动nginx:

[root@docker-01 nginx-1.13.0]# /usr/software/nginx2/sbin/nginx

访问:172.17.120.50

可以看到welcome界面。

2.5 防火墙端口设置

成功了,为什么还要讲这个呢。因为有些同学到这里,还是不到访问,很可能是防火墙没有开启相应的端口。防火墙这个东西我建议大家还是不要关闭,虽然麻烦了一点。

查看已开启的端口:

[root@docker-01 nginx-1.13.0]# firewall-cmd --zone=public --list-ports

20880/tcp 80/tcp 2181/tcp 23000/tcp 22122/tcp 9999/tcp

在我的CentOS上这些端口都是开放的。

storage:20880

tracker:23000

这两个端口要开启,到时候下一篇讲fastdfs-client-javas可能会造成无法连接。 

9999和80端口是提供给nginx访问的。

开放端口号命令:–permanent表示永久生效,不加的话,重启后不生效

[root@docker-01 nginx-1.13.0]# firewall-cmd --zone=public --add-port=23000/tcp --permanent #开户端口号

CentOS7 防火墙相关命令:

systemctl enable firewalld.service    #开启防火墙

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

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

2.6 HTTP测试

现在再次访问一下我们上传过的图片:

http://172.17.120.50:9999/group1/M00/00/00/rBF4Ml1rV3uAQqKmABkOCxpvlZg936.png

关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。

本人微信:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值