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

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

本文分享自微信公众号 - 运维猫(centos15)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券