学习FastDFS这一篇就够了 ╰+攻爆jí腚メ 2022-12-04 07:40 658阅读 0赞 ### 目录 ### * * 第一章 FastDFS简介 * * 1.1、FastDFS的简介 * 1.2、FastDFS的发展历史 * 1.3、FastDFS的整体架构 * 1.4、FastDFS的使用用户 * 1.5、FastDFS的官方网址 * 第二章 FastDFS单实例部署 * * 2.1、环境准备 * 2.2、安装依赖 * 2.3、安装libfastcommon库 * 2.4、安装FastDFS * 2.5、配置FastDFS * 2.6、启动FastDFS * 2.7、重启FastDFS * 2.8、测试FastDFS * 2.9、关闭FastDFS * 2.10、开启FastDFS外部访问 * 第三章 FastDFS高可用集群 * * 3.1、环境准备 * 3.2、架构目标 * 3.3、tracker配置 * 3.4、storage配置 * 3.5、mod\_fastdfs配置 * 3.6、安装两个tracker上的nginx * 3.7、启动所有服务进行测试 * 3.8、统一访问路径 * 3.9、如何保证主nginx高可用 * 第四章 FastDFS的JavaAPI * * 4.1、工程搭建 * 4.2、上传文件 * 4.3、下载文件 * 4.4、删除文件 -------------------- **配套资料,免费下载** 链接:https://pan.baidu.com/s/17n\_VVnk0geU\_fv3789\_6Tg 提取码:kzvy 复制这段内容后打开百度网盘手机App,操作更方便哦 ## 第一章 FastDFS简介 ## ### 1.1、FastDFS的简介 ### FastDFS是一个开源的轻量级分布式文件系统,为互联网应用量身定做,简单、灵活、高效,采用C语言开发,由阿里巴巴开发并开源。 FastDFS对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载、文件删除)等,解决了大容量文件存储的问题,特别适合以文件为载体的在线服务,如相册网站、文档网站、图片网站、视频网站等等。 FastDFS充分考虑了冗余备份、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。 ### 1.2、FastDFS的发展历史 ### * 2008年4月项目正式启动 * 2008年7月推出V1.00 * 2010年8月推出V2.00 * 2011年6月推出V3.00 * 2012年10月推出V4.00 * 2013年12月推出V5.00 * 2019年10月推出V6.00 FastDFS系统架构从第一个版本发布后一直没有大的调整,高版本完全兼容低版本的数据,可以做到平滑升级,推荐更新升级到最新版本。 ### 1.3、FastDFS的整体架构 ### FastDFS文件系统由两大部分构成,一个是客户端,一个是服务端。 客户端通常指我们的程序,比如我们的Java程序去连接FastDFS、操作FastDFS,那我们的Java程序就是一个客户端,FastDFS提供专有API访问,目前提供了C、Java和PHP几种编程语言的API,用来访问FastDFS文件系统。 服务端由两个部分构成:一个是跟踪器(tracker),一个是存储节点(storage)。 跟踪器(tracker)主要做调度工作,在内存中记录集群中存储节点storage的状态信息,是前端Client和后端存储节点storage的枢纽。因为相关信息全部在内存中,Tracker server的性能非常高,一个较大的集群(比如上百个group)中有3台就足够了。 存储节点(storage)用于存储文件,包括文件和文件属性(meta data)都保存到存储服务器磁盘上,完成文件管理的所有功能:文件存储、文件同步和提供文件访问等。 ### 1.4、FastDFS的使用用户 ### * UC(http://www.uc.cn/) * 支付宝(http://www.alipay.com/) * 京东商城(http://www.jd.com/) * 淘淘搜(http://www.taotaosou.com/) * 飞信(http://feixin.10086.cn/) * 赶集网(http://www.ganji.com/) * 淘米网(http://www.61.com/) * 迅雷(http://www.xunlei.com/) * 蚂蜂窝(http://www.mafengwo.cn/) * 5173(http://www.5173.com/) * 华师京城教育云平台(http://www.hsjdy.com.cn/) * 视友网(http://www.cuctv.com/) * 搜道网(http://www.sodao.com/) * 58同城(http://www.58.com/) * 商务联盟网(http://www.biz72.com/) * 中青网(http://www.youth.cn/) * 保利威视(http://www.freeovp.com/) * 梦芭莎(http://www.moonbasa.com/) * 51CTO(http://www.51cto.com/) * 搜房网(http://www.soufun.com/) ### 1.5、FastDFS的官方网址 ### 官方网址:[点击打开][Link 1] ## 第二章 FastDFS单实例部署 ## ### 2.1、环境准备 ### * 虚拟机的版本:VMware-workstation-full-15.5.6-16341506.exe * 系统镜像版本:CentOS-6.10-x86\_64-bin-DVD1.iso,全新安装,桌面版,可上网 * 系统内存大小:512MB,这里修改小点,方便后边集群复制 * 系统硬盘大小:20GB * 连接工具版本:SecureCRTSecureFX\_HH\_x64\_7.0.0.326.zip ### 2.2、安装依赖 ### [root@caochenlei ~]# yum install -y gcc gcc-c++ perl perl-devel openssl openssl-devel pcre pcre-devel zlib zlib-devel libevent libevent-devel ### 2.3、安装libfastcommon库 ### **下载:** [root@caochenlei ~]# wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz **解压:** [root@caochenlei ~]# tar -zxvf V1.0.43.tar.gz **切换:** [root@caochenlei ~]# cd libfastcommon-1.0.43 **编译:** [root@caochenlei libfastcommon-1.0.43]# ./make.sh **安装:** [root@caochenlei libfastcommon-1.0.43]# ./make.sh install [root@caochenlei libfastcommon-1.0.43]# cd ~ ### 2.4、安装FastDFS ### **下载:** [root@caochenlei ~]# wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz **解压:** [root@caochenlei ~]# tar -zxvf V6.06.tar.gz **切换:** [root@caochenlei ~]# cd fastdfs-6.06 **编译:** [root@caochenlei fastdfs-6.06]# ./make.sh **安装:** [root@caochenlei fastdfs-6.06]# ./make.sh install **查看可执行文件:** [root@caochenlei fastdfs-6.06]# ll /usr/bin/fdfs* ![image-20200905183808335][] **查看配置文件**: [root@caochenlei fastdfs-6.06]# ll /etc/fdfs/ ![image-20200905184005284][] **拷贝其它配置:** [root@caochenlei fastdfs-6.06]# cd conf [root@caochenlei conf]# cp http.conf /etc/fdfs/ [root@caochenlei conf]# cp mime.types /etc/fdfs/ [root@caochenlei conf]# cd /etc/fdfs/ [root@caochenlei fdfs]# mv client.conf.sample client.conf [root@caochenlei fdfs]# mv storage.conf.sample storage.conf [root@caochenlei fdfs]# mv storage_ids.conf.sample storage_ids.conf [root@caochenlei fdfs]# mv tracker.conf.sample tracker.conf ### 2.5、配置FastDFS ### **配置 tracker :** 修改tracker.conf的以下几项配置项:vi tracker.conf * \#配置tracker存储数据的目录 * base\_path = /opt/fastdfs/tracker 创建相对应的文件夹: [root@caochenlei fdfs]# mkdir -p /opt/fastdfs/tracker **配置 storage :** 修改storage.conf的以下几项配置项:vi storage.conf * \#storage存储数据目录 * base\_path = /opt/fastdfs/storage * \#真正存放文件的目录 * store\_path0 = /opt/fastdfs/storage/files * \#注册当前存储节点的跟踪器地址 * tracker\_server = 192.168.239.128:22122 创建相对应的文件夹: [root@caochenlei fdfs]# mkdir -p /opt/fastdfs/storage [root@caochenlei fdfs]# mkdir -p /opt/fastdfs/storage/files ### 2.6、启动FastDFS ### **启动 tracker :** [root@caochenlei fdfs]# fdfs_trackerd /etc/fdfs/tracker.conf **启动 storage :** [root@caochenlei fdfs]# fdfs_storaged /etc/fdfs/storage.conf **查看启动情况:** [root@caochenlei fdfs]# ps -ef | grep fdfs ![image-20200905201134490][] **检查监控信息:** [root@caochenlei fdfs]# fdfs_monitor /etc/fdfs/storage.conf **查看数据目录:** [root@caochenlei fdfs]# ls /opt/fastdfs/storage/files/data/ ### 2.7、重启FastDFS ### **重启 tracker :** [root@caochenlei fdfs]# fdfs_trackerd /etc/fdfs/tracker.conf restart waiting for pid [32335] exit ... starting ... **重启 storage :** [root@caochenlei fdfs]# fdfs_storaged /etc/fdfs/storage.conf restart waiting for pid [32375] exit ... starting ... **查看启动情况:** [root@caochenlei fdfs]# ps -ef | grep fdfs ![image-20200905202624605][] ### 2.8、测试FastDFS ### **配置 client :** 修改client.conf的以下几项配置项:vi client.conf * \#client存储数据目录 * base\_path = /opt/fastdfs/client * \#注册当前存储节点的跟踪器地址 * tracker\_server = 192.168.239.128:22122 创建相对应的文件夹: [root@caochenlei fdfs]# mkdir -p /opt/fastdfs/client **创建 a.txt :** [root@caochenlei fdfs]# echo "Hello,FastDFS" > a.txt **上传 a.txt :** > 格式:fdfs\_test /etc/fdfs/client.conf upload 文件路径 [root@caochenlei fdfs]# fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/a.txt This is FastDFS client test program v6.06 Copyright (C) 2008, Happy Fish / YuQing FastDFS may be copied only under the terms of the GNU General Public License V3, which may be found in the FastDFS source kit. Please visit the FastDFS Home Page http://www.fastken.com/ for more detail. [2020-09-05 20:39:01] DEBUG - base_path=/opt/fastdfs/client, connect_timeout=5, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0 tracker_query_storage_store_list_without_group: server 1. group_name=, ip_addr=192.168.239.128, port=23000 group_name=group1, ip_addr=192.168.239.128, port=23000 storage_upload_by_filename group_name=group1, remote_filename=M00/00/00/wKjvgF9ThuWAGUrIAAAADtHNnrs806.txt source ip address: 192.168.239.128 file timestamp=2020-09-05 20:39:01 file size=14 file crc32=3519913659 example file url: http://192.168.239.128/group1/M00/00/00/wKjvgF9ThuWAGUrIAAAADtHNnrs806.txt storage_upload_slave_by_filename group_name=group1, remote_filename=M00/00/00/wKjvgF9ThuWAGUrIAAAADtHNnrs806_big.txt source ip address: 192.168.239.128 file timestamp=2020-09-05 20:39:01 file size=14 file crc32=3519913659 example file url: http://192.168.239.128/group1/M00/00/00/wKjvgF9ThuWAGUrIAAAADtHNnrs806_big.txt > 注意:group\_name、remote\_filename **地址格式,举例如下图:** ![image-20200905205221928][] **查看上传后的数据文件:** [root@caochenlei fdfs]# ll /opt/fastdfs/storage/files/data/00/00/ 总用量 16 -rw-r--r--. 1 root root 14 9月 5 20:39 wKjvgF9ThuWAGUrIAAAADtHNnrs806_big.txt -rw-r--r--. 1 root root 49 9月 5 20:39 wKjvgF9ThuWAGUrIAAAADtHNnrs806_big.txt-m -rw-r--r--. 1 root root 14 9月 5 20:39 wKjvgF9ThuWAGUrIAAAADtHNnrs806.txt -rw-r--r--. 1 root root 49 9月 5 20:39 wKjvgF9ThuWAGUrIAAAADtHNnrs806.txt-m **删除 a.txt :** > 格式:fdfs\_delete\_file /etc/fdfs/client.conf (group\_name)/(remote\_filename) [root@caochenlei fdfs]# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKjvgF9ThuWAGUrIAAAADtHNnrs806.txt [root@caochenlei fdfs]# ll /opt/fastdfs/storage/files/data/00/00/ 总用量 8 -rw-r--r--. 1 root root 14 9月 5 20:39 wKjvgF9ThuWAGUrIAAAADtHNnrs806_big.txt -rw-r--r--. 1 root root 49 9月 5 20:39 wKjvgF9ThuWAGUrIAAAADtHNnrs806_big.txt-m [root@caochenlei fdfs]# fdfs_delete_file /etc/fdfs/client.conf group1/M00/00/00/wKjvgF9ThuWAGUrIAAAADtHNnrs806_big.txt [root@caochenlei fdfs]# ll /opt/fastdfs/storage/files/data/00/00/ 总用量 0 ### 2.9、关闭FastDFS ### **关闭 tracker :** [root@caochenlei fdfs]# fdfs_trackerd /etc/fdfs/tracker.conf stop waiting for pid [32441] exit ... pid [32441] exit. **关闭 storage :** [root@caochenlei fdfs]# fdfs_storaged /etc/fdfs/storage.conf stop waiting for pid [32453] exit ... pid [32453] exit. **查看启动情况:** [root@caochenlei fdfs]# ps -ef | grep fdfs > 注意问题: 1. 没有搭建集群默认只有一个组group1 2. 后缀名包含-m的为属性文件(meta) 3. 在Linux中并没有磁盘一说,M00是虚拟的,它其实就是data目录 4. 现在FastDFS已经安装完成,但现在外部还不能访问,有两大原因:一是防火墙未关闭、二是FastDFS默认不支持外部访问,想要访问需要继续往下学习 ### 2.10、开启FastDFS外部访问 ### **启动 tracker :** [root@caochenlei fdfs]# fdfs_trackerd /etc/fdfs/tracker.conf **启动 storage :** [root@caochenlei fdfs]# fdfs_storaged /etc/fdfs/storage.conf **关闭防火墙:** [root@caochenlei fdfs]# service iptables stop [root@caochenlei fdfs]# chkconfig iptables off **回退根目录:** [root@caochenlei fdfs]# cd ~ **Nginx依赖:** [root@caochenlei ~]# yum install -y gcc gcc-c++ make libtool wget pcre pcre-devel zlib zlib-devel openssl openssl-devel **Nginx下载:** [root@caochenlei ~]# wget http://nginx.org/download/nginx-1.18.0.tar.gz **Nginx解压:** [root@caochenlei ~]# tar -zxvf nginx-1.18.0.tar.gz **fastdfs-nginx-module下载:** [root@caochenlei ~]# wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz **fastdfs-nginx-module解压:** [root@caochenlei ~]# tar -zxvf V1.22.tar.gz #查看一下拓展模块所在路径,后边会用到这个路径 [root@caochenlei ~]# cd fastdfs-nginx-module-1.22/src/ [root@caochenlei src]# pwd /root/fastdfs-nginx-module-1.22/src #回退到根目录,方便接下来的一系列安装 [root@caochenlei src]# cd ~ **Nginx及fastdfs-nginx-module安装:** > 注意:因为这个模块必须在Nginx的安装的过程中才能添加,所有我们需要重新安装一个Nginx,为了进行区分,我们把新安装的Nginx取名为nginx\_fdfs [root@caochenlei ~]# cd nginx-1.18.0 [root@caochenlei nginx-1.18.0]# ./configure --prefix=/usr/local/nginx_fdfs --add-module=/root/fastdfs-nginx-module-1.22/src [root@caochenlei nginx-1.18.0]# make && make install > 注意:安装完成后的路径为:/usr/local/nginx\_fdfs **Nginx命令(此处了解,先不要敲呢,跳过这步):** * 普通启动服务:/usr/local/nginx\_fdfs/sbin/nginx * 配置文件启动:/usr/local/nginx\_fdfs/sbin/nginx -c /usr/local/nginx\_fdfs/conf/nginx.conf * 暴力停止服务:/usr/local/nginx\_fdfs/sbin/nginx -s stop * 优雅停止服务:/usr/local/nginx\_fdfs/sbin/nginx -s quit * 检查配置文件:/usr/local/nginx\_fdfs/sbin/nginx -t * 重新加载配置:/usr/local/nginx\_fdfs/sbin/nginx -s reload * 查看相关进程:ps -ef | grep nginx **FastDFS的Nginx访问配置:** > 将 /root/fastdfs-nginx-module-1.22/src/mod\_fastdfs.conf 拷贝到 /etc/fdfs/ 目录下,这样才能正常启动Nginx [root@caochenlei nginx-1.18.0]# cp /root/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs/ **修改mod\_fastdfs.conf配置文件:** 修改mod\_fastdfs.conf的以下几项配置项:vi /etc/fdfs/mod\_fastdfs.conf * \#mod\_fastdfs存储数据目录 * base\_path=/opt/fastdfs/nginx\_mod * \#注册当前存储节点的跟踪器地址 * tracker\_server=192.168.239.128:22122 * \#路径中是否包含分组名称,我们为true * url\_have\_group\_name=true * \#真正存放文件的目录 * store\_path0=/opt/fastdfs/storage/files 创建相对应的文件夹: [root@caochenlei nginx-1.18.0]# mkdir -p /opt/fastdfs/nginx_mod **配置Nginx的拓展模块请求转发:** [root@caochenlei nginx-1.18.0]# vi /usr/local/nginx_fdfs/conf/nginx.conf location ~ /group[1-9]/M0[0-9] { ngx_fastdfs_module; } > 注意:ngx\_fastdfs\_module; \#这个指令不是Nginx本身提供的,是扩展模块提供的,根据这个指令找到FastDFS提供的Nginx模块配置文件,然后找到Tracker,最终找到Stroager **启动带有Fastdfs模块的Nginx:** [root@caochenlei nginx-1.18.0]# /usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf ngx_http_fastdfs_set pid=35500 **上传一个文件进行测试验证:** [root@caochenlei fdfs]# fdfs_test /etc/fdfs/client.conf upload /etc/fdfs/a.txt This is FastDFS client test program v6.06 Copyright (C) 2008, Happy Fish / YuQing FastDFS may be copied only under the terms of the GNU General Public License V3, which may be found in the FastDFS source kit. Please visit the FastDFS Home Page http://www.fastken.com/ for more detail. [2020-09-05 21:41:43] DEBUG - base_path=/opt/fastdfs/client, connect_timeout=5, network_timeout=60, tracker_server_count=1, anti_steal_token=0, anti_steal_secret_key length=0, use_connection_pool=0, g_connection_pool_max_idle_time=3600s, use_storage_id=0, storage server id count: 0 tracker_query_storage_store_list_without_group: server 1. group_name=, ip_addr=192.168.239.128, port=23000 group_name=group1, ip_addr=192.168.239.128, port=23000 storage_upload_by_filename group_name=group1, remote_filename=M00/00/00/wKjvgF9TlZeAZpeTAAAADtHNnrs395.txt source ip address: 192.168.239.128 file timestamp=2020-09-05 21:41:43 file size=14 file crc32=3519913659 example file url: http://192.168.239.128/group1/M00/00/00/wKjvgF9TlZeAZpeTAAAADtHNnrs395.txt storage_upload_slave_by_filename group_name=group1, remote_filename=M00/00/00/wKjvgF9TlZeAZpeTAAAADtHNnrs395_big.txt source ip address: 192.168.239.128 file timestamp=2020-09-05 21:41:43 file size=14 file crc32=3519913659 example file url: http://192.168.239.128/group1/M00/00/00/wKjvgF9TlZeAZpeTAAAADtHNnrs395_big.txt **在虚拟机外部浏览器访问上传的文件:** > 注意:直接输入example file url: http://192.168.239.128/group1/M00/00/00/wKjvgF9TlZeAZpeTAAAADtHNnrs395.txt ![image-20200905215213209][] ## 第三章 FastDFS高可用集群 ## ### 3.1、环境准备 ### 将第二章的单实例版本复制7个(关闭FastDFS服务,再关闭系统,退出虚拟机),然后依次启动,选择我已复制虚拟机,这样就会为每一个虚拟机重新分配一块网卡,这样每天虚拟机就可以正常上网了。如果你要是有精力,你也可以按照第二章的方法,重新安装这几台机器,但是这里为了省事,直接复制了。 **学习这章电脑的环境:** 内存至少8G+ 硬盘至少255G+ **关闭服务及系统命令:** [root@caochenlei ~]# /usr/local/nginx_fdfs/sbin/nginx -s quit [root@caochenlei ~]# fdfs_trackerd /etc/fdfs/tracker.conf stop [root@caochenlei ~]# fdfs_storaged /etc/fdfs/storage.conf stop [root@caochenlei ~]# poweroff **复制完的效果如下图:** ![image-20200906090522061][] **依次打开启动虚拟机:** ![image-20200906090721672][] > 注意:启动后使用ifconfig查看当前虚拟机的IP地址 > > CentOS 6 64 bit - 副本 (1):192.168.239.136 > > CentOS 6 64 bit - 副本 (2):192.168.239.137 > > CentOS 6 64 bit - 副本 (3):192.168.239.138 > > CentOS 6 64 bit - 副本 (4):192.168.239.139 > > CentOS 6 64 bit - 副本 (5):192.168.239.140 > > CentOS 6 64 bit - 副本 (6):192.168.239.141 > > CentOS 6 64 bit - 副本 (7):192.168.239.142 **使用连接工具进行连接:** ![image-20200906095358182][] ![image-20200906095658625][] ### 3.2、架构目标 ### ![image-20200906095053224][] ### 3.3、tracker配置 ### 其实tracker已经在单实例版本的时候就配置好了,跳过就行了。 ### 3.4、storage配置 ### 每两个storage server为一组,共两个组(group1 和 group2),一个组内有两个storage server。 -------------------- **修改group1的storage1的storage.conf**:vi /etc/fdfs/storage.conf * group\_name = group1 * tracker\_server = 192.168.239.136:22122 * tracker\_server = 192.168.239.137:22122 **修改group1的storage2的storage.conf**:vi /etc/fdfs/storage.conf * group\_name = group1 * tracker\_server = 192.168.239.136:22122 * tracker\_server = 192.168.239.137:22122 -------------------- **修改group2的storage3的storage.conf**:vi /etc/fdfs/storage.conf * group\_name = group2 * tracker\_server = 192.168.239.136:22122 * tracker\_server = 192.168.239.137:22122 **修改group2的storage4的storage.conf**:vi /etc/fdfs/storage.conf * group\_name = group2 * tracker\_server = 192.168.239.136:22122 * tracker\_server = 192.168.239.137:22122 ### 3.5、mod\_fastdfs配置 ### **修改group1的nginx1的mod\_fastdfs.conf**:vi /etc/fdfs/mod\_fastdfs.conf * tracker\_server = 192.168.239.136:22122 * tracker\_server = 192.168.239.137:22122 * group\_name = group1 * group\_count = 2 * 在末尾增加2个组的具体信息: * [group1] group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/opt/fastdfs/storage/files [group2] group_name=group2 storage_server_port=23000 store_path_count=1 store_path0=/opt/fastdfs/storage/files **修改group1的nginx2的mod\_fastdfs.conf**:vi /etc/fdfs/mod\_fastdfs.conf * tracker\_server = 192.168.239.136:22122 * tracker\_server = 192.168.239.137:22122 * group\_name = group1 * group\_count = 2 * 在末尾增加2个组的具体信息: * [group1] group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/opt/fastdfs/storage/files [group2] group_name=group2 storage_server_port=23000 store_path_count=1 store_path0=/opt/fastdfs/storage/files -------------------- **修改group2的nginx3的mod\_fastdfs.conf**:vi /etc/fdfs/mod\_fastdfs.conf * tracker\_server = 192.168.239.136:22122 * tracker\_server = 192.168.239.137:22122 * group\_name = group2 * group\_count = 2 * 在末尾增加2个组的具体信息: * [group1] group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/opt/fastdfs/storage/files [group2] group_name=group2 storage_server_port=23000 store_path_count=1 store_path0=/opt/fastdfs/storage/files **修改group2的nginx4的mod\_fastdfs.conf**:vi /etc/fdfs/mod\_fastdfs.conf * tracker\_server = 192.168.239.136:22122 * tracker\_server = 192.168.239.137:22122 * group\_name = group2 * group\_count = 2 * 在末尾增加2个组的具体信息: * [group1] group_name=group1 storage_server_port=23000 store_path_count=1 store_path0=/opt/fastdfs/storage/files [group2] group_name=group2 storage_server_port=23000 store_path_count=1 store_path0=/opt/fastdfs/storage/files ### 3.6、安装两个tracker上的nginx ### **Nginx删除:** > 注意:之前已经下载了nginx安装包并解压安装了,我们先删除以前安装的,然后再安装 [root@caochenlei ~]# rm -rf /usr/local/nginx_fdfs > 注意:之前已经下载了nginx安装包并解压安装了,我们先删除以前解压的,然后再解压 **Nginx解压:** [root@caochenlei ~]# rm -rf nginx-1.18.0 [root@caochenlei ~]# tar -zxvf nginx-1.18.0.tar.gz **Nginx安装:** [root@caochenlei ~]# cd nginx-1.18.0 [root@caochenlei nginx-1.18.0]# ./configure [root@caochenlei nginx-1.18.0]# make && make install > 注意:安装完成后的路径为:/usr/local/nginx **Nginx配置:** [root@caochenlei nginx-1.18.0]# vi /usr/local/nginx/conf/nginx.conf #配置负载均衡 upstream fastdfs_storage_server { server 192.168.239.138:80; server 192.168.239.139:80; server 192.168.239.140:80; server 192.168.239.141:80; } #配置请求路径 location ~ /group[1-9]/M0[0-9] { proxy_pass http://fastdfs_storage_server; } **Nginx命令:** * 普通启动服务:/usr/local/nginx/sbin/nginx * 配置文件启动:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf * 暴力停止服务:/usr/local/nginx/sbin/nginx -s stop * 优雅停止服务:/usr/local/nginx/sbin/nginx -s quit * 检查配置文件:/usr/local/nginx/sbin/nginx -t * 重新加载配置:/usr/local/nginx/sbin/nginx -s reload * 查看相关进程:ps -ef | grep nginx ### 3.7、启动所有服务进行测试 ### **启动两个tracker:** [root@caochenlei nginx-1.18.0]# fdfs_trackerd /etc/fdfs/tracker.conf **启动四个storage:** [root@caochenlei ~]# fdfs_storaged /etc/fdfs/storage.conf **启动四个storage上的nginx:** [root@caochenlei ~]# /usr/local/nginx_fdfs/sbin/nginx -c /usr/local/nginx_fdfs/conf/nginx.conf **启动两个tracker上的nginx:** [root@caochenlei nginx-1.18.0]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf **打开浏览器,输入以下几个地址进行测试:** > 注意:wKjvgF9TlZeAZpeTAAAADtHNnrs395.txt这个文件是我们之前测试的文件,已经上传上去了 两个tracker上的访问: http://192.168.239.136/group1/M00/00/00/wKjvgF9TlZeAZpeTAAAADtHNnrs395.txt http://192.168.239.137/group1/M00/00/00/wKjvgF9TlZeAZpeTAAAADtHNnrs395.txt 四个storage上的访问: http://192.168.239.138/group1/M00/00/00/wKjvgF9TlZeAZpeTAAAADtHNnrs395.txt http://192.168.239.139/group1/M00/00/00/wKjvgF9TlZeAZpeTAAAADtHNnrs395.txt http://192.168.239.140/group1/M00/00/00/wKjvgF9TlZeAZpeTAAAADtHNnrs395.txt http://192.168.239.141/group1/M00/00/00/wKjvgF9TlZeAZpeTAAAADtHNnrs395.txt ### 3.8、统一访问路径 ### 我们需要使用一台单独的nginx为两台tracker进行负载均衡,以此达到统一访问路径。这回配置的是192.168.239.142这台机器 **Nginx删除:** > 注意:之前已经下载了nginx安装包并解压安装了,我们先删除以前安装的,然后再安装 [root@caochenlei ~]# rm -rf /usr/local/nginx_fdfs > 注意:之前已经下载了nginx安装包并解压安装了,我们先删除以前解压的,然后再解压 **Nginx解压:** [root@caochenlei ~]# rm -rf nginx-1.18.0 [root@caochenlei ~]# tar -zxvf nginx-1.18.0.tar.gz **Nginx安装:** [root@caochenlei ~]# cd nginx-1.18.0 [root@caochenlei nginx-1.18.0]# ./configure [root@caochenlei nginx-1.18.0]# make && make install > 注意:安装完成后的路径为:/usr/local/nginx **Nginx配置:** [root@caochenlei nginx-1.18.0]# vi /usr/local/nginx/conf/nginx.conf #配置负载均衡 upstream fastdfs_tracker_server { server 192.168.239.136:80; server 192.168.239.137:80; } #配置请求路径 location ~ /group[1-9]/M0[0-9] { proxy_pass http://fastdfs_tracker_server; } **Nginx命令:** * 普通启动服务:/usr/local/nginx/sbin/nginx * 配置文件启动:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf * 暴力停止服务:/usr/local/nginx/sbin/nginx -s stop * 优雅停止服务:/usr/local/nginx/sbin/nginx -s quit * 检查配置文件:/usr/local/nginx/sbin/nginx -t * 重新加载配置:/usr/local/nginx/sbin/nginx -s reload * 查看相关进程:ps -ef | grep nginx **Nginx启动:** [root@caochenlei nginx-1.18.0]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf [root@caochenlei nginx-1.18.0]# ps -ef | grep nginx root 6309 1 0 11:20 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nobody 6310 6309 0 11:20 ? 00:00:00 nginx: worker process root 6312 3016 0 11:20 pts/1 00:00:00 grep nginx **Nginx测试:** 打开浏览器,输入http://192.168.239.142/group1/M00/00/00/wKjvgF9TlZeAZpeTAAAADtHNnrs395.txt,如果看到内容证明环境已经搭建完毕! ### 3.9、如何保证主nginx高可用 ### 请您参考:学习Nginx这一篇就够了中的高可用集群如何搭建的。 原理说明:准备两台Nginx,一主一备,每一台上安装一个keepalived,由keepalived负责监测当前机器上的nginx是否可用(其实是调用一个shell脚本不停的查看进程信息),同时也会在两个keepalived之间进行心跳监测,如果主节点宕机,则从节点自动跟上,访问是通过虚拟IP进行访问的。 ## 第四章 FastDFS的JavaAPI ## > 注意:我们进行JavaAPI测试采用的是单实例版本,所以要将之前的单实例版本启动并把所有服务开启,这一步请参考第二章。还有一个问题需要注意,虚拟机的IP地址可能变化,如果一旦发生变化,那么之前配置的FastDFS就肯定不会启动成功,虽然我们会配置了,但是我们为了偷懒,临时把IP地址修改为之前的那个IP地址,命令如下(命令生效,请重启一个窗口连接): > > ifconfig eth0 192.168.239.128 netmask 255.255.255.0 ### 4.1、工程搭建 ### 工程名称:FastDFSDemo 项目依赖: * fastdfs-client-java-1.28-SNAPSHOT.jar * log4j-1.2.17.jar * slf4j-api-1.7.26.jar * slf4j-log4j12-1.7.26.jar 单元测试:Junit 4 测试包名:com.caochenlei.fastdfs.demo 配置文件:在src中创建 fdfs\_client.conf connect_timeout = 2 network_timeout = 30 charset = UTF-8 http.tracker_http_port = 8080 http.anti_steal_token = no http.secret_key = FastDFS1234567890 tracker_server = 192.168.239.128:22122 connection_pool.enabled = true connection_pool.max_count_per_entry = 500 connection_pool.max_idle_time = 3600 connection_pool.max_wait_time_in_ms = 1000 ### 4.2、上传文件 ### FastDFSDemo.java(全路径:/FastDFSDemo/src/com/caochenlei/fastdfs/demo/FastDFSDemo.java) /** * 上传文件 */ @Test public void fileUpload() { try { // 1.加载配置文件,默认去classpath下加载 ClientGlobal.init("fdfs_client.conf"); // 2.创建TrackerClient对象 TrackerClient trackerClient = new TrackerClient(); // 3.创建TrackerServer对象 TrackerServer trackerServer = trackerClient.getTrackerServer(); // 4.创建StorageServler对象 StorageServer storageServer = trackerClient.getStoreStorage(trackerServer); // 5.创建StorageClient对象,这个对象完成对文件的操作 StorageClient storageClient = new StorageClient(trackerServer, storageServer); // 6.上传文件(第一个参数:本地文件路径、第二个参数:上传文件的后缀、第三个参数:文件信息) String[] uploadArray = storageClient.upload_file("a.txt", "txt", null); for (String str : uploadArray) { System.out.println(str); } } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } } 运行结果: group1 M00/00/00/wKjvgF9UbIGAV0ioAAAAHjXTgjs092.txt ### 4.3、下载文件 ### FastDFSDemo.java(全路径:/FastDFSDemo/src/com/caochenlei/fastdfs/demo/FastDFSDemo.java) /** * 下载文件 */ @Test public void fileDownload() { try { // 1.加载配置文件,默认去classpath下加载 ClientGlobal.init("fdfs_client.conf"); // 2.创建TrackerClient对象 TrackerClient trackerClient = new TrackerClient(); // 3.创建TrackerServer对象 TrackerServer trackerServer = trackerClient.getTrackerServer(); // 4.创建StorageServler对象 StorageServer storageServer = trackerClient.getStoreStorage(trackerServer); // 5.创建StorageClient对象,这个对象完成对文件的操作 StorageClient storageClient = new StorageClient(trackerServer, storageServer); // 6.下载文件(返回0表示成功,其它均表示失败) int num = storageClient.download_file("group1", "M00/00/00/wKjvgF9UbIGAV0ioAAAAHjXTgjs092.txt", "b.txt"); System.out.println(num); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } } 运行结果: 0 ### 4.4、删除文件 ### FastDFSDemo.java(全路径:/FastDFSDemo/src/com/caochenlei/fastdfs/demo/FastDFSDemo.java) /** * 删除文件 */ @Test public void fileDelete() { try { // 1.加载配置文件,默认去classpath下加载 ClientGlobal.init("fdfs_client.conf"); // 2.创建TrackerClient对象 TrackerClient trackerClient = new TrackerClient(); // 3.创建TrackerServer对象 TrackerServer trackerServer = trackerClient.getTrackerServer(); // 4.创建StorageServler对象 StorageServer storageServer = trackerClient.getStoreStorage(trackerServer); // 5.创建StorageClient对象,这个对象完成对文件的操作 StorageClient storageClient = new StorageClient(trackerServer, storageServer); // 6.删除文件(返回0表示成功,其它均表示失败) int num = storageClient.delete_file("group1", "M00/00/00/wKjvgF9UbIGAV0ioAAAAHjXTgjs092.txt"); System.out.println(num); } catch (IOException e) { e.printStackTrace(); } catch (MyException e) { e.printStackTrace(); } } 运行结果: 0 [Link 1]: https://github.com/happyfish100/fastdfs [image-20200905183808335]: /images/20221123/dec6fd213c9245239ea30d15c22d24c9.png [image-20200905184005284]: /images/20221123/8afd9db92ba2479a80211edc156b406a.png [image-20200905201134490]: /images/20221123/091a530326f64e6ba595e7f3b677f657.png [image-20200905202624605]: /images/20221123/1596cc3ad29440468002567525b0e912.png [image-20200905205221928]: /images/20221123/e873f28b669c4ac59119602fe7f68766.png [image-20200905215213209]: /images/20221123/eccb32a56f954bbc93483bad9937f2c0.png [image-20200906090522061]: /images/20221123/8b5c0f55dd504a94868dc78b01cd431f.png [image-20200906090721672]: /images/20221123/21b7a82e837e430f8bba2a1aeaa9b0b8.png [image-20200906095358182]: /images/20221123/c1091ff88bf9467fb9994b30cd8c8252.png [image-20200906095658625]: /images/20221123/c62b120f42904f35af03e33f41ca2b5d.png [image-20200906095053224]: /images/20221123/3ca55188c4a24e92a806e5e40e98c70f.png
相关 学习Maven这一篇就够了 目录 第一章 Maven简介 1.1、Maven概述 1.2、Maven特点 1.3、Maven官网 1.4、 ╰+哭是因爲堅強的太久メ/ 2022年12月28日 05:28/ 0 赞/ 688 阅读
相关 学习jQuery这一篇就够了 目录 第一章 jQuery简介 1.1、jQuery简介 1.2、jQuery官网 1.3、jQuery版本介绍 偏执的太偏执、/ 2022年12月21日 03:08/ 0 赞/ 9 阅读
相关 学习JavaScript这一篇就够了 目录 第一章 JavaScript简介 1.1、JavaScript的起源 1.2、JavaScript的组成 1.3、Ja 痛定思痛。/ 2022年12月17日 15:55/ 0 赞/ 267 阅读
相关 学习JavaWeb这一篇就够了 目录 第一章 开发工具 1.1、JDK安装 1.2、Tomcat安装 1.3、IDEA安装 1.4、IDEA集 忘是亡心i/ 2022年12月06日 04:14/ 0 赞/ 184 阅读
相关 学习Tomcat这一篇就够了 目录 第一章 Tomcat概述 1.1、Tomcat概述 1.2、Tomcat历史 1.3、T 短命女/ 2022年12月04日 08:37/ 0 赞/ 446 阅读
相关 学习FastDFS这一篇就够了 目录 第一章 FastDFS简介 1.1、FastDFS的简介 1.2、FastDFS的发展历史 ╰+攻爆jí腚メ/ 2022年12月04日 07:40/ 0 赞/ 659 阅读
相关 学习Nginx这一篇就够了 目录 第一章 Nginx概述 1.1、Nginx概述 1.2、Nginx官网 1.3、Ngin 叁歲伎倆/ 2022年12月02日 04:24/ 0 赞/ 402 阅读
相关 学习Oracle这一篇就够了 目录 第一章 数据库概述 1.1、数据库的好处 1.2、数据库的常见概念 1.3、数据库的存储 缺乏、安全感/ 2022年11月27日 03:13/ 0 赞/ 423 阅读
相关 学习JavaScript这一篇就够了 [https://blog.csdn.net/qq\_38490457/article/details/109257751?utm\_medium=distribute.pc\ 左手的ㄟ右手/ 2022年11月21日 03:34/ 0 赞/ 303 阅读
相关 学习JDBC这一篇就够了 文章目录 一、JDBC简介 二、获取数据库连接 准备工作 1、导入驱动jar包 2、加载与注册JDBC驱 痛定思痛。/ 2022年11月18日 01:42/ 0 赞/ 352 阅读
还没有评论,来说两句吧...