【FastDFS】面试官:如何实现文件的大规模分布式存储?(全程实战(1)

最后

这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)

image

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

[root@localhost fdfs]# vi /etc/fdfs/client.conf

以下两项配置用到的tracker目录和服务器地址端口

base_path = /data/fastdfs/tracker

tracker_server = 192.168.175.101:22122

tracker_server = 192.168.175.102:22122

说明:两台tracker上的client.conf配置相同

(2)从客户端的配置可以看到:客户端只需要了解tracker_server的信息。tracker server作用也正是负载均衡和调度

(3)Storage server作用是文件存储,客户端上传的文件最终存储在 Storage 服务上

测试文件

用client.conf上传文件测试。

(1)从tacker上传一个文件

[root@0268c2dc2bf6 ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/a.txt group1/M00/00/00/rBEABF5aTEeAXHF4AAAABHf4XZU792.txt

注意返回的是group1,我们可以group1下面的两台机器均找到此txt文件:

  • storage1上

[root@d5d19e99e782 docker_tmp]# ls /data/fastdfs/storage/data/00/00

rBEABF5aTEeAXHF4AAAABHf4XZU792.txt

  • storage2上

[root@f201111d0698 docker_tmp]# ls /data/fastdfs/storage/data/00/00

rBEABF5aTEeAXHF4AAAABHf4XZU792.txt

(2)指定group上传文件

如果想指定上传到某个group怎么办?例如:指定上传到group2

[root@0268c2dc2bf6 ~]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/a.txt 192.168.175.105:23000

group2/M00/00/00/rBEABl5aUAqAXLCZAAAABHf4XZU043.txt

说明:指定group2中任一台的ip和端口即可。

(3)查看效果

  • storage3上

[root@494ac47d63f8 fdfs]# ls /data/fastdfs/storage/data/00/00

rBEABl5aUAqAXLCZAAAABHf4XZU043.txt

  • storage4上

[root@59fa1efff362 fdfs]# ls /data/fastdfs/storage/data/00/00

rBEABl5aUAqAXLCZAAAABHf4XZU043.txt

安装部署storage服务


生成默认配置文件

四台storage上:生成启动fastdfs默认的配置文件。

[root@localhost fastdfs-6.06]# cd /etc/fdfs/

[root@localhost fdfs]# cp storage.conf.sample storage.conf

[root@localhost fdfs]# cp client.conf.sample client.conf

说明:不需要生成tracker.conf,因为storage上不再运行tracker服务

安装Nginx

四台storage上:安装nginx及fastdfs-nginx-module

(1)解压nginx

[root@localhost source]# tar -zxvf nginx-1.17.8.tar.gz

(2)解压fastdfs-nginx-module

[root@localhost source]# tar -zxvf V1.22.tar.gz

(3)修改config文件,把/usr/local 替换成 /usr

[root@localhost source]# cd fastdfs-nginx-module-1.22/

[root@localhost fastdfs-nginx-module-1.22]# cd src

[root@localhost src]# vi config

(4)Nginx配置,添加fastdfs-nginx-module和http_stub_status_module 模块

[root@localhost fdfs]# cd /usr/local/source/nginx-1.17.8/

[root@localhost nginx-1.17.8]# ./configure --prefix=/usr/local/soft/nginx --with-http_stub_status_module --add-module=/usr/local/source/fastdfs-nginx-module-1.22/src/

(5)编译安装nginx

[root@localhost nginx-1.17.8]# make && make install

(6)检查安装是否成功

[root@localhost nginx-1.17.8]# ls /usr/local/soft/ | grep nginx

nginx

(7)查看指定的编译参数是否起作用

[root@localhost fdfs]# /usr/local/soft/nginx/sbin/nginx -V

nginx version: nginx/1.17.8

built by gcc 8.3.1 20190507 (Red Hat 8.3.1-4) (GCC)

configure arguments: --prefix=/usr/local/soft/nginx --with-http_stub_status_module --add-module=/usr/local/source/fastdfs-nginx-module-1.22/src/

配置并启动storage服务

四台storage上:配置并启动storage服务

(1)创建storage服务所需的目录

[root@localhost fdfs]# mkdir /data/fastdfs/storage

[root@localhost fdfs]# chmod 777 /data/fastdfs/storage/

(2)配置storage服务

编辑storage的配置文件:

[root@localhost fdfs]# vi /etc/fdfs/storage.conf

各配置项包括:

group_name = group1

#配置base_path为上面所创建的storage目录

base_path = /data/fastdfs/storage

#store_path :存储所在的目录,可以设置多个,注意从0开始

store_path0 = /data/fastdfs/storage

#tracker_server的ip和端口

tracker_server = 192.168.175.101:22122

tracker_server = 192.168.175.102:22122

#指定http服务的端口

http.server_port = 80

配置的不同之处:

192.168.175.103 group_name = group1

192.168.175.104 group_name = group1

192.168.175.105 group_name = group2

192.168.175.106 group_name = group2

(3)启动storage服务

[root@localhost fdfs]# /etc/init.d/fdfs_storaged start

正在启动 fdfs_storaged (via systemctl): [ 确定 ]

(4)检查storage服务启动是否成功

[root@localhost fdfs]# ps auxfww | grep fdfs

root 15630 0.0 0.0 12320 972 pts/0 S+ 15:46 0:00 | | _ grep --color=auto fdfs

root 15026 0.0 0.1 155696 6964 ? Sl 15:13 0:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf

root 15573 2.7 1.7 150736 66292 ? Sl 15:45 0:02 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf

说明:看到fdfs_storaged,表示storage服务启动成功

(5)检查storage服务是否已绑定到端口:23000

[root@localhost fdfs]# netstat -anp | grep 23000

tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 15573/fdfs_storaged

说明:23000 端口是在配置文件 /etc/fdfs/storage.conf中定义的,如下:

the storage server port

port = 23000

配置fastdfs-nginx-module

四台存储服务器上:配置fastdfs-nginx-module

(1)生成配置文件

[root@localhost nginx-1.17.8]# cp /usr/local/source/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/

(2)编辑配置文件

[root@localhost nginx-1.17.8]# vi /etc/fdfs/mod_fastdfs.conf

配置以下几项

group_name=group1

connect_timeout=10

tracker_server=192.168.175.101:22122

tracker_server=192.168.175.102:22122

url_have_group_name = true

store_path0=/data/fastdfs/storage

group_count = 2

[group1]

group_name=group1

storage_server_port=23000

store_path_count=1

store_path0=/data/fastdfs/storage

[group2]

group_name=group2

storage_server_port=23000

store_path_count=1

store_path0=/data/fastdfs/storage

说明: 最上面的group_name:当机器属于group1这组时,值为group1;当机器属于group2这组时,值为group2。

说明:url_have_group_name = true。 注意:这一项不要漏掉,会导至nginx不正常工作

(3)复制另两个web访问用到配置文件到fdfs配置目录下:

[root@d5d19e99e782 /]# cp /usr/local/source/fastdfs-6.06/conf/http.conf /etc/fdfs/

[root@d5d19e99e782 /]# cp /usr/local/source/fastdfs-6.06/conf/mime.types /etc/fdfs/

配置Nginx

四台存储服务器上:配置nginx

编辑nginx的配置文件:

[root@localhost conf]# vi /usr/local/soft/nginx/conf/nginx.conf

在server listen 80 的这个server配置下面,

增加一个location

location ~/group([0-9]) {

root /data/fastdfs/storage/data;

ngx_fastdfs_module;

}

启动nginx

(1)启动Nginx

[root@localhost storage]# /usr/local/soft/nginx/sbin/nginx

(2)检查nginx是否已成功启动

[root@localhost storage]# ps auxfww | grep nginx

root 24590 0.0 0.0 12320 980 pts/0 S+ 16:44 0:00 | | _ grep --color=auto nginx

root 24568 0.0 0.0 41044 428 ? Ss 16:44 0:00 _ nginx: master process /usr/local/soft/nginx/sbin/nginx

nobody 24569 0.0 0.1 74516 4940 ? S 16:44 0:00 _ nginx: worker process

配置tracker服务


配置tracker服务

说明:这一步等待四台storage server配置完成后再进行。使用n=Nginx做upstream负载均衡的原因:可以通过一个地址访问后端的多个group

(1)文件上传完成后,从浏览器访问各个storage的Nginx即可:

例如:

http://192.168.175.103/group1/M00/00/00/rBEABF5aTRiAEuHwAAAABHf4XZU322.txt

http://192.168.175.104/group1/M00/00/00/rBEABF5aTRiAEuHwAAAABHf4XZU322.txt

http://192.168.175.105/group2/M00/00/00/rBEABl5aUAqAXLCZAAAABHf4XZU043.txt

http://192.168.175.106/group2/M00/00/00/rBEABl5aUAqAXLCZAAAABHf4XZU043.txt

说明:各台storage server的ip地址后面跟着上传时所返回的地址。注意:只能访问各台机器所在的group,

  • 如果想通过统一的ip地址进行访问

  • 需要在Nginx中通过upstream访问到后端的机器

  • 此Nginx应运行在tracker上

(2)配置nginx.conf

[root@0268c2dc2bf6 ~]# vi /usr/local/soft/nginx/conf/nginx.conf

内容:

添加 upstream到后端的storage。

upstream fdfs_group1 {

server 192.168.175.103:80 weight=1 max_fails=2 fail_timeout=30s;

server 192.168.175.104:80 weight=1 max_fails=2 fail_timeout=30s;

}

upstream fdfs_group2 {

server 192.168.175.105:80 weight=1 max_fails=2 fail_timeout=30s;

server 192.168.175.106:80 weight=1 max_fails=2 fail_timeout=30s;

}

针对带有group的url进行处理

location /group1 {

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_pass http://fdfs_group1;

expires 30d;

}

location /group2 {

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_pass http://fdfs_group2;

expires 30d;

}

(3)重启测试

[root@0268c2dc2bf6 ~]# /usr/local/soft/nginx/sbin/nginx -s stop

[root@0268c2dc2bf6 ~]# /usr/local/soft/nginx/sbin/nginx

面试资料整理汇总

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

成功从小公司跳槽进蚂蚁定级P7,只因刷了七遍这些面试真题

这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。

面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了

在这里祝大家能够拿到心仪的offer!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

p://fdfs_group1;

expires 30d;

}

location /group2 {

proxy_next_upstream http_502 http_504 error timeout invalid_header;

proxy_pass http://fdfs_group2;

expires 30d;

}

(3)重启测试

[root@0268c2dc2bf6 ~]# /usr/local/soft/nginx/sbin/nginx -s stop

[root@0268c2dc2bf6 ~]# /usr/local/soft/nginx/sbin/nginx

面试资料整理汇总

[外链图片转存中…(img-FtvRUQ72-1715477065350)]

[外链图片转存中…(img-OofQ8C3i-1715477065350)]

这些面试题是我朋友进阿里前狂刷七遍以上的面试资料,由于面试文档很多,内容更多,没有办法一一为大家展示出来,所以只好为大家节选出来了一部分供大家参考。

面试的本质不是考试,而是告诉面试官你会做什么,所以,这些面试资料中提到的技术也是要学会的,不然稍微改动一下你就凉凉了

在这里祝大家能够拿到心仪的offer!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 26
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值