从零搭建 FastDFS 单机版(CentOS 7.6)
in with 0 comment

从零搭建 FastDFS 单机版(CentOS 7.6)

in with 0 comment

一、简介

FastDFS 是一个开源的高性能分布式文件系统(DFS)。 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务。官网地址:https://github.com/happyfish100/fastdfs

FastDFS 系统有三个角色:跟踪服务器(Tracker Server)、存储服务器(Storage Server)和客户端(Client)。

  Tracker Server:跟踪服务器,主要做调度工作,起到均衡的作用;负责管理所有的 storage server和 group,每个 storage 在启动后会连接 Tracker,告知自己所属 group 等信息,并保持周期性心跳。

  Storage Server:存储服务器,主要提供容量和备份服务;以 group 为单位,每个 group 内可以有多台 storage server,数据互为备份。

  Client:客户端,上传下载数据的服务器,也就是我们自己的项目所部署在的服务器。

二、搭建过程

软件下载(均为GitHub地址):

libfastcommon | fastsds的库文件,需要先编译安装好

fastdfs | fastsds主文件

fastdfs-nginx-module | fastdfs的nginx模块模块

此次实验均使用最新版本:libfastcommon-1.0.43.tar.gzfastdfs-6.06.tar.gzfastdfs-nginx-module-1.22.tar.gz

1、单机版

1.1、环境准备

准备一台虚拟机,ip是:192.168.255.101 系统环境:CentOS Linux release 7.6.1810

1.2、依赖环境安装

依赖环境安装提前安装,少走弯路!!!

gccg++ 基础环境

# yum -y install -y gcc gcc-c++

perl 编译环境

# yum -y install perl

vim 编辑软件,方便修改配置文件

# yum -y install vim

wget 下载软件

# yum -y install wget

1.3、FastDFS安装

1.3.1、libfastcommon 安装

libfastcommon是从FastDFSFastDHT中提取出来的公共C函数库,FastDFS依赖该模块,需要首先安装它。

解压缩并进入解压缩后的文件夹的根目录:
# tar zxvf libfastcommon-1.0.43.tar.gz && cd libfastcommon-1.0.43
执行编译安装:
# ./make.sh && ./make.sh install

安装完成后,返回到上一级目录(软件包所在的根目录)

1.3.2、fastdfs 安装
解压缩并进入解压缩后的文件夹的根目录:
# tar zxvf fastdfs-6.06.tar.gz && cd fastdfs-6.06
执行编译安装:
# ./make.sh && ./make.sh install

报错:https://github.com/happyfish100/fastdfs/issues/392,同样问题,删除原环境,重新来一遍,可能是由于我安装了之前版本导致。

安装成功后,在系统/etc路径下会生成一个/fdfs目录,该目录下是FastDFS相关的一些示例配置文件内容。

[root@localhost fastdfs-6.06]#  ll /etc/fdfs/
总用量 32
-rw-r--r--. 1 root root  1909 6月   4 22:53 client.conf.sample
-rw-r--r--. 1 root root 10246 6月   4 22:53 storage.conf.sample
-rw-r--r--. 1 root root   620 6月   4 22:53 storage_ids.conf.sample
-rw-r--r--. 1 root root  9138 6月   4 22:53 tracker.conf.sample
将/etc/fdfs/tracker.conf.sample重命名为/etc/fdfs/tracker.conf并编辑它:
# mv /etc/fdfs/tracker.conf.sample /etc/fdfs/tracker.conf && vim /etc/fdfs/tracker.conf
修改配置:
# the base path to store data and log files
base_path=/home/tyron/fastdfs/tracker
创建对应文件夹:
# mkdir -p /home/tyron/fastdfs/tracker

复制配置文件
cp /opt/fastdfs/fastdfs-6.06/conf/http.conf /etc/fdfs/http.conf
cp /opt/fastdfs/fastdfs-6.06/conf/mime.types /etc/fdfs/mime.types
将/etc/fdfs/storage.conf.sample 重命名为/etc/fdfs/storage.conf 并编辑它:
# mv /etc/fdfs/storage.conf.sample /etc/fdfs/storage.conf && vim /etc/fdfs/storage.conf

找到`base_path`的配置行,将其修改为:
base_path=/home/tyron/fastdfs/storage
找到`store_path0`的配置行,将其修改为:
store_path0=/home/tyron/fastdfs/storage
找到`tracker_server`的配置行,将其修改为`tracker`服务器的地址:
tracker_server=192.168.255.101:22122

创建对应文件夹:
# mkdir -p /home/tyron/fastdfs/storage

store_path0如果配置的路径不存在,则会使用base_path配置的路径。

service fdfs_trackerd start
service fdfs_storaged start

# 如果上面执行不成功
/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf start
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf start

# 查看进程状态
ps -aux | grep fdfs

启动信息

显示:storage启动正常,tracker无法启动

查看日志信息:

# cat /home/tyron/fastdfs/tracker/logs/trackerd.log
/usr/bin/fdfs_trackerd: symbol lookup error: /usr/bin/fdfs_trackerd: undefined symbol: int2str

软链接有问题,参考解决方式:https://blog.csdn.net/Mabanana/article/details/88076465

tracker无法启动

正常启动页面,至此成功一半了!!!

启动正常

将 `/etc/fdfs/client.conf.sample` 重命名为 `/etc/fdfs/client.conf` 并编辑它:
mv /etc/fdfs/client.conf.sample /etc/fdfs/client.conf && vim /etc/fdfs/client.conf

找到 `base_path`的配置行,将其修改为:
base_path=/home/tyron/fastdfs/storage
找到 `tracker_server`的配置行,将其修改为tracker服务器的地址:
tracker_server=192.168.255.101:22122

这里的base_path是storage用于存储数据文件(其路径为:base_path/data)以及日志文件(其路径为:base_path/logs)的基路径。

#fdfs_upload_file /etc/fdfs/client.conf 上传的图片

#栗子 1.jpg为自己上传的图片
# fdfs_upload_file /etc/fdfs/client.conf /opt/fastdfs/1.jpg
group2/M00/00/00/wKj_ZV7cvXmARAiNAAKnQDcoJRc029.jpg

如果返回类似的文件id则说明文件上传成功!

1.3.3、fastdfs-nginx-module 安装
解压缩并进入解压缩后的文件夹的根目录:
# tar zxvf fastdfs-nginx-module-1.22.tar.gz && cd fastdfs-nginx-module-1.22
编辑src/mod_fastdfs.conf:
# vim src/mod_fastdfs.conf

group_name改成与storage一样的名字
# the group name of the local storage server
group_name=group2

找到 `url_have_group_name` 的配置行,将其改为:
url_have_group_name = true
找到 `store_path0` 的配置行,将其改为:
store_path0=/home/tyron/fastdfs/storage

复制文件 `src/mod_fastdfs.conf` 到 `/etc/fdfs/` 目录下:
cp src/mod_fastdfs.conf /etc/fdfs/

编辑 `src/config` :
# vim src/config

找到 `CORE_INCS` 的配置行:
CORE_INCS="$CORE_INCS /usr/local/include"
去掉路径中的 `/local` ,改为如下并保存退出:
CORE_INCS="$CORE_INCS /usr/include/"

如果请求的url地址中包含了group_name(如“group1/M00/00/00/xxx”)则应设为true。 如果请求的url地址中不包含group_name(如“/M00/00/00/xxx”)则应设为false。

必须配置与本机 storage.conf 中配置的 store_path0 路径相同。

1.3.4、安装Nginx(线上)
一键安装依赖
# yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

 创建一个文件夹
# mkdir -p /usr/local/nginx  && cd /usr/local/nginx

下载tar包
# wget http://nginx.org/download/nginx-1.16.1.tar.gz

解压
# tar -xvf nginx-1.16.1.tar.gz

编译nginx,并安装
# cd /usr/local/nginx/nginx-1.16.1
# ./configure --prefix=/usr/local/nginx --add-module=/opt/fastdfs/fastdfs-nginx-module-1.22/src && make && make install

验证是否安装成功
# /usr/local/nginx/sbin/nginx -v
nginx version: nginx/1.16.1

验证本地可访问
# curl http://192.168.255.101
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

出现版本信息,即表示Nginx安装成功!

修改Nginx配置
# vim /usr/local/nginx/conf/nginx.conf

配置信息如下:
server {
	listen 80;
	server_name 192.168.255.101;
	location /group2/M00 {
		#root /home/tyron/fastdfs/storage/data/;
    	ngx_fastdfs_module;
	}
	error_page  500 502 503 504 /50x.html;
	location = /50x.html {
		root  html;
	}
}

启动Nginx
# /usr/local/nginx/sbin/nginx
ngx_http_fastdfs_set pid=43651

指定配置文件启动nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

指定配置文件重启nginx
/usr/local/nginx/sbin/nginx -s reload -c /usr/local/nginx/conf/nginx.conf

如果请求的url地址中包含了group_name(如“group1/M00/00/00/xxx”)则应设为true。 如果请求的url地址中不包含group_name(如“/M00/00/00/xxx”)则应设为false。

1.4 Centos7关闭防火墙方法(详解)

centos7中的防火墙改成了firewall,使用iptables无作用,开放端口的方法如下:
 
firewall-cmd --zone=public --add-port=80/tcp --permanent
 
命令含义: 
 --zone #作用域 
 --add-port=80/tcp #添加端口,格式为:端口/通讯协议 
 --permanent #永久生效
 
systemctl restart firewalld.service  #重启防火墙
 
systemctl stop firewalld.service #关闭防火墙
 
netstat -lntp #查看监听(Listen)的端口
 
netstat -lnp|grep 80 #检查端口被哪个进程占用

同理本机电脑(Windows)也关闭防火墙!!!

三、最后成果

最后访问:http://192.168.255.101/group2/M00/00/00/wKj_ZV7cvXmARAiNAAKnQDcoJRc029.jpg

fdfs上传

参考