一、单机部署
1、FastDFS 安装
1.1 环境/依赖安装
(1) 由于 FastDFS 采用 C 语言开发,需要先安装 gcc 环境,
yum install gcc-c++
(2) 安装 FastDFS 依赖 libevent 库:
yum -y install libevent
(3) 安装 FastDFS 依赖 libfastcommon 库,其中包含了 FastDFS 运行所需要的一些基础库:
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.43.tar.gz
(4) 下载好的 libfastcommon 拷贝至 /usr/local/ 目录下,然后依次执行如下命令:
cd /usr/local
tar -zxvf V1.0.43.tar.gz
cd libfastcommon-1.0.43/
./make.sh
./make.sh install
(5) FastDFS安装包下载至 /usr/local/ 目录下(Tracker 和 Storage 是相同的安装包),安装命令如下:
wget https://github.com/happyfish100/fastdfs/archive/V6.06.tar.gz
tar -zxvf V6.06.tar.gz
cd fastdfs-6.06/
./make.sh
./make.sh install
(6) 安装成功后,将安装目录内 conf 目录下的配置文件拷贝到 /etc/fdfs 目录下:
cd /usr/local/fastdfs-6.06/conf
cp ./* /etc/fdfs/
1.2 tracker 配置
(1) 进入 /etc/fdfs/ 目录配置,打开 tracker.conf 文件
vi tracker.conf
(2) 修改如下配置:
#默认端口,根据实际需求修改
port = 22122
#数据和日志目录地址,自己创建
base_path = /home/face/fastdfs
(3) Tracker 启动,停止,重启命令
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf stop
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart
1.3 storage 配置
(1) 进入到 /etc/fdfs 目录下,配置 Storage:
vi storage.conf
(2) 修改如下配置:
# 指定此 storage server 所在 组(卷)
group_name = group1
#服务端口,根据需求更改
port = 23000
# Storage 数据和日志目录地址,自己创建
base_path = /home/face/fastdfs
# 指向一个存储路径,没有配置store_path,就使用base_path的路径
store_path0 = /home/face/fastdfs
# 有多个 tracker server 时,每个 tracker server 写一行
tracker_server =192.168.0.44:22122
#tracker_server = 192.168.209.122:22122
# 和nignx监听端口设置一致
http.server_port = 80
(3) Storage 启动,停止,重启命令:
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf stop
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
2、Nginx 配置
2.1 Nginx 安装
(1) 首先下载 /解压 Nginx,目录 /usr/local/
wget http://nginx.org/download/nginx-1.17.0.tar.gz
tar -zxvf nginx-1.17.0.tar.gz
(2) 安装编译依赖:
yum -y install pcre-devel
yum -y install openssl openssl-devel
(3) 进入解压目录,进行编译
cd nginx-1.17.0
./configure
make
make install
(4) 启动命令,,重新加载
/usr/local/nginx/sbin/nginx
#或者进入安装好的nginx/sbin目录
./nginx
#修改配置之后重新加载
./nginx -s reload
#关闭
./nginx -s stop
2.2 fastdfs-nginx-module配置
(1) 首先下载,解压 fastdfs-nginx-module,目录 /usr/local/
wget https://github.com/happyfish100/fastdfs-nginx-module/archive/V1.22.tar.gz
tar -zxvf V1.22.tar.gz
(2) mod_fastdfs.conf 文件复制到 /etc/fdfs/
cd fastdfs-nginx-module-1.22/src
cp mod_fastdfs.conf /etc/fdfs/
(3) 进入/etc/fdfs/ ,修改mod_fastdfs.conf
vi /etc/fdfs/mod_fastdfs.conf
# Tracker Server
tracker_server=192.168.0.44:22122
# StorageServer 默认端口
storage_server_port=23000
# 本服务对应的组名
group_name=group1
# 如果文件ID的uri中包含/group**,则要设置为true
url_have_group_name = true
#Storage 配置的store_path0路径,必须和storage.conf中的一致
store_path0=/home/face/fastdfs
(4) 重新配置编译安装nginx
cd nginx-1.17.0
./configure --add-module=/usr/local/fastdfs-nginx-module-1.22/src
make
make install
(5) 修改 nginx 的配置文件,重启nginx
vi /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main
#添加下面这句话,将/group1/M00 映射到 /home/face/fastdfs/data
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
3、 客户端测试
(1) 首先添加maven依赖
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>
</dependency>
(2) 在项目的 resources 目录下添加 FastDFS 的配置文件 fastdfs-client.properties:
fastdfs.connect_timeout_in_seconds = 5
fastdfs.network_timeout_in_seconds = 30
fastdfs.charset = UTF-8
fastdfs.http_anti_steal_token = false
fastdfs.http_secret_key = FastDFS1234567890
fastdfs.http_tracker_http_port = 80
fastdfs.tracker_servers = 192.168.0.163:22122
(3) 文件上传测试
@Test
void testUpload() {
try {
ClientGlobal.initByProperties("fastdfs-client.properties");
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient1 client = new StorageClient1(trackerServer, storageServer);
//添加基本的元数据,添加name,date,length
NameValuePair nvp[] = null;
//上传到文件系统
String fileId = client.upload_file1("D:\\Works\\1.png", "png",
nvp);
log.info(fileId);
} catch (Exception e) {
e.printStackTrace();
}
}
浏览器输入ip加上打印的地址,能够预览图片:
http://192.168.0.44/group2/M00/00/00/wKgALF5uz3GASF7xAAdzw9FfMec793.png
(4) 文件下载测试
@Test
void testDownload() {
try {
ClientGlobal.initByProperties("fastdfs-client.properties");
TrackerClient tracker = new TrackerClient();
TrackerServer trackerServer = tracker.getConnection();
StorageServer storageServer = null;
StorageClient1 client = new StorageClient1(trackerServer, storageServer);
byte[] bytes = client.download_file1("group1/M00/00/00/wKhbgF5aMteAWy0gAAJkI7-2yGk361.png");
FileOutputStream fos = new FileOutputStream(new File("D:\\Works\\666.png"));
fos.write(bytes);
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
}
4、权限设置(防盗链)
4.1 服务端开启token验证
(1) 修改http.conf配置文件
vim /etc/fdfs/http.conf
# 设置为true表示开启token验证
http.anti_steal.check_token=true
# 设置token失效的时间单位为秒(s)
http.anti_steal.token_ttl=1800
# 密钥,跟客户端配置文件的fastdfs.http_secret_key保持一致
http.anti_steal.secret_key=FASTDFS1234567890
# 如果token检查失败,返回的页面
http.anti_steal.token_check_fail=/home/face/page/403.html
(2) 配置完成重启服务端
cd /usr/local/nginx/sbin
./nginx -s stop
./nginx
4.2 客户端生成token
(1) 客户端参数配置
# 开启防盗链功能
fastdfs.http_anti_steal_token=true
# 密钥和服务器保持一致
fastdfs.http_secret_key=FASTDFS1234567890
(2) 生成token
@Test
public void getToken() throws Exception {
int ts = (int) Instant.now().getEpochSecond();
//地址里边不包含 group信息
String token = ProtoCommon.getToken("M00/00/00/wKgALF5uz3GASF7xAAdzw9FfMec793.png", ts, "FastDFS1234567890");
StringBuilder sb = new StringBuilder();
sb.append("?token=").append(token);
sb.append("&ts=").append(ts);
System.out.println(sb.toString());
}
浏览器输入地址加token可以访问,不加token会访问失败:
http://192.168.0.44/group2/M00/00/00/wKgALF5uz3GASF7xAAdzw9FfMec793.png?token=d3911e92b5360b6569fa51153e4c0eed&ts=1584320377
二、集群部署
1、服务器规划
IP地址 | 主机角色(主机名) |
---|---|
192.168.0.44 | 跟踪服务器1(Tracker-01)+ 存储服务器1(Storage-group1-01) |
192.168.0.163 | 跟踪服务器2(Tracker-02)+存储服务器2(Storage-group2-01) |
192.168.0.164 | 存储服务器3(Storage-group1-02) |
192.168.0.165 | 存储服务器4(Storage-group2-02) |
2、FastDFS安装
2.1 环境/依赖安装
安装和单机部署一模一样,不一样的就是配置文件。详情参考[FastDFS安装](#1.1 环境/依赖安装)
2.2 tracker配置
和单机部署一致,详情参考[1.2 tracker 配置](#1.2 tracker 配置)
2.3 storage配置
vim /etc/fdfs/storage.conf
其他配置一致,下面三个不同:
# 192.168.0.44/192.168.0.164属于group1,192.168.0.163/192.168.0.165属于group2
group_name = group1
# storage的端口号,同一个组(group)的 storage 端口号必须相同
port = 23000
# 有多个 tracker server 时,每个 tracker server 写一行
tracker_server =192.168.0.44:22122
tracker_server = 192.168.0.163:22122
Notes:group名是否对应和tracker_server需要多条添加!
2.4 启动服务
#启动tracker服务(只在tracker服务器上面执行也就是192.168.0.44和192.168.0.163)
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
#启动storaged服务(所有服务器都执行)
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
3、Nginx 配置
和单机部署一致,详情参考[2、Nginx 配置](#2、Nginx 配置)。
三、扩容
1、基于group模式的文件存储扩容(不推荐)
原理: 扩充group的存储空间,配置多个存储文件目录地址,增加sotre_path数量
(1) 修改 storage.conf
vi /etc/fdfs/storage.conf
# 默认是1,增加磁盘,修改字段
store_path_count = 2
# store_path0默认是base_path,添加磁盘增加对应路径store_pathX
store_path0 = /home/face/fastdfs
store_path1 = /home/face/fastdfs2
(2) 修改 mod_fastdfs.conf(修改内容和storage一致)
# 默认是1,增加磁盘,修改字段
store_path_count = 2
# store_path0默认是base_path,添加磁盘增加对应路径store_pathX
store_path0 = /home/face/fastdfs
store_path1 = /home/face/fastdfs2
(3) 修改修改nginx/conf/nginx.conf配置文件
location ~/group([0-9])/M00 {
#增加store_path1的访问代理
root /home/face/fastdfs2/data;
ngx_fastdfs_module;
}
2、单台服务器一个tracker多个storage
Notes::没有扩容作用,只有多分组作用。
(1) 创建新的storagex.conf
cp /etc/fdfs/storage.conf /etc/fdfs/storage2.conf
(2) 修改toragex.conf配置文件
详情参考[1.3 storage 配置](#1.3 storage 配置),注意port、group、base_path、store_path0区分。
(3) 修改mod_fastdfs.conf配置文件
# 修改组名,多个用/区分开
group_name=group1/group2
# 设置组个数
group_count = 2
# 设置每一组信息
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/home/face/fastdfs
[group2]
group_name=group2
storage_server_port=23002
store_path_count=1
store_path0=/home/face2/fastdfs
3、基于storage模式的文件存储扩容
原理: 新增一台服务器,创建新的storage与原来存在的storage不属于同一个组,设置为同一个组并不能扩容,只是备份的效果。
(1) 安装步骤参考单机部署[FastDFS安装](#1.1 环境/依赖安装)
(2) storage配置参考集群配置[2.3 storage配置](#2.3 storage配置)
(3) 启动服务
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start
(4) Nginx 配置和单机部署一致,详情参考[2、Nginx 配置](#2、Nginx 配置)。
四、注意
1、所有修改配置的操作,都需要重启对应的服务器
2、错误信息可以查看日志,有storaged.log和trackerd.log,对应路径是设置的存储路径(/home/face/fastdfs/logs)
3、tracker配置文件相关扩展
#工作线程数,最好和cpu核数保持一致
work_threads=4
#选择上传文件模式 0代表group轮询 1指定特定group 2选择空间最大的group
store_lookup=0
#上传文件组,如果模式为1,则必须设置成核特定group一致的组名
#store_group=
#选择存储服务器上传文件 0代表轮询,1根据通过IP第的顺序 2通过优先级
store_server=0
#选择哪块存储盘上传文件 0代表轮询,2代表优先最大存储空间盘(路径)
store_path=0
#选择哪台存储服务器下载文件0代表轮询,1代表当前文件上传的源服务器
download_server=0