目录
- 第一章 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的官方网址
官方网址:点击打开
第二章 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*
查看配置文件:
[root@caochenlei fastdfs-6.06]# ll /etc/fdfs/
拷贝其它配置:
[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
检查监控信息:
[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
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
地址格式,举例如下图:
查看上传后的数据文件:
[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
注意问题:
- 没有搭建集群默认只有一个组group1
- 后缀名包含-m的为属性文件(meta)
- 在Linux中并没有磁盘一说,M00是虚拟的,它其实就是data目录
- 现在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
第三章 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
复制完的效果如下图:
依次打开启动虚拟机:
注意:启动后使用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
使用连接工具进行连接:
3.2、架构目标
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