CentOS7 搭建FastDFS分布式文件系统2

  1. FastDFS 搭建
  2. FastDFS 整合 Nginx
  3. FastDFS 整合 Spring Boot 上传

1.测试

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

1.1 配置客户端

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

vim /etc/fdfs/client.conf

修改如下:

base_path=/usr/xiao/fastdfs/fastdfs_tracker #tracker服务器文件路径
tracker_server=192.168.235.32:22122 #tracker服务器IP地址和端口号
http.tracker_server_port=6666 # tracker 服务器的 http端口号,必须和tracker的设置对应起来

通过ftp上传图片到CentOS:

mac1.png

[root@localhost FastDFS]# ls
fastdfs-client-java-master.zip  fastdfs-nginx-module.zip  libfastcommon-master  mac1.png
fastdfs-master                  fastdfs.zip               libfastcommon.zip
fastdfs-nginx-module-master     libfastcommon2.zip        libshmcache.zip

1.2 模拟上传

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

/usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /usr/xiao/FastDFS/mac1.png  #这后面放的是图片的位置

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

[root@localhost ~]# /usr/bin/fdfs_upload_file  /etc/fdfs/client.conf  /usr/xiao/FastDFS/mac1.png
group1/M00/00/00/wKjrIFrJ0i6Ab01-AAGAbcVKeio294.png
  1. 组名:group1
  2. 磁盘:M00
  3. 目录:00/00
  4. 文件名称:wKjrIFrJ0i6Ab01-AAGAbcVKeio294.png

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

[root@localhost fastdfs_storage_data]# cd /usr/xiao/fastdfs/fastdfs_storage_data/data
[root@localhost 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  M00
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@localhost data]# cd 00
[root@localhost 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@localhost 00]# cd 00
[root@localhost 00]# ls
wKjrIFrJ0i6Ab01-AAGAbcVKeio294.png

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

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

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

扫描二维码关注公众号,回复: 1947320 查看本文章

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:

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

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

解压nginx,和fastdfs-nginx-module:

tar -zxvf nginx-1.13.0.tar.gz
unzip fastdfs-nginx-module-master.zip

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

./configure --prefix=/usr/software/nginx --add-module=/usr/xiao/nginx/fastdfs-nginx-module-master/src    #解压后fastdfs-nginx-module所在的位置

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

make
make install

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

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

[root@localhost nginx-1.13.0]# cd /usr/software/nginx
[root@localhost nginx]# ll
total 0
drwxr-xr-x 2 root   root 333 Jun 16 21:42 conf
drwxr-xr-x 2 root   root  40 Jun 14 01:31 html
drwxr-xr-x 2 root   root  58 Jun 15 22:21 logs
drwxr-xr-x 2 root   root  19 Jun 14 01:31 sbin

2.3 配置storage nginx

修改nginx.conf:

[root@localhost nginx]# cd conf/
[root@localhost 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@localhost 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/xiao/dev/fastdfs/fastdfs_storage_data/data;
            ngx_fastdfs_module;
        }

        location = /50x.html {
            root   html;
        }
}

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

[root@localhost fastdfs-master]# cd /usr/xiao/fastdfs-master/conf/
[root@localhost conf]# ls
anti-steal.jpg  http.conf   storage.conf      tracker.conf
client.conf     mime.types  storage_ids.conf
[root@localhost conf]# cp http.conf /etc/fdfs/
[root@localhost conf]# cp mime.types /etc/fdfs/

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

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

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

vim /etc/fdfs/mod_fastdfs.conf

修改内容如下:

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

在文件的最后,设置group

[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/usr/xiao/fastdfs/fastdfs_storage_data

[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/usr/xiao/fastdfs/fastdfs_storage_data

[group3]
group_name=group3
storage_server_port=23000
store_path_count=1
store_path0=/usr/xiao/fastdfs/fastdfs_storage_data

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

ln  -s  /usr/xiao/fastdfs/fastdfs_storage_data/data/ /usr/xiao/fastdfs/fastdfs_storage_data/data/M00

启动nginx:

/usr/software/nginx/sbin/nginx

成功启动:

[root@localhost conf]# /usr/software/nginx/sbin/nginx
ngx_http_fastdfs_set pid=8142

访问一下:

192.168.235.32:9999

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

2.4 配置tracker nginx

再解压一个nginx:

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

[root@localhost xiao]# cd /usr/xiao/
[root@localhost xiao]# ls
fastdfs  nginx  nginx2

配置:

[root@localhost ftp]# cd /usr/xiao/nginx2/nginx-1.13.0/
[root@localhost nginx-1.13.0]# ls
auto     CHANGES.ru  configure  html     Makefile  objs    src
CHANGES  conf        contrib    LICENSE  man       README
./configure --prefix=/usr/software/nginx2 --add-module=/usr/xiao/nginx/fastdfs-nginx-module-master/src    #解压后fastdfs-nginx-module所在的位置

编译:

make
make install

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

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:

/usr/software/nginx2/sbin/nginx

访问:192.168.235.32

可以看到welcome界面。

2.5 防火墙端口设置

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

查看已开启的端口:

[root@localhost 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表示永久生效,不加的话,重启后不生效

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://192.168.235.32:9999/group1/M00/00/00/wKjrIFrJ0i6Ab01-AAGAbcVKeio294.png

这里写图片描述

猜你喜欢

转载自blog.csdn.net/jeikerxiao/article/details/79863529