图床项目常见问题回顾
FastDFS是一个开源的轻量级 分布式文件系统,它对文件进行管理。
功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了 大容量存储和 负载均衡的问题。
特别适合以 文件 为载体的在线服务,如相册网站、视频网站等等。
Nginx环境搭建
git clone https://github.com/happyfish100/libfastcommon.git
cd libfastcommon
git checkout V1.0.50
./make.sh
./make.sh install
git clone https://github.com/happyfish100/libfastcommon.git
cd libfastcommon
git checkout V1.0.50
./make.sh
./make.sh install
FastDFS服务有三个⻆⾊: 跟踪服务器(tracker server)、 存储服务器(storage server) 和 客户端(client)
Tracker是FastDFS的协调者,负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知⾃⼰所属的group等信息,并保持周期性的⼼跳,tracker根据storage的⼼跳信息,建⽴group==>[storage server list]的映射表。
Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息⽣成的,本身不需要持久化任何数据,这样使得tracker⾮常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster⾥每个tracker之间是完全对等的, 所有的tracker都接受stroage的⼼跳信息,⽣成元数据信息来提供读写服务。
Storage server(后简称storage)以组(卷,group或volume)为单位组织,⼀个group内包含多台storage机器,数据互为备份,存储空间以group内容量最⼩的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。
以group为单位组织存储能⽅便的进⾏应⽤隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),⽐如将不同应⽤数据存到不同的group就能隔离应⽤数据,同时还可根据应⽤的访问特性来将应⽤分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内地其他机器,使得恢复时间会很⻓。
group内每个storage的存储依赖于本地⽂件系统,storage可配置多个数据存储⽬录,⽐如有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个⽬录都配置为storage的数据存储⽬录。
storage接受到写⽂件请求时,会根据配置好的规则,选择其中⼀个存储⽬录来存储⽂件。为了避免单个⽬录下的⽂件数太多,在storage第⼀次启动时,会在每个数据存储⽬录⾥创建2级⼦⽬录,每级256个,总共65536个⽂件,新写的⽂件会以hash的⽅式被路由到其中某个⼦⽬录下,然后将⽂件数据直接作为⼀个本地⽂件存储到该⽬录中。
FastDFS向使⽤者提供基本⽂件访问接⼝,⽐如monitor、upload、download、append、delete等,以客户端库的⽅式提供给⽤户使⽤
# 创建 Tracker 的存储⽇志和数据的根⽬录
mkdir -p /home/fastdfs/tracker
cd /etc/fdfs
cp tracker.conf.sample tracker.conf
# 配置 tracker.conf
vim tracker.conf
在这⾥,tracker.conf 只是修改⼀下 Tracker 存储⽇志和数据的路径
# 启⽤配置⽂件(默认为 false,表示启⽤配置⽂件)
disabled=false
# Tracker 服务端⼝(默认为 22122)
port=22122
# 存储⽇志和数据的根⽬录
base_path=/home/fastdfs/tracker
主要修改 base_path 路径
# 创建 Storage 的存储⽇志和数据的根⽬录
mkdir -p /home/fastdfs/storage
cd /etc/fdfs
cp storage.conf.sample storage.conf
# 配置 storage.conf
vim storage.conf
在这里,storage.conf 只是修改⼀下 storage 存储⽇志和数据的路径
主要修改:base_path、store_path0、tracker_server
Tracker 服务器 IP 地址和端⼝,单机搭建时也不要写 127.0.0.1
tracker_server 可以多次出现,如果有多个,则配置多个
tracker_server=192.168.198.128:22122
# 启⽤配置⽂件(默认为 false,表示启⽤配置⽂件)
disabled=false
# Storage 服务端⼝(默认为 23000)
port=23000
# 数据和⽇志⽂件存储根⽬录
base_path=/home/fastdfs/storage
# 存储路径,访问时路径为 M00
# store_path1 则为 M01,以此递增到 M99(如果配置了多个存储⽬录的话,这⾥只指定 1 个)
store_path0=/home/fastdfs/storage
# Tracker 服务器 IP 地址和端⼝,单机搭建时也不要写 127.0.0.1
# tracker_server 可以多次出现,如果有多个,则配置多个
tracker_server=192.168.198.128:22122
# 设置 HTTP 访问⽂件的端⼝。这个配置已经不⽤配置了,配置了也没什么⽤
# 这也是为何 Storage 服务器需要 Nginx 来提供 HTTP 访问的原因
http.server_port=8888
# 启动 Tracker 服务
# 其它操作则把 start 改为 stop、restart、reload、status 即可。Storage 服务相同
/etc/init.d/fdfs_trackerd start
#停⽌:
/etc/init.d/fdfs_trackerd stop
#重启 :
/etc/init.d/fdfs_trackerd restart
# 启动 Storage 服务
/etc/init.d/fdfs_storaged start
#停⽌:
/etc/init.d/fdfs_storagedstop
#重启 :
/etc/init.d/fdfs_storagedrestart
可以通过对应服务的端⼝查看服务是否正常启动(如果是云服务器,注意要开放对应端口)
lsof -i:22122
lsof -i:23000
可以通过 fdfs_monitor 查看集群的情况
# 查看 Storage 是否已经注册到 Tracker 服务器中
# 当查看到 ip_addr = 192.168.198.128: (localhost.localdomain) ACTIVE
# ACTIVE 表示成功
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
# 修改 Tracker 服务器客户端配置⽂件
mkdir -p /home/fastdfs/client
cp /etc/fdfs/client.conf.sample /etc/fdfs/client.conf
vim /etc/fdfs/client.conf
client.conf 中修改 base_path 和 Tracker 服务器的 IP 地址与端⼝号即可
主要修改base_path 和 tracker_server
# 存储⽇志⽂件的基本路径
base_path=/home/fastdfs/client
# Tracker 服务器 IP 地址与端⼝号
tracker_server=192.168.198.128:22122
# 格式: /usr/bin/fdfs_upload_file 配置⽂件 要上传的⽂件
# 存储到 FastDFS 服务器中
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf ./client.conf
当返回⽂件 ID 号,如 group1/M00/00/00/ctepQmIWJTCAcldiAAAHuj79dAY04.conf
则表示上传成功
如果报错:tracker_query_storage fail, error no: 2, error info: No such file or directory,⼀般都是因为路径没有设置对。可以
tail -f /home/fastdfs/storage/logs/storaged.log
查看⽂件路径
root@iZbp1d83xkvoja33dm7ki2Z:/home/fastdfs/storage/data/00/00# pwd
/home/fastdfs/storage/data/00/00
# 格式: /usr/bin/fdfs_download_file 配置⽂件 要下载的⽂件
fdfs_download_file /etc/fdfs/client.conf
group1/M00/00/00/ctepQmIWJTCAcldiAAAHuj79dAY04.conf
# 格式: /usr/bin/fdfs_delete_file 配置⽂件 要删除的⽂件
fdfs_delete_file /etc/fdfs/client.conf
group1/M00/00/00/ctepQmIWJTCAcldiAAAHuj79dAY04.txt
查看⽂件是否已经被删除,可以进去/home/fastdfs/storage/data/00/00路径查看刚才的⽂件是否被删除
以上则完成了 FastDFS 的安装与配置,可以使⽤ api 来完成⽂件的上传、同步和下载。
当然,接下来我们还会安装 Nginx。⽬的如下:
为避免端⼝直接的冲突,建议备份原有的nginx服务。
⽐如进⼊到/usr/local/⽬录,
mv nginx bk-nginx-20220223
注意:全部安装条件在确保之前的FastDFS 的tracker、storage和client可以正常使⽤。
模块包源码包本地下载路径:模块包源码
git clone https://github.com/happyfish100/fastdfs-nginx-module.git
cd fastdfs-nginx-module
git checkout V1.22
pwd
/home/hewei/桌面/20.源码/fastdfs-nginx-module
./configure --prefix=/usr/local/nginx --with-http_addition_module --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_v2_module --with-http_gzip_static_module --with-http_secure_link_module --with-stream --with-pcre=../pcre-8.44 --with-zlib=../zlib-1.2.11 --with-openssl=../openssl-1.1.1g --add-module=/home/hewei/桌面/20.源码/fastdfs-nginx-module/src
其中/home/hewei/桌面/20.源码/fastdfs-nginx-module/src 是刚才下载的的fastdfs_nginx_module模块的绝对路径,就是在编译Nginx时候,连同这个模块⼀起编译。
编译时, 出现以下信息表示添加成功。
vim objs/Makefile
添加
ALL_INCS = -I src/core \
-I /usr/include/fastdfs \
-I /usr/include/fastcommon \
-I src/event \
-I src/event/modules \
make
make install
hewei@ubuntu:~/桌面/20.源码/fastdfs-nginx-module/src$ ls
common.c common.h config mod_fastdfs.conf ngx_http_fastdfs_module.c
hewei@ubuntu:~/桌面/20.源码/fastdfs-nginx-module/src$ pwd
/home/hewei/桌面/20.源码/fastdfs-nginx-module/src
将fastdfs-nginx-module/src/mod_fastdfs.conf 拷⻉到/etc/fdfs/下:
cp mod_fastdfs.conf /etc/fdfs/
fastdfs的部分配置⽂件到 /etc/fdfs
cd /home/hewei/桌面/20.源码/fastdfs # 为fastdfs源码路径
cp conf/http.conf /etc/fdfs/
cp conf/mime.types /etc/fdfs/