简介

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

出现如下即为成功
成功上传.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即成功
fastdfs模块成功加载.png

文章名: 《分布式文件系统FastDFS搭建》

文章链接:https://www.isisy.com/1080.html

除特别注明外,文章均为深度博客所创,转载时请注明本文出处及文章链接
Last modification:February 23rd, 2021 at 04:06 pm
如果觉得我的文章对你有用,请随意赞赏