Ubuntu 22.04.1 LTS 安装FastFDS
2023-04-25 15:28 猎手家园 阅读(1119) 评论(1) 编辑 收藏 举报安装过程一波三折,差点被坑死!
一、简单介绍
1、FastFDS是什么?
FastDFS是阿里余庆用C语言编写的一款开源的分布式文件系统。FastDFS为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
2、FastFDS的三个角色
FastFDS的三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。客户端请求Tracker server进行文件上传、下载,通过Tracker Server调度最终由Storage Server完成文件上传和下载。
- Tracker Server 作用是负载均衡和调度,负责管理所有的Storage Server和group,每个Storage在启动后会连接Tracker Server,告知自己所属group等信息,并保持周期性心跳。通过Tracker Server在文件上传时可以根据一些策略找到Storage Server提供文件上传服务。可以将Tracker`称为追踪服务器或调度服务器。
- Storage Server 作用是文件存储,主要提供容量和备份服务;以group为单位,每个group内可以有多台 Storage Server,数据互为备份。客户端上传的文件最终存储在Storage服务器上,Storage Server没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将Storage称为存储服务器。
- Client 是上传下载数据的服务器,也就是我们自己的项目所部署在的服务器,称为客户端。
二、切换数据源
为了避免没必要的坑,强烈建议安装前切换到国内源,推荐阿里源。
直通车:https://www.cnblogs.com/hunttown/p/17352465.html
三、准备工作
FastDFS官方开源地址:happyfish100 (YuQing) (github.com)
官方安装文档:Home · happyfish100/fastdfs Wiki (github.com)
1、首页配置一个host,原因就是为了避免以后改IP带来的麻烦。
vim /etc/hosts #host 随便配 127.0.0.1 file.myfastdfs.com
2、安装环境变量
apt-get -y install git gcc g++ make automake autoconf libtool pcre2-utils libpcre2-dev zlib1g zlib1g-dev openssl libssh-dev
3、先准备几个目录
目录名根据你的喜好随便命名,如果你不想费脑细胞,就按我的来!
因为是测试环境,全部放到了root下
#安装目录 mkdir -p /usr/local/softs #跟踪器目录 mkdir -p /root/fdfs/tracker #存储目录 mkdir -p /root/fdfs/storage #客户端目录 mkdir -p /root/fdfs/client #文件目录 mkdir -p /root/fdfs/file
四、开始安装
1、安装libfastcommon
git clone https://github.com/happyfish100/libfastcommon.git --depth 1 cd libfastcommon/ #编译安装 ./make.sh ./make.sh install
说明一下 --depth 1 作用:
一般仓库文件不大时,我们都可以用这个方法git clone仓库,但问题是有时候,在仓库历史的某次commit时,有人不小心提交了1G的文件,虽然后面的commit中他把这个文件删除了,但是在.git文件夹中仍然存储着这个文件,所以如果我们克隆仓库这个仓库,会把所有的历史协作记录都clone下来,这样整个文件会非常大,其实对于我们直接使用仓库,而不是参与仓库工作的人来说,只要把最近的一次commit给clone下来就好了。这就好比一个产品有很多个版本,我们只要clone最近的一个版本来使用就行了。实现这个功能就需要用到git clone --depth=1命令
- 用 git clone --depth=1 的好处是限制 clone 的深度,不会下载 Git 协作的历史记录,这样可以大大加快克隆的速度
- depth 用于指定克隆深度,为1即表示只克隆最近一次commit
- 适合用 git clone --depth=1 的场景:你只是想clone最新版本来使用或学习,而不是参与整个项目的开发工作
2、安装libserverframe
git clone https://github.com/happyfish100/libserverframe.git --depth 1 cd libserverframe/ #编译安装 ./make.sh ./make.sh install
3、安装FastDFS
git clone https://github.com/happyfish100/fastdfs.git --depth 1 cd fastdfs/ #编译安装 ./make.sh ./make.sh install #配置文件准备 cp /usr/local/softs/fastdfs/conf/http.conf /etc/fdfs/ #供nginx访问使用 cp /usr/local/softs/fastdfs/conf/mime.types /etc/fdfs/ #供nginx访问使用
4、安装fastdfs-nginx-module
git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1
cp /usr/local/softs/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs
五、配置(以下配置均为单机部署)
1、配置FastDFS跟踪器(Tracker)
cd /etc/fdfs
vim tracker.conf
# 提供服务的端口 port=22122 # Tracker 数据和日志目录地址(根目录必须存在,子目录会自动创建) base_path=/root/fdfs/tracker # HTTP 服务端口 http.server_port=80 # 其它配置默认即可
启动 Tracker
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf
查看是否启动成功
netstat -tunpl | grep fdfs
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2543/fdfs_trackerd
2、配置FastDFS存储(Storage)
cd /etc/fdfs
vim storage.conf
# storage server 服务端口 port=23000 # Storage 数据和日志目录地址(根目录必须存在,子目录会自动生成) base_path=/root/fdfs/storage # 如果不配置 store_path0,那它就和 base_path 对应的路径一样。 store_path0=/root/fdfs/file # tracker_server 的列表 ,会主动连接 tracker_server # 有多个 tracker server 时,每个 tracker server 写一行 tracker_server=file.myfastdfs.com:22122 # 访问端口 http.server_port=80 # 其它配置默认即可
启动 Storage
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf
查看是否启动成功
netstat -tunpl | grep fdfs tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 2543/fdfs_trackerd tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 2629/fdfs_storaged
查看Storage和Tracker是否在通信
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
server_count=1, server_index=0
tracker server is 127.0.1.1:22122
group count: 1
Group 1:
group name = group1
disk total space = 18,974 MB
disk free space = 8,944 MB
trunk free space = 0 MB
storage server count = 1
active server count = 1
storage server port = 23000
storage HTTP port = 80
store path count = 1
subdir count per path = 256
current write server index = 0
current trunk file id = 0Storage 1:
id = 127.0.0.1
ip_addr = 127.0.0.1 ACTIVE
http domain =
version = 6.9.4
join time = 2023-04-25 03:07:04
up time = 2023-04-25 03:07:04
total storage = 18,974 MB
free storage = 8,944 MB
upload priority = 10
注意查看上文红色加粗的部分!
3、配置客户端(Client)
cd /etc/fdfs
vim client.conf
# Client 的数据和日志目录 base_path=/root/fdfs/client # Tracker端口 tracker_server=file.myfastdfs.com:22122 # 其它配置默认即可
4、文件上传测试
我们先在 /root/mysource 目录下上传一张名为 1001688.jpg 的图片
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/mysource/1001688.jpg
上传完成后返回结果:group1/M00/00/00/fwAAAWRHRsOAeZKaAAjHBJUWbtk118.jpg
文件ID由:group、存储目录、两级子目录、file_id、文件后缀名(由客户端指定,主要用于区分文件类型)拼接而成。
文件保存位置:/root/fdfs/file/data/00/00
文件最终访问路径:http://file.myfastdfs.com/group1/M00/00/00/fwAAAWRHRsOAeZKaAAjHBJUWbtk118.jpg
但是在浏览器中还不能够直接访问文件,需要配置nginx。
六、安装nignx
nginx安装直通车:https://www.cnblogs.com/hunttown/p/17352390.html
先看完这里再安装nginx
FastFDS有一个nginx模块 fastdfs-nginx-module
它的作用是:
FastDFS通过Tracker服务器,将文件放在Storage服务器存储,但是同组存储服务器之间需要进行文件复制,有同步延迟的问题。
假设Tracker服务器将文件上传到了192.168.30.1,上传成功后文件ID已经返回给客户端。
此时FastDFS存储集群机制会将这个文件同步到同组存储192.168.30.2,在文件还没有复制完成的情况下,客户端如果用这个文件ID在192.168.30.2上取文件,就会出现文件无法访问的错误。
而fastdfs-nginx-module可以重定向文件链接到源服务器取文件,避免客户端由于复制延迟导致的文件无法访问错误。
因此,在编译 nginx 时,要加入这个配置:--add-module=/usr/local/softs/fastdfs-nginx-module/src/
完整编译参数:
./configure --prefix=/usr/local/nginx \ --with-pcre \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-http_gunzip_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_stub_status_module \ --with-http_auth_request_module \ --with-http_image_filter_module \ --with-http_slice_module \ --with-mail \ --with-threads \ --with-file-aio \ --with-stream \ --with-mail_ssl_module \ --with-stream_ssl_module \ --add-module=/usr/local/softs/fastdfs-nginx-module/src/
其它的都一样!
七、测试
1、在启动 nginx 前先配置一下:mod_fastdfs
cd /etc/fdfs
vim mod_fastdfs.conf
# 连接超时时间 connect_timeout=10 # Tracker Server tracker_server=file.myfastdfs.com:22122 # StorageServer 默认端口 storage_server_port=23000 # 如果文件ID的uri中包含/group**,则要设置为true url_have_group_name = true # Storage 配置的store_path0路径,必须和storage.conf中的一致 store_path0=/root/fdfs/file # 其它配置默认即可
2、配置 nginx.conf
在80端口下添加fastdfs-nginx模块:
location ~/group([0-9])/ {
ngx_fastdfs_module;
}
注意:listen 80端口值是要与 /etc/fdfs/storage.conf 中的 http.server_port=80 相对应。如果改成其它端口,则需要统一。
有一点要特别注意:
如果你是在 root 下运行的,那么nginx启动权限要设置成 root,否则会报:Nginx 13: Permission denied 的错误
附:nginx.conf
user root; worker_processes 1; error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name file.myfastdfs.com; location / { root html; index index.html index.htm; } location ~/group([0-9])/ { ngx_fastdfs_module; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
3、启动 nginx
/usr/local/nginx/sbin/nginx
如果下方打印有:ngx_http_fastdfs_set pid=xxx 的日志,说明配置成功!
4、浏览器访问
由于域名 file.myfastdfs.com 是我们随意写的,所以需要在我们的windows系统中配置一下hosts
如果你是在ubuntu系统中直接访问可以忽略这步。因为我的ubuntu系统只是一个服务器,不带桌面功能。
# 192.168.30.244 是ubuntu内网ip 192.168.30.244 file.myfastdfs.com
然后在浏览器中输入上面的地址即可!
http://file.myfastdfs.com/group1/M00/00/00/fwAAAWRHRsOAeZKaAAjHBJUWbtk118.jpg
到此,全部结束!