centos7上单机安装fastdfs6.0.9

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 架构图

fastdfs架构图

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 基础库-网络框架库
FastDFS fastdfs本地
fastdfs-nginx-module fastdfs与nginx整合模块
nginx nginx

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源码所在目录

[root@fastdfs fastdfs]# pwd
/opt/fastdfs
[root@fastdfs fastdfs]# ls
fastdfs-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
[root@fastdfs fastdfs]#

3.1.3 tracker 和 storage server

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

3.2 安装基础库-libfatscommon

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

3.3 安装基础库-libserverframe

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

3.4 安装fastdfs

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

3.4.1 默认配置文件位置

[root@fastdfs fdfs]# cd /etc/fdfs/
[root@fastdfs fdfs]# ll
total 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
[root@fastdfs fdfs]#

3.4.2 默认命令工具

[root@fastdfs 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
[root@fastdfs bin]#

3.4.3 fastdfs默认启动脚本

[root@fastdfs init.d]# cd /opt/fastdfs/fastdfs-6.09/init.d/ && ll
total 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
[root@fastdfs init.d]#

3.5 创建fastdfs数据根目录

mkdir -p /data/fastdfs
mkdir -p /data/fastdfs/tracker
mkdir -p /data/fastdfs/storage
mkdir -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 防火墙放行端口

[root@fastdfs fdfs]# firewall-cmd --zone=public --add-port=22122/tcp --permanent
success
[root@fastdfs fdfs]# firewall-cmd --reload
success
[root@fastdfs fdfs]#

3.6.3 启动tracker server

1、复制启动脚本

[root@fastdfs logs]# cp /opt/fastdfs/fastdfs-6.09/init.d/fdfs_trackerd /etc/init.d/

2、启动tracker server

[root@fastdfs logs]# systemctl start fdfs_trackerd

3、检测tracker server 是否启动

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

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

[root@fastdfs logs]# netstat -anp | grep 22122
tcp        0      0 0.0.0.0:22122           0.0.0.0:*               LISTEN      6686/fdfs_trackerd

5、关闭tracker server

[root@fastdfs logs]# /etc/init.d/fdfs_trackerd stop
Stopping 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 防火墙放行端口

[root@fastdfs fdfs]# firewall-cmd --zone=public --add-port=23000/tcp --permanent
success
[root@fastdfs fdfs]# firewall-cmd --zone=public --add-port=8888/tcp --permanent
success
[root@fastdfs fdfs]# firewall-cmd --reload
success
[root@fastdfs fdfs]#

3.6.3 启动storage server

1、复制启动脚本

[root@fastdfs logs]# cp /opt/fastdfs/fastdfs-6.09/init.d/fdfs_storaged /etc/init.d/

2、启动storage server

[root@fastdfs logs]# systemctl start fdfs_storaged

3、检测storage server 是否启动

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

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

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

5、关闭storage server

[root@fastdfs logs]# /etc/init.d/fdfs_storaged stop
Stopping fdfs_trackerd (via systemctl):            [  OK  ]

3.8 查看storage和tracker是否在通讯

/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
查看storage和tracker是否在通讯

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 上传文件

[root@fastdfs fastdfs]# /usr/bin/fdfs_upload_file /etc/fdfs/client.conf /opt/fastdfs/小红帽.jpg
group1/M00/00/00/wKh5iWM_VlCAUwAtAAAwWD4VeAg204.jpg
[root@fastdfs fastdfs]#
[root@fastdfs 00]# pwd
/data/fastdfs/storage/data/00/00
[root@fastdfs 00]# ls
wKh5iWM_VlCAUwAtAAAwWD4VeAg204.jpg
[root@fastdfs 00]#

文件id解释
文件id解释

3.10 storage服务安装nginx

[root@fastdfs fastdfs]# tar -zxf nginx-1.22.0.tar.gz
[root@fastdfs fastdfs]# cd nginx-1.22.0
[root@fastdfs fastdfs]# ./configure
[root@fastdfs fastdfs]# make
[root@fastdfs fastdfs]# make install
[root@fastdfs sbin]# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.22.0

1、启动nginx

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

2、停止nginx

[root@fastdfs sbin]# /usr/local/nginx/sbin/nginx -s stop
[root@fastdfs sbin]# ps aux | grep nginx
root      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 安装

[root@fastdfs sbin]# /usr/local/nginx/sbin/nginx -s stop
[root@fastdfs sbin]# cd /opt/fastdfs/
[root@fastdfs sbin]# tar -zxf fastdfs-nginx-module-1.23.tar.gz
[root@fastdfs sbin]# cd /opt/fastdfs/nginx-1.22.0
[root@fastdfs sbin]# ./configure --add-module=../fastdfs-nginx-module-1.23/src/
[root@fastdfs sbin]# make && make install
[root@fastdfs nginx-1.22.0]# /usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.22.0
built 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文件

[root@fastdfs nginx-1.22.0]# cp /opt/fastdfs/fastdfs-6.09/conf/mime.types /etc/fdfs/
[root@fastdfs 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

[root@fastdfs nginx-1.22.0]# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=12113

3.11.6 访问之前上传的文件

访问fastdfs文件

posted @ 2022-10-08 00:05  huan1993  阅读(203)  评论(0编辑  收藏  举报