1、背景

最近因为某些起因接触到了分布式存储,而像阿里云的OSS等都是须要付费的,那么有没有收费的呢?fastdfs就是一个收费的,此处记录一下如何搭建一个单机版的 fastdfs 环境。

2、fastdfs的一些常识

2.1 fastdfs的特点

  1. 分组存储,灵便简洁
  2. 对等构造,不存在单点
  3. 文件ID由FastDFS生成,作为文件拜访凭证。FastDFS不须要传统的name server
  4. 和风行的web server无缝连接,FastDFS已提供apache和nginx扩大模块
  5. 大、中、小文件均能够很好反对,反对海量小文件存储
  6. 反对多块磁盘,反对单盘数据恢复
  7. 反对雷同文件内容只保留一份,节俭存储空间
  8. 存储服务器上能够保留文件附加属性
  9. 下载文件反对多线程形式,反对断点续传

2.2 架构图

2.2.1 client 介绍

客户端,即文件上传或下载的服务器,也就是咱们本人我的项目部署的服务器。

2.2.2 tracker-server 介绍

  1. tracker-server是跟踪服务器,次要起调度作用。负责管理所有 storage server的元数据信息,比方:storage ip、port、group等信息。每个storage server在启动的时候,会向tracker server连贯,上报本人的元数据信息,并与之放弃周期性的心跳。
  2. tracker-server之间通常不会互相通信

2.2.3 storage-server 介绍

  1. storage-server是存储服务器,次要用来存储各种文件。
  2. storage-server是以Group为单位,每个Group内能够有多台storage server,同一个组内多个storage server为互为备份关系。
  3. 每个Group中的机器的存储倡议配置成一样大,否则以这个Group内容量最小的storage为准。
  4. storage server被动向tracker server报告状态信息

2.3 fastdfs须要装置的软件

依赖库备注
libfatscommon根底库-fastdfs分离出来的公共函数
libserverframe根底库-网络框架库
FastDFSfastdfs本地
fastdfs-nginx-modulefastdfs与nginx整合模块
nginxnginx

2.4 为什么须要fastdfs-nginx-module

其实这个次要是因为,同一个group中存在多个storage server,而多个storage server之间会存在文件同步,那么可能就会呈现 同步提早 问题。
比方:
咱们存在2台storage server,别离是 storageA 和 storageB。

FastDFS通过Tracker服务器,将文件放入到了storageA服务器存储。上传胜利后将 文件ID 返回给客户端。此时FastDFS存储集群机制会将这个文件同步到同组存储storageB,在文件还没有复制实现的状况下,客户端如果用这个文件ID在storageB上取文件,就会呈现文件无法访问的谬误。而fastdfs-nginx-module能够重定向文件连贯到源服务器取文件,防止客户端因为同步提早导致的文件无法访问谬误。

2.5 fastdfs的一些材料

  1. fastdfs 源码地址 https://github.com/happyfish100/
  2. fastdfs官方论坛 http://bbs.chinaunix.net/forum.php?mod=forumdisplay&fid=240&filter=typeid&typeid=424
  3. fastdfs 配置文件解释 http://bbs.chinaunix.net/thread-1941456-1-1.html
  4. fastdfs ppt介绍 http://bbs.chinaunix.net/thread-1958475-1-1.html
  5. fastdfs faq http://bbs.chinaunix.net/thread-1920470-1-1.html

3、fastdfs软件装置

3.1 前置条件

3.1.1 依赖库装置

yum install git gcc gcc-c++ make automake autoconf libtool pcre pcre-devel zlib zlib-devel openssl-devel -y

3.1.2 fastdfs源码所在目录

[[email protected] fastdfs]# pwd/opt/fastdfs[[email protected] fastdfs]# lsfastdfs-6.09.tar.gz  fastdfs-nginx-module-1.23.tar.gz  libfastcommon-1.0.61.tar.gz  libserverframe-1.1.20.tar.gz  nginx-1.22.0.tar.gz[[email protected] fastdfs]#

3.1.3 tracker 和 storage server

此处因为是fastdfs单机装置,因而 tracker server 和 storage server 装置到同一台机器上。

3.2 装置根底库-libfatscommon

[[email protected] fastdfs]# cd /opt/fastdfs[[email protected] fastdfs]# tar -zxvf libfastcommon-1.0.61.tar.gz[[email protected] fastdfs]# cd libfastcommon-1.0.61[[email protected] libfastcommon-1.0.61]# ./make.sh && ./make.sh install[[email protected] fdfs]# ls /usr/lib64 | grep libfastcommon.solibfastcommon.so[[email protected] fdfs]# ls /usr/lib | grep libfastcommon.solibfastcommon.so

3.3 装置根底库-libserverframe

[[email protected] fastdfs]# cd /opt/fastdfs[[email protected] fastdfs]# tar -zxvf libserverframe-1.1.20.tar.gz[[email protected] fastdfs]# cd libserverframe-1.1.20[[email protected] libfastcommon-1.0.61]# ./make.sh && ./make.sh install[[email protected] fdfs]# ls /usr/lib | grep libserverframe.solibserverframe.so[[email protected] fdfs]# ls /usr/lib64 | grep libserverframe.solibserverframe.so

3.4 装置fastdfs

[[email protected] fastdfs]# cd /opt/fastdfs[[email protected] fastdfs]# tar -zxvf fastdfs-6.09.tar.gz[[email protected] fastdfs]# cd fastdfs-6.09[[email protected] fastdfs-6.09]# ./make.sh && ./make.sh install

3.4.1 默认配置文件地位

[[email protected] fdfs]# cd /etc/fdfs/[[email protected] fdfs]# lltotal 32-rw-r--r--. 1 root root  1909 Oct  6 22:30 client.conf-rw-r--r--. 1 root root 10246 Oct  6 22:30 storage.conf-rw-r--r--. 1 root root   620 Oct  6 22:30 storage_ids.conf-rw-r--r--. 1 root root  9138 Oct  6 22:30 tracker.conf[[email protected] fdfs]#

3.4.2 默认命令工具

[[email protected] bin]# cd /usr/bin/ && ll | grep fdfs-rwxr-xr-x.   1 root root    438264 Oct  6 22:30 fdfs_appender_test-rwxr-xr-x.   1 root root    438048 Oct  6 22:30 fdfs_appender_test1-rwxr-xr-x.   1 root root    429064 Oct  6 22:30 fdfs_append_file-rwxr-xr-x.   1 root root    427736 Oct  6 22:30 fdfs_crc32-rwxr-xr-x.   1 root root    429088 Oct  6 22:30 fdfs_delete_file-rwxr-xr-x.   1 root root    429816 Oct  6 22:30 fdfs_download_file-rwxr-xr-x.   1 root root    429848 Oct  6 22:30 fdfs_file_info-rwxr-xr-x.   1 root root    440816 Oct  6 22:30 fdfs_monitor-rwxr-xr-x.   1 root root    429344 Oct  6 22:30 fdfs_regenerate_filename-rwxr-xr-x.   1 root root   1364800 Oct  6 22:30 fdfs_storaged-rwxr-xr-x.   1 root root    444152 Oct  6 22:30 fdfs_test-rwxr-xr-x.   1 root root    443336 Oct  6 22:30 fdfs_test1-rwxr-xr-x.   1 root root    571736 Oct  6 22:30 fdfs_trackerd-rwxr-xr-x.   1 root root    430048 Oct  6 22:30 fdfs_upload_appender-rwxr-xr-x.   1 root root    431080 Oct  6 22:30 fdfs_upload_file[[email protected] bin]#

3.4.3 fastdfs默认启动脚本

[[email protected] init.d]# cd /opt/fastdfs/fastdfs-6.09/init.d/ && lltotal 8-rwxrwxr-x. 1 root root 961 Sep 14 16:33 fdfs_storaged-rwxrwxr-x. 1 root root 963 Sep 14 16:33 fdfs_trackerd[[email protected] init.d]#

3.5 创立fastdfs数据根目录

mkdir -p /data/fastdfsmkdir -p /data/fastdfs/trackermkdir -p /data/fastdfs/storagemkdir -p /data/fastdfs/client

3.6 配置tracker server

3.6.1 批改配置文件

vim /etc/fdfs/tracker.conf

# 配置文件是否不失效 false为失效disabled = false# tracker 服务的端口port = 22122# tracker 存储数据和日志文件的根目录,根目录须要提前创立好base_path = /data/fastdfs/tracker

3.6.2 防火墙放行端口

[[email protected] fdfs]# firewall-cmd --zone=public --add-port=22122/tcp --permanentsuccess[[email protected] fdfs]# firewall-cmd --reloadsuccess[[email protected] fdfs]#

3.6.3 启动tracker server

1、复制启动脚本

[[email protected] logs]# cp /opt/fastdfs/fastdfs-6.09/init.d/fdfs_trackerd /etc/init.d/

2、启动tracker server

[[email protected] logs]# systemctl start fdfs_trackerd

3、检测tracker server 是否启动

[[email protected] logs]# ps aux | grep fdroot      6686  0.0  0.3  79556  5900 ?        Sl   05:38   0:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf startroot      6694  0.0  0.1 106180  1892 pts/0    R+   05:39   0:00 grep --color=auto fd

4、检测22122端口是否被监听

[[email protected] logs]# netstat -anp | grep 22122tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      6686/fdfs_trackerd

5、敞开tracker server

[[email protected] logs]# /etc/init.d/fdfs_trackerd stopStopping fdfs_trackerd (via systemctl):            [  OK  ]

3.7 配置storage server

3.7.1 批改配置文件

/etc/fdfs/storage.conf

# 配置文件是否不失效,false 为失效disabled=false # 指定此 storage server 所在 组group_name=group1# storage server 服务的端口port=23000# Storage 数据和日志目录地址,根目录必须提前创立好base_path=/data/fastdfs/storage# 文件存储门路的个数。store_path_count=1# 配置 store_path_count 个门路,索引号从 0 开始。# 如果不配置 store_path0,那它就和 base_path 的门路一样。store_path0=/data/fastdfs/storage# FastDFS 存储文件时,采纳了两级目录。这里配置寄存文件的目录个数。 # tracker_server 的列表 ,会被动连贯 tracker_server# 当存在多个 tracker server 时,每个 tracker server 写一行tracker_server=192.168.121.137:22122# 此存储服务器上web服务器的端口http.server_port=8888

3.6.2 防火墙放行端口

[[email protected] fdfs]# firewall-cmd --zone=public --add-port=23000/tcp --permanentsuccess[[email protected] fdfs]# firewall-cmd --zone=public --add-port=8888/tcp --permanentsuccess[[email protected] fdfs]# firewall-cmd --reloadsuccess[[email protected] fdfs]#

3.6.3 启动storage server

1、复制启动脚本

[[email protected] logs]# cp /opt/fastdfs/fastdfs-6.09/init.d/fdfs_storaged /etc/init.d/

2、启动storage server

[[email protected] logs]# systemctl start fdfs_storaged

3、检测storage server 是否启动

[[email protected] logs]# ps aux | grep fdps aux | grep fdroot      6723  0.0  0.6 145092  8980 ?        Sl   05:55   0:00 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf startroot      6774  1.8  4.5 139948 68364 ?        Sl   06:12   0:00 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf startroot      6785  0.0  0.1 106180  1864 pts/0    R+   06:12   0:00 grep --color=auto fd

4、检测23000端口是否被监听

[[email protected] logs]# netstat -anp | grep 23000tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      6686/fdfs_trackerd

5、敞开storage server

[[email protected] logs]# /etc/init.d/fdfs_storaged stopStopping fdfs_trackerd (via systemctl):            [  OK  ]

3.8 查看storage和tracker是否在通信

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf

3.9 文件上传测试

3.9.1 批改配置文件

vim /etc/fdfs/client.conf

# 存储client的日志文件base_path = /data/fastdfs/client# tracker服务器的地址,多个写多行tracker_server = 192.168.121.137:22122

3.9.2 上传文件

[[email protected] fastdfs]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/fastdfs/小红帽.jpggroup1/M00/00/00/wKh5iWM_VlCAUwAtAAAwWD4VeAg204.jpg[[email protected] fastdfs]#[[email protected] 00]# pwd/data/fastdfs/storage/data/00/00[[email protected] 00]# lswKh5iWM_VlCAUwAtAAAwWD4VeAg204.jpg[[email protected] 00]#

文件id解释

3.10 storage服务装置nginx

[[email protected] fastdfs]# tar -zxf nginx-1.22.0.tar.gz[[email protected] fastdfs]# cd nginx-1.22.0[[email protected] fastdfs]# ./configure[[email protected] fastdfs]# make[[email protected] fastdfs]# make install[[email protected] sbin]# /usr/local/nginx/sbin/nginx -vnginx version: nginx/1.22.0

1、启动nginx

[[email protected] sbin]# /usr/local/nginx/sbin/nginx[[email protected] sbin]# ps aux | grep nginxroot      9460  0.0  0.1   4436  1528 ?        Ss   06:40   0:00 nginx: master process /usr/local/nginx/sbin/nginxnobody    9461  0.0  0.1   4880  2260 ?        S    06:40   0:00 nginx: worker processroot      9463  0.0  0.1 106180  1884 pts/0    R+   06:40   0:00 grep --color=auto nginx

2、进行nginx

[[email protected] sbin]# /usr/local/nginx/sbin/nginx -s stop[[email protected] sbin]# ps aux | grep nginxroot      9466  0.0  0.1 106180  1860 pts/0    R+   06:41   0:00 grep --color=auto nginx

3.11 装置fastdfs-nginx-module

3.11.1 装置

[[email protected] sbin]# /usr/local/nginx/sbin/nginx -s stop[[email protected] sbin]# cd /opt/fastdfs/[[email protected] sbin]# tar -zxf fastdfs-nginx-module-1.23.tar.gz[[email protected] sbin]# cd /opt/fastdfs/nginx-1.22.0[[email protected] sbin]# ./configure --add-module=../fastdfs-nginx-module-1.23/src/[[email protected] sbin]# make && make install[[email protected] nginx-1.22.0]# /usr/local/nginx/sbin/nginx -Vnginx version: nginx/1.22.0built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)configure arguments: --add-module=../fastdfs-nginx-module-1.23/src/

3.11.2 复制mod_fastdfs.conf文件

复制 fastdfs-nginx-module-1.23 源码中的配置文件到/etc/fdfs 目录

cp /opt/fastdfs/fastdfs-nginx-module-1.23/src/mod_fastdfs.conf /etc/fdfs/

3.11.3 编辑mod_fastdfs.conf文件

vim /etc/fdfs/mod_fastdfs.conf

# tracker server 的地址,多个写多行tracker_server=192.168.121.137:22122# storage server的端口storage_server_port=23000# storage server的组名group_name=group1# url上是否有组名url_have_group_name = true# 和 storage.conf配置文件中配置的一样store_path_count=1# 和 storage.conf配置文件中配置的一样store_path0=/data/fastdfs/storage

3.11.5 拷贝mime.types和http.conf文件

[[email protected] nginx-1.22.0]# cp /opt/fastdfs/fastdfs-6.09/conf/mime.types /etc/fdfs/[[email protected] nginx-1.22.0]# cp /opt/fastdfs/fastdfs-6.09/conf/http.conf /etc/fdfs/

不拷贝的话,可能文件不能拜访

3.11.4 编辑nginx配置文件

vim /usr/local/nginx/conf/nginx.conf

server {        listen       8888;        server_name  192.168.121.137;        location ~/group([0-9])/ {                ngx_fastdfs_module;        } }

此处的8888/etc/fdfs/storage.conf中的http.server_port=8888 值要统一。

3.11.5 启动nginx

[[email protected] nginx-1.22.0]# /usr/local/nginx/sbin/nginxngx_http_fastdfs_set pid=12113

3.11.6 拜访之前上传的文件