机器准备:这里省略Keepalived,这里是在docker中安装,使用虚拟机安装步骤是一样的
机器IP | 用途 | 组 |
---|---|---|
172.33.0.4 | Tracker1 | |
172.33.0.5 | Tracker1 | |
172.33.0.6 | Storage11和Nginx | group1 |
172.33.0.7 | Storage12 和Nginx | group1 |
172.33.0.8 | Storage21和Nginx | group2 |
172.33.0.9 | Storage22和Nginx | group2 |
172.33.0.10 | 外部访问Nginx |
部署架构图
Tracker1和Tracker1都安装如下方式安装
修改tracker.conf
#设置tracker的数据文件和日志目录(需手动创建)
base_path = /data/fastdfs
#启用配置文件
disabled=false
#设置tracker的端口号
port=22122
#设置http端口号
http.server_port = 8080
=======================额外配置===================================
因为在本地搭建,所以为了存储空间充足,需要修改一下保留空间
修改为100M,也可以修改为1%,避免fastdfs报错,实际生产环境根据情况修改
=================================================================
reserved_storage_space = 100M
启动
1. 默认配置文件目录/etc/fdfs
$ /etc/init.d/fdfs_trackerd start
2. 也可以指定配置
$ fdfs_trackerd /etc/fdfs/tracker.conf start
3. 确认启动是否成功
$ ps -ef|grep fdfs
root 16 1 0 05:13 ? 00:00:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
root 60 36 0 05:28 pts/0 00:00:00 grep fdfs
4. 查看端口22122是否开始监听
$ netstat -unltp | grep fdfs
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 16/fdfs_trackerd
查看tracker日志是否启动成功
$ cat /data/fastdfs/logs/trackerd.log
INFO - FastDFS v6.06, base_path=/data/fastdfs ......
外部Nginx配置,主要用于代理Storage
#设置group1的服务器
upstream fdfs_group1 {
server 172.33.0.6:8888 weight=1 max_fails=2 fail_timeout=30s;
server 172.33.0.7:8888 weight=1 max_fails=2 fail_timeout=30s;
}
#设置group2的服务器
upstream fdfs_group2 {
server 172.33.0.8:8888 weight=1 max_fails=2 fail_timeout=30s;
server 172.33.0.9:8888 weight=1 max_fails=2 fail_timeout=30s;
}
# Storage代理配置
server {
listen 80;
server_name www.fastdfs.com;
location ~/group1/M00 {
proxy_pass http://fdfs_group1;
}
location ~/group2/M00 {
proxy_pass http://fdfs_group2;
}
}
Storage11和Storage11的group_name=group1
,Storage21和Storage22的group_name=group2
修改storage.conf
# 组名(第一组为group1,第二组为group2,依次类推...)
group_name=group1
# 数据和日志文件存储根目录
base_path=/data/fastdfs
#第一个存储目录,第二个存储目录起名为:store_path1=xxx,其它存储目录名依次类推...
store_path0 =/data/fastdfs
# 存储路径个数,需要和store_path个数匹配
store_path_count=1
# tracker服务器IP和端口
tracker_server = tracker-storage1:22122
tracker_server = tracker-storage2:22122
# 端口号与nginx配置保持一致
http.server_port = 8888
=======================额外配置===================================
因为在本地搭建,将生成的子目录变为1,默认256,实际生产环境根据情况修改
=================================================================
subdir_count_per_path = 1
启动
#1. 默认配置文件目录/etc/fdfs
$ /etc/init.d/fdfs_storaged start
#2. 也可以指定配置
$ fdfs_storaged /etc/fdfs/storage.conf start
#3. 查看端口23000是否开始监听
$ netstat -unltp | grep fdfs
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 18/fdfs_storaged
查看日志
$ cat /data/fastdfs/logs/storage.log
[2022-04-17 14:21:58] INFO - file: storage_sync_func.c, line: 114, successfully connect to storage server 172.33.0.7:23000
验证storage是否登记到tracker服务器
#1. 在任一存储节点上使用如下命令查看集群的状态信息
$ fdfs_monitor /etc/fdfs/storage.conf
Group 1:
group name = group1
Storage 1:
id = 172.33.0.6
ip_addr = 172.33.0.6 ACTIVE
......
Storage 2:
id = 172.33.0.7
ip_addr = 172.33.0.7 ACTIVE
......
Group 2:
group name = group2
Storage 1:
id = 172.33.0.8
ip_addr = 172.33.0.8 ACTIVE
......
Storage 2:
id = 172.33.0.9
ip_addr = 172.33.0.9 ACTIVE
......
# 2. 出现以上ACTIVE,表示tracker、storage等配置都完成并成功启动
fastdfs-nginx-module模块只需要安装到storage上(Storage下需要安装Nginx)
安装
#1. 解压
$ tar -zxvf fastdfs-nginx-module-1.22.tar.gz -C /usr/local/ && cp /usr/local/fastdfs-nginx-module-1.22/src/mod_fastdfs.conf /etc/fdfs
$ tar -zxvf openssl-1.1.1d.tar.gz -C /usr/local/ \
&& tar -zxvf openresty-1.15.8.2.tar.gz -C /usr/local/
#2. 编译openresty
$ cd /usr/local/openresty-1.15.8.2/ \
&& ./configure --with-http_v2_module --with-http_ssl_module --with-openssl=/usr/local/openssl-1.1.1d --add-module=/usr/local/fastdfs-nginx-module-1.22/src/ && make && make install
#3. 创建storage存储目录
在/data/fastdfs/ 文件存储目录下创建软连接,将其链接到实际存放数据的目录
$ mkdir -p /data/fastdfs/ && ln -s /data/fastdfs/ /data/fastdfs/M00
#4. 查看版本
$ /usr/local/openresty/nginx/sbin/nginx -V
nginx version: openresty/1.15.8.2
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-23) (GCC)
built with OpenSSL 1.1.1d 10 Sep 2019
TLS SNI support enabled
configure arguments: --prefix=/usr/local/openresty/nginx --with-cc-opt=-O2 --add-module=../ngx_devel_kit-0.3.1rc1 --add-module=../echo-nginx-module-0.61 --add-module=../xss-nginx-module-0.06 --add-module=../ngx_coolkit-0.2 --add-module=../set-misc-nginx-module-0.32 --add-module=../form-input-nginx-module-0.12 --add-module=../encrypted-session-nginx-module-0.08 --add-module=../srcache-nginx-module-0.31 --add-module=../ngx_lua-0.10.15 --add-module=../ngx_lua_upstream-0.07 --add-module=../headers-more-nginx-module-0.33 --add-module=../array-var-nginx-module-0.05 --add-module=../memc-nginx-module-0.19 --add-module=../redis2-nginx-module-0.15 --add-module=../redis-nginx-module-0.3.7 --add-module=../rds-json-nginx-module-0.15 --add-module=../rds-csv-nginx-module-0.09 --add-module=../ngx_stream_lua-0.0.7 --with-ld-opt=-Wl,-rpath,/usr/local/openresty/luajit/lib --with-http_v2_module --with-http_ssl_module --with-openssl=/usr/local/openssl-1.1.1d --add-module=/usr/local/fastdfs-nginx-module-1.22/src --with-stream --with-stream_ssl_module --with-stream_ssl_preread_module
修改fastdfs-nginx-module模块配置,配置文件/etc/fdfs/mod_fastdfs.conf
=================group1下的Storage11和Storage12配置============
# 日志根目录
base_path=/data/fastdfs
tracker_server = tracker-storage1:22122
tracker_server = tracker-storage2:22122
#storage服务器的端口号
storage_server_port=23000
#当前服务器的group名
group_name=group1
#文件url中是否有group名
url_have_group_name = true
#存储路径个数,需要和store_path个数匹配
store_path_count=1
#存储路径
store_path0=/data/fastdfs
#设置组的个数
group_count = 2
# 两个组的具体信息
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs
=================group2下的Storage21和Storage22配置============
# 日志根目录
base_path=/data/fastdfs
tracker_server = tracker-storage1:22122
tracker_server = tracker-storage2:22122
#storage服务器的端口号
storage_server_port=23000
#当前服务器的group名
group_name=group2
#文件url中是否有group名
url_have_group_name = true
#存储路径个数,需要和store_path个数匹配
store_path_count=1
#存储路径
store_path0=/data/fastdfs
#设置组的个数
group_count = 2
# 两个组的具体信息
[group1]
group_name=group1
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs
[group2]
group_name=group2
storage_server_port=23000
store_path_count=1
store_path0=/data/fastdfs
配置Storage下的Nginx,如查下载时如发现报 404,将 nginx.conf 第一行 user nobody 修改为 user root 后重新启动。
1. 复制fastdfs的配置文件到/etc/fdfs
$ cp /usr/local/fastdfs-6.06/conf/http.conf /usr/local/fastdfs-6.06/conf/mime.types /etc/fdfs
2. 添加www_fastdfs_com.conf
server {
# 该端口与storage.conf中的http.server_port相同(默认是8888)
listen 8888;
server_name localhost;
location ~/group[0-9]/ {
#alias指定的目录后面必须加/
#alias /data/fastdfs/;
ngx_fastdfs_module;
}
}
上传测试,在Tracker1或者Tracker2下修改配置文件/etc/fastdfs/client.conf
1. 配置client.conf
base_path = /data/fastdfs #日志存放路径
tracker_server = tracker-storage1:22122
tracker_server = tracker-storage2:22122
http.tracker_server_port=8080
2. 执行上传文件,返回路径说明上传成功
$ fdfs_upload_file /etc/fdfs/client.conf /root/huge-8.jpeg
group1/M00/00/00/rCEAB2JcwIaAcHSaAAAP7hHA5R078.jpeg
访问测试
直接访问Storage11和Storage12
http://172.33.0.6:8888/group1/M00/00/00/rCEAB2JcwIaAcHSaAAAP7hHA5R078.jpeg
http://172.33.0.7:8888/group1/M00/00/00/rCEAB2JcwIaAcHSaAAAP7hHA5R078.jpeg
直接访问Storage21和Storage22
http://172.33.0.8:8888/group1/M00/00/00/rCEAB2JcwIaAcHSaAAAP7hHA5R078.jpeg
http://172.33.0.9:8888/group1/M00/00/00/rCEAB2JcwIaAcHSaAAAP7hHA5R078.jpeg
通过外部Nginx访问(需要配置hosts 172.33.0.10 www.fastdfs.com)
http://www.fastdfs.com/group1/M00/00/00/rCEAB2JcwIaAcHSaAAAP7hHA5R078.jpeg
服务端开启token验证
1. 在Storage节点
$ 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=/root/403.html
参考http://www.simlinux.com/archives/484.html
FastDFS 服务器端运行时目录结构
${base_path}
|__data:存放状态文件
|__logs:存放日志文件
tracker server 目录及文件结构:
${base_path}
|__data
| |__storage_groups_news.dat:存储分组信息
| |__storage_servers_news.dat:存储服务器列表
|__logs
|__trackerd.log:tracker server 日志文件
Storage Server目录以及文件结构
├── 00 一级目录:默认256个存放数据文件的目录,如:00, 1F
│ └── 00 二级目录:默认256个存放数据文件的目录
│ ├── rCEAB2JcwIaAcHSaAAAP7hHA5R078.jpeg
│ ├── rCEABmJcCheAR9K6AAANWAFNsYE948.cfg
│ ├── rCEABmJcEkmAIPnxAAAAsK3ye6o.bashrc
│ ├── rCEABmJcHkaASL44AAANWAFNsYE065.cfg
│ ├── rCEABmJcIyKAM8VnAAAa05JR_k066.jpeg
│ └── rCEABmJcv5aAKI9mAAAAsK3ye6o.bashrc
├── fdfs_storaged.pid
├── storage_stat.dat 当前storage server统计信息
└── sync
├── 172.33.0.7_23000.mark
├── binlog.000 存放更新操作记录(日志)
└── binlog_index.dat