前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CentOS7 搭建FastDFS分布式文件系统(下)

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

作者头像
胡齐
发布2019-09-23 18:43:52
6350
发布2019-09-23 18:43:52
举报
文章被收录于专栏:运维猫运维猫

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档