简介
FastDFS是一款开源的轻量级分布式文件系统纯C实现,支持Linux、FreeBSD等UNIX系统类google FS,不是通用的文件系统,只能通过专有API访问,目前提供了C、Java和PHP API为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性FastDFS可以看做是基于文件的key value pair存储系统,称作分布式文件存储服务更为合适。
相关介绍
Tracker-Server:
跟踪服务器, 主要做调度工作, 起负载均衡的作用。 在内存中记录集群中所有存储组和存储服务器的状态信息, 是客户端和数据服务器交互的枢纽。 相比GFS中的master更为精简, 不记录文件索引信息, 占用的内存量很少。
Storage-Server:
存储服务器( 又称:存储节点或数据服务器) , 文件和文件属性(Meta Data) 都保存到存储服务器上。 Storage server直接利用OS的文件系统调用管理文件。
Group:
组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的Storage Server之间是对等的, 文件上传、 删除等操作可以在任意一台Storage Server上进行 。
Meta Data:
文件相关属性,键值对( Key Value Pair) 方式,如:width=1024,heigth=768
单机文件系统的对比
文件系统 | 高可用 | 扩展 | 部署复杂程度 | 性能 |
---|---|---|---|---|
单机文件系统 | 低,依赖于单机服务器,只要服务器崩溃,完全不可用。 | 低,要扩容只能停机增加硬盘。 | 低 | 当文件数量多到一定的程度,磁盘IO寻址操作将会成为瓶颈 |
分布式文件系统 | 高,一个group内的服务器崩溃后,group内的其他storage将接管服务。 | 高,可以不停机增加group机器。 | 高,部署较复杂 | 高,通过集群或者分布式的方式分担服务器的压力。 |
适用场景
适合中小文件( 建议范围: 4KB 到 500MB ) 为载体的在线服务, 如相册网站、 视频网站、小文件存取等等。
FastDFS安装部署(单机)
此为单机服务安装部署示例,修改相关配置后也可以实现组群,单机已实现,组群还未测试。
1、安装所需依赖
yum -y install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel wget vim unzip perl
2、安装libfastcommon
大家可以直接到github上面找的到libfastcommon
,网址如下:https://github.com/happyfish100/libfastcommon
# 下载libfastcommon
git clone https://github.com/happyfish100/libfastcommon.git --depth 1
# 进入文件夹
cd libfastcommon/
# 编译安装
./make.sh && ./make.sh install
3、安装FastDFS
fastDFS也可以从github上下载。地址如下:https://github.com/happyfish100/fastdfs
cd ~
# 下载fastDFS
git clone https://github.com/happyfish100/fastdfs.git --depth 1
# 进入文件夹
cd fastdfs/
# 编译安装
./make.sh && ./make.sh install
4、添加配置文件并创建目录
4.1、切换到配置文件目录下并复制添加配置文件
cd /etc/fdfs/
# 去除所有的.sample后缀(此处为保留源文件而采用复制),可使用ll命令查看一下,若直接有相关文件可无需这步操作
cp client.conf.sample client.conf
cp storage.conf.sample storage.conf
cp storage_ids.conf.sample storage_ids.conf
cp tracker.conf.sample tracker.conf
4.2、创建文件夹,分别创建client,storage,tracker文件夹,此处为方便操作就直接在根目录下进行建立一个fastdfs文件夹
mkdir -p /fastdfs/fdfa/client
mkdir -p /fastdfs/fdfa/storage
mkdir -p /fastdfs/fdfa/tracker
5、修改相关配置文件
5.1、下面开始配置文件修改,首先修改的是client.conf
vim client.conf
下方修改为如下,后面路径为刚刚创建的client目录
base_path=/fastdfs/fdfa/client
tracker的地址与端口,这里我使用的是虚拟机,且我的tracker会和我的storage在同一台服务器启动,我的是192.168.17.130。大家这里根据实际情况修改
tracker_server=192.168.17.130:22122
5.2、下面修改storage.conf
vim storage.conf
# 配置storage目录
base_path=/fastdfs/fdfa/storage
# storage.conf已经说了如果这个路径不存在,会依照base_path.为了不出意外,我们配置一下
store_path0=/fastdfs/fdfa/storage
# 配置tracker的IP地址与端口
tracker_server=192.168.17.130:22122
# http访问文件的端口(默认8888,看情况修改,和nginx中保持一致)
http.server_port=8888
5.3、修改tracker.conf
文件
vim tracker.conf
# 修改tracker的基础路径
base_path=/fastdfs/fdfa/tracker
# 归属组设置
store_group=group1
6、启动tracker与storage
启动tracker
fdfs_trackerd /etc/fdfs/tracker.conf start
启动storage
fdfs_storaged /etc/fdfs/storage.conf start
测试图片上传,可找一张图片放在你熟知的目录下,然后在执行如下命令(此处演示的图片在root目录下)
fdfs_test /etc/fdfs/client.conf upload /root/20210206181151.png
出现如下即为成功
至此FastDFS部署搭建完成,此时可将上述命令设置为开机自启,命令如下:
vim /etc/rc.d/rc.local
# 添加如下内容
fdfs_trackerd /etc/fdfs/tracker.conf start
fdfs_trackerd /etc/fdfs/storage.conf start
# 将启动文件赋予执行权限
chmod +x /etc/rc.d/rc.local
此时还无法通过最下方给出的链接直接访问图片,这是因为Nginx还未配置,下面来配置Nginx
安装配置Nginx
此处需要你当前已安装版本的Nginx源码编译生成,可从Nginx官网下载,链接:http://nginx.org/download/
1、查看Nginx版本并下载源码及解压(若您安装的Nginx还保留了当前源码可不必再下载一遍):
cd ~
/usr/local/nginx/sbin/nginx -V
#此时我的版本为:nginx version: nginx/1.19.6,故下载1.19.6版本的源码,若你的Nginx是编译安装的,最好也记住编译安装的指令
wget http://nginx.org/download/nginx-1.19.6.tar.gz
tar -zxvf nginx-1.19.6.tar.gz
2、上面源码下载好后在下载nginx的fastdfs模块,下载地址如下:https://github.com/happyfish100/fastdfs-nginx-module/
cd ~
# 下载模块
git clone https://github.com/happyfish100/fastdfs-nginx-module.git --depth 1
3、切换到nginx压缩包的解压目录里面去,编译安装使其加载模块
cd nginx-1.19.6
# 添加模块安装(此处为我的nginx编译安装的命令,也可直接使用./configure --add-module=../fastdfs-nginx-module-master/src)
./configure --prefix=/usr/local/nginx --user=www --group=www \
--with-pcre --with-http_v2_module --with-stream --with-stream_ssl_module \
--with-stream_ssl_preread_module --with-http_stub_status_module \
--with-http_ssl_module --with-http_image_filter_module \
--with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 \
--with-http_sub_module --with-http_flv_module --with-http_addition_module \
--with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E \
--with-cc-opt=-Wno-error --with-http_dav_module \
--add-module=../fastdfs-nginx-module/src
# 编译安装
make && make install
4、复制相关配置文件至/etc/fdfs
里面去
cd ~/fastdfs-master
# 文件的复制
cp conf/http.conf /etc/fdfs/
cp conf/mime.types /etc/fdfs/
切换至fastdfs-nginx-module
的解压目录下面
cd ~/fastdfs-nginx-module-master
# 模块配置文件的复制
cp src/mod_fastdfs.conf /etc/fdfs/
5、修改/etc/fdfs
下面的mod_fastdfs.conf
配置文件
vim /etc/fdfs/mod_fastdfs.conf
# 更改tracker的ip地址与端口
tracker_server=192.168.17.130:22122
# url地址中是否包含组名
url_have_group_name = true
# storage所在目录
store_path0=/fastdfs/fdfa/storage
6 、进行nginx配置文件的修改
vim /usr/local/nginx/conf/nginx.conf
# 添加如下内容(在location / {}的括号内添加)
ngx_fastdfs_module;
示例:
server {
listen 8888; # 该端口为storage.conf中的http.server_port相同
server_name _; # 域名或IP
# 此为FastDFS读取文件配置
location ~/group([1~9])/M0([0~9]) {
ngx_fastdfs_module;
root /fastdfs/fdfa/storage/data; # 若有模块的话此处可不加也无事
}
}
# 检测配置是否有误(显示syntax is ok即为正常)
nginx -t
7、重启nginx并访问网址
systemctl restart nginx
接下来访问http://192.168.17.130:8888/group1/M00/00/00/wKgRgmAqPD6ARfeUAADx6OMJwnc660.png
,即可看到图片成功加载
PHP安装fastdfs拓展
FastDFS针对PHP提供了模块接口,可以使用其模块和PHP结合。文中PHP版本为7.3.26,下方的部分命令由于自定义设置会有所简化。
1、进入FastDFS源码目录
cd ~/fastdfs-master/php_client
# 运行phpize(简化命令,phpize在PHP安装目录的bin目录下)
phpize73
# 编译安装(后面路径填写你PHP安装目录下的相关路径)
./configure --with-php-config=/usr/local/php/73/bin/php-config
make && make install
2、修改php.ini
vim /usr/local/php/73/lib/php.ini
# 添加如下内容
[FastDFS]
extension = fastdfs_client.so
fastdfs_client.base_path = /fastdfs/fdfa/storage
fastdfs_client.connect_timeout = 2
fastdfs_client.network_timeout = 60
fastdfs_client.log_level = info
fastdfs_client.log_filename =/var/log/fastdfs_client.log
fastdfs_client.http.anti_steal_secret_key =
fastdfs_client.tracker_group_count = 1
fastdfs_client.tracker_group0 = /etc/fdfs/client.conf
fastdfs_client.use_connection_pool = true
fastdfs_client.connection_pool_max_idle_time = 3600
3、重启PHP
service php-fpm73 restart
最后使用php -m
命令或去phpinfo页面查看插件是否成功加载,出现fastdfs_client
即成功