FastDFS环境搭建
# 一、准备工作
# 1、更新系统
yum update
# 2、安装C/C++编译环境
yum -y install gcc gcc-c++
2
3
4
# 二、准备安装包到服务器相应位置
- 1、FastDFS依赖程序:libfastcommon-1.0.7.zip
- 2、FastDFS安装包:FastDFS_v5.05.tar.gz
- 3、nginx安装包:nginx-1.19.2.tar.gz
- 4、nginx和fastdfs的桥梁插件模块:fastdfs-nginx-module_v1.16.tar.gz
# 三、安装 libfastcommon
#1、切换到软件包所在位置:
cd /usr/local/src
#2、解压安装包:
unzip libfastcommon-1.0.7.zip
#3、编译并安装:
cd libfastcommon-1.0.7
./make.sh
./make.sh install
cp /usr/lib64/libfastcommon.so /usr/lib
2
3
4
5
6
7
8
9
# 四、创建数据存储目录
# 1、使用mkdir -p 递归创建文件夹;
# 2、先创建共有的父目录,方便后面tab提示,减少错误:
mkdir -p /usr/local/FastDFS
# 3、创建数据存储目录
mkdir -p /usr/local/FastDFS/tracker /usr/local/FastDFS/storage /usr/local/FastDFS/client
2
3
4
5
# 五、安装FastDFS
# 1、解压安装包;
tar -zxf FastDFS_v5.05.tar.gz
# 2、编译并安装,复制配置文件到安装位置:
cd FastDFS
./make.sh
./make.sh install
cd conf
cp * /etc/fdfs
2
3
4
5
6
7
8
# 六、配置tracker,并启动tracker
# 1、打开配置文件
vim /etc/fdfs/tracker.conf
# 2、可以使用vi命令 / 进行查询,/base_path + 回车键查询定位;
# 3、vi命令下,yy 复制当前行;
# 4、p 命令 粘贴;
# 5、进入vi编辑模式,注销原来的base_path配置做为备份,并修改自己的为:
base_path=/usr/local/FastDFS/tracker
# 6、启动tracker:
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
2
3
4
5
6
7
8
9
# 七、配置storage,并启动storage
# 1、vi /etc/fdfs/storage.conf
# 2、定位以下配置位置,备份原来的并添加自己的:
base_path=/usr/local/FastDFS/storage
store_path0=/usr/local/FastDFS/storage
tracker_server = 192.168.100.151:22122
# 3、启动storage节点:
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
2
3
4
5
6
7
ps: tracker_server这里可以配置公网IP,也可以配置内网IP, 如果要通过公网访问远程服务器的fastDFS那需要配置成公网IP, 但是其他地方如client.conf中扔使用内网地址即可; 修改为公网IP后记得服务器开放相应的端口;
# 八、配置客户端配置文件
# 1、
vi /etc/fdfs/client.conf
# 2、
base_path=/usr/local/FastDFS/client
# 3、
tracker_server=localhost:22122
# 4、从编译完的FastDFS目录复制libfastclient.so 到/usr/lib目录:
cd /usr/local/src/FastDFS/client
cp libfastclient.so /usr/lib
# 5、测试上传:
/usr/bin/fdfs_test /etc/fdfs/client.conf upload fo.jpg
2
3
4
5
6
7
8
9
10
11
6、直接在目录中验证文件是否上传,测试上传后控制台会有如下输出:
This is FastDFS client test program v5.05
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.csource.org/
for more detail.
[2020-09-17 15:05:14] DEBUG - base_path=/usr/local/FastDFS/client, connect_timeout=30, 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=175.24.127.8, port=23000
group_name=group1, ip_addr=175.24.127.8, port=23000
storage_upload_by_filename
group_name=group1, remote_filename=M00/00/00/rBEABV9jCqqAF4hGAAEvkSAUs_A611.jpg
source ip address: 172.17.0.5
file timestamp=2020-09-17 15:05:14
file size=77713
file crc32=538227696
example file url: http://175.24.127.8/group1/M00/00/00/rBEABV9jCqqAF4hGAAEvkSAUs_A611.jpg
storage_upload_slave_by_filename
group_name=group1, remote_filename=M00/00/00/rBEABV9jCqqAF4hGAAEvkSAUs_A611_big.jpg
source ip address: 172.17.0.5
file timestamp=2020-09-17 15:05:14
file size=77713
file crc32=538227696
example file url: http://175.24.127.8/group1/M00/00/00/rBEABV9jCqqAF4hGAAEvkSAUs_A611_big.jpg
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
根据上面内容中的的remote_filename=M00/00/00/rBEABV9jCqqAF4hGAAEvkSAUs_A611_big.jpg 就可以在第7步storage配置中的base_path下的data/00/00/00/rBEABV9jCqqAF4hGAAEvkSAUs_A611_big.jpg找到相应位置了; 为了防止别人扫描,后面追加token实现FastDFS防盗链;
# 九、安装Nginx(在线安装依赖版)
# 9.1安装Nginx 依赖环境
- 1、yum install -y gcc-c++ (已安装)
- 2、yum install -y pcre pcre-devel
- 3、yum install -y zlib zlib-devel
- 4、yum install -y openssl openssl-devel
# 9.2配置nginx和fastdfs的桥梁插件模块
1、解压文件
tar -zxf fastdfs-nginx-module_v1.16.tar.gz
2、修改fastdfs-nginx-module/src/config配置文件:
- a、vim fastdfs-nginx-module/src/config
- b、把CORE_INCS="CORE_INCS /usr/local/include/fastdfs /usr/include/fastcommon/"修改为:CORE_INCS="CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
- c、把CORE_LIBS="CORE_LIBS -L/usr/local/lib -lfastcommon -lfdfsclient" 修改为:CORE_LIBS="CORE_LIBS -L/usr/lib -lfastcommon -lfdfsclient"
3、复制fastdfs-nginx-module/src/mod_fastdfs.conf 到/etc/fdfs目录下;
cp fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
4、修改/etc/fdfs/mod_fastdfs.conf
vi /etc/fdfs/mod_fastdfs.conf
找到以下内容并配置成对应的值(很多都是默认值不需要修改,这里主要是确认)
- a、tracker_server=localhost:22122
- b、url_have_group_name = true
- c、storage_server_port=23000
- d、group_name=group1
- e、store_path0=/usr/local/FastDFS/storage
# 9.3安装Nginx
1、tar -zxf nginx-1.19.2.tar.gz
2、cd nginx-1.19.2
3、配置Nginx编译模块,--with-stream 支持stream,可以做数据库端口转发; --with-http_ssl_module支持https请求;
--add-module添加自己的模块,这里是fastdfs的桥梁插件,后面的路径跟上面9.2解压的插件路径即可(注意是到解压后文件的src文件)
./configure --with-stream --with-http_ssl_module --add-module=/usr/local/src/fastdfs-nginx-module/src/
4、编译并安装(如果是覆盖安装的话,记得备份原来的nginx.conf)
make & make install
2
3
4
5
6
7
8
9
10
# 9.4配置nginx
1、vim /usr/local/nginx/conf/nginx.conf
2、在server中追加
location /group1/M00/{
ngx_fastdfs_module;
}
主要内容如下,原有配置根据自己情况设置:
server{
listen 80;
server_name localhost;
location /group1/M00/{
ngx_fastdfs_module;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
# 9.5重启或者启动nginx
1、启动:
/usr/local/nginx/sbin/nginx
2、重启:
/usr/local/nginx/sbin/nginx -s reload
2
3
4
5
# 9.6 测试网络地址
找到步骤8中的地址测试:
http://175.24.127.8/group1/M00/00/00/rBEABV9jCqqAF4hGAAEvkSAUs_A611_big.jpg
截止此单机器的分布式文件储存系统已经安装完成,下面介绍多节点安装,网络结构如下图所示:
# 十、多节点安装配置
如上面图中所示,如果想多节点其实就是再安装storage而已,那么安装步骤即:
# tracke_server开启对外访问端口22122
firewall-cmd --zone=public --add-port=22122/tcp --permanent
# 重启以启用
firewall-cmd --reload
# 新节点storage开启存储节点端口
firewall-cmd --zone=public --add-port=23000/tcp --permanent
# 重启以启用
firewall-cmd --reload
2
3
4
5
6
7
8
9
其中配置storage环节中的 tracker_server 配置要使用tracker_server的IP地址(局域网或者公网IP)
# 十一、配置token防盗链
FastDFS扩展模块内置了通过token来实现防盗链的功能。开启防盗链后,访问文件是需要在url中加两个参数:token和ts。ts为时间戳,token为系统根据时间戳和密码生成的信物。
- 配置http访问,开启防盗链检查
# 11.1 修改配置文件
vim /etc/fdfs/http.conf
http.anti_steal.check_token=true #开启防盗链检查
http.anti_steal.token_ttl=900 #修改token过期时间
http.anti_steal.secret_key=123456 #防盗链密码
#配置拒绝访问后显示的图片 该路径需确定可访问,否则nginx无法启动
http.anti_steal.token_check_fail=/etc/fdfs/anti-steal.jpg
2
3
4
5
6
7
8
9
10
# 11.2 配置完成后,重启nginx
./nginx -s reload
# 11.3 项目中引入fastdfs-client依赖
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27</version>
</dependency>
2
3
4
5
6
# 11.4 项目中配置文件修改fdfs配置, 增加secretKey
# 分布式文件系统FDFS配置
fdfs:
#socket连接超时时长
soTimeout: 1500
#连接tracker服务器超时时长
connectTimeout: 6000
#nginx访问地址
reqHost: http://192.168.0.100
#nginx访问端口
reqPort: 80
#secretKey
secretKey: 123456
#缩略图生成参数,可选
thumbImage:
width: 150
height: 150
pool:
max-total: 200 #连接池最大数量
max-total-per-key: 50 #每个tracker地址的最大连接数
max-wait-millis: 5000 #连接耗尽时等待获取连接的最大毫秒数
#TrackerList参数,支持多个,我这里只有一个,如果有多个在下方加- x.x.x.x:port
trackerList:
- 192.168.0.100:22122
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 11.5 工具类中添加获取token防盗链方法
@Component
public class FileDfsUtil {
private static String resHost;
private static String secretKey;
@Value("${fdfs.reqHost}")
public void setResHost(String resHost) {
FileDfsUtil.resHost = resHost;
}
@Value("${fdfs.secretKey}")
public void setSecretKey(String secretKey) {
FileDfsUtil.secretKey = secretKey;
}
/*
* @Description: 获取带有token的访问地址 生成防盗链token
* 生成链接15分钟内带有正确token值可访问,过期或参数错误则返回错误图片地址
* @param fileUrl 示例:group1/M00/00/00/wKgAyV6pPKGAdycnAAA0eGtiXxE23.jpeg
* @return 示例:http://192.168.0.201/group1/M00/00/00/wKgAyV6pPKGAdycnAAA0eGtiXxE23.jpeg?token=daf705f48490801530c29a2ae24e807e&ts=1593583311
* @Author:
* @Date:
*/
public static String getTokenUrl(String fileUrl) {
String path = StorePath.parseFromUrl(fileUrl).getPath();
//时间戳 单位为秒
int ts = (int) (System.currentTimeMillis() / 1000);
String token = "";
try {
token = ProtoCommon.getToken(path, ts, secretKey1);
} catch (Exception e) {
e.printStackTrace();
}
return resHost + "/" + fileUrl + "?token=" + token + "&ts=" + ts;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41