Linux系统搭建FastDFS文件服务(单点)
Linux系统搭建FastDFS文件服务
第一章、分布式系统介绍
1、分布式文件系统介绍
分布式文件系统 (Distributed File System) 是一个软件/软件服务器,这个软件可以用来管理文件。但这个软件所管理的文件通常不是在一个服务器节点上,而是在多个服务器节点上,这些服务器节点通过网络相连构成一个庞大的文件存储服务器集群,这些服务器都用于存储文件资源,通过分布式文件系统来管理这些服务器上的文件。
常见的分布式文件系统有: HDFS(ASF)、MogileFS(LiveJournal)、FastDFS(余庆)、Lustre(Oracle)、GlusterFS(RedHat)
等等。
2、分布式文件系统与传统文件系统对比
3、传统方式弊端
- 如果用户数量多,
IO
操作比较多,对磁盘访问压力很大 - 如果磁盘发生故障,会造成数据丢失
- 存储容量有限
第二章、FastDFS介绍
FastDFS
就是我们上述所说的专用分布式文件系统,FastDFS
是基于 C 语言
开发的,是一个轻量级开源的高性能分布式文件系统。主要功能有:文件存储、文件同步、文件访问(文件上传/下载),解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。FastDFS
特别适合中大型网站以文件为载体的在线服务,适合存储 4KB ~ 500MB
之间的小文件,如照片共享网站、视频共享网站(图片、文档、音频、视频等等)。
FastDFS
是一款国产开源软件,作者余庆
;项目开源地址Github: 官方论坛:
FastDFS
架构
1、Client
客户端,实现文件上传下载的服务器,就是我们自己的项目所部署在的服务器。通过专有接口,使用 TCP/IP
协议与跟踪服务器或存储服务器进行数据交互。 FastDFS
向使用者提供基本文件访问接口,比如 upload、download、append、delete
等,以客户端库的方式提供给用户使用。
2、Tracker Server
跟踪服务器,负责文件访问的调度和负载均衡,负责管理所有的 Storage Server
和 group
组/卷。
3、Storage Server
存储服务器,负责文件存储,文件同步/备份,提供文件访问接口,文件元数据管理。以group
为单位,每个 group
内可以有多台 Storage Server
,数据互为备份,达到容灾的目的。每个Storage
在启动以后会主动连接 Tracker
,告知自己所属 group `等存储相关信息,并保持周期性心跳。
4、Group
组, 也可称为 Volume
卷。同组内服务器上的文件是完全相同的,同一组内的 Storage Server
之间是对等的,文件上传、删除等操作可以在任意一台 Storage Server
上进行。
5、Metadata
文件系统中存储的数据分为数据和元数据两部分,数据是指文件中的实际数据,即文件的实际内容;而元数据是用来描述一个文件特征的系统数据,诸如访问权限、文件拥有者以及文件数据块的分布信息等等。如果文件是一张图片,元数据就是图片的宽,高等等。
第三章、FastDFS 存储策略介绍
为了支持大容量存储,Storage
存储服务器采用了分组(或分卷)的方式。存储系统由一个或多个组组成,组与组之间的文件是相互独立的,所有组的文件容量累加就是整个存储系统中的文件容量。一个组可以由一台或多台存储服务器组成,一个组下的存储服务器中的文件都是相同的,组中的多台存储服务器起到了冗余备份和负载均衡的作用。 当组中增加了新的服务器时,系统会自动同步已有的文件,同步完成后,系统自动将新增的服务器切换至线上提供服务。 当存储空间不足时,可以动态添加组,只需要增加一台或多台服务器,并将它们配置为一个新的组,即可扩大存储系统的容量。当你的某个应用或者模块(对应的 group
)的并发过高的时候,可以直接在 group
中增加若干个 Storage
来实现负载均衡。 为了避免单个目录下的文件数太多,当 Storage
第一次启动时,会在每个数据存储目录中创建 2
级子目录,每级 256
个,总共 65536
个目录,上传的文件会以 hash
的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录。
机器分布:
首先要说明一下:tracker
和 storage
其实都是 fastdfs
,只不过启动时通过不同的配置文件启动,所扮演的角色不同而已。也就是说,安装 tracker
和 storage
就是在安装 fastdfs
,然后通过每个角色具体的配置文件启动即可。
第四章、FastDFS部署
1、依赖及必要工具部署
yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake wget httpd-tools vim gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
2、FastDFS安装包下载方式
1、通过官网下载指定安装包
第一步:在浏览器地址栏输入:https://sourceforge.net/projects/fastdfs/files,我们会看到如下图所示界面。
第二步:下载FastDFS的Server安装包,点击上图"FastDFS Server Source Code",会看到如下图所示界面,选择2014-12-02那个版本,因为这个版本是最稳定的版本。
第三步:如下图所示界面,点击"FastDFS_v5.05.tar.gz"进行下载即可。
2、通过wget命令下载包
wget https://github.com/happyfish100/libfastcommon/archive/V1.0.7.tar.gz
wget http://jaist.dl.sourceforge.net/project/fastdfs/FastDFS%20Nginx%20Module%20Source%20Code/fastdfs-nginx-module_v1.16.tar.gz
wget https://github.com/happyfish100/fastdfs/archive/V5.05.tar.gz
wget http://nginx.org/download/nginx-1.12.1.tar.gz
3、安装libfastcommon
压缩包目录解压
tar xf V1.0.7.tar.gz
进入解压的libfastcommon-1.0.7目录,编译
/root/libfastcommon-1.0.7/make.sh
安装
/root/libfastcommon-1.0.7/ && ./make.sh install
最后,libfastcommon.so文件到usr/lib下 ,请按照自己的实际文件路径修改被复制路径
cp /root/libfastcommon-1.0.7/src/libfastcommon.so /usr/lib
4、安装FastDFS
解压V5.05.tar.gz
,然后编译安装FastDFS
tar xf V5.05.tar.gz
安装成功后将目录conf
内的文件拷贝到/etc/fdfs
目录下:
cp /root/fastdfs-5.05/conf/* /etc/fdfs/
5、安装tracker
进入/etc/fdfs
目录,修改tracker.conf
文件。如果不存在,就拷贝tracker.conf.sample
文件为tracker.conf
,然后修改一下内容:
http.server_port=80 (注解:端口,80是方便默认)
store_group=group1 (注解:组名)
reserved_storage_space = 1%
创建文件夹:
mkdir -p =/home/yuqing/fastdfs
执行以下命令,把文件拷贝到指定目录:
cp /usr/bin/fdfs_trackerd /usr/local/bin/fdfs_trackerd
cp /usr/bin/fdfs_storaged /usr/local/bin/fdfs_storaged
cp /usr/bin/stop.sh /usr/local/bin/stop.sh
cp /usr/bin/restart.sh /usr/local/bin/restart.sh
启动tracker
,并查看是启动成功(出现如下提示,表示启动成功):restart重启
/etc/init.d/fdfs_trackerd start
netstat -lntup | grep tracker
tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 12213/fdfs_trackerd
6、安装storage
修改storage.conf
文件。如果不存在,就拷贝storage.conf.sample
文件为storage.conf
,然后再修改:
tracker_server=192.168.150.133:22122 (连接tracker服务器地址)
group_name=group1 (必须和tracker的组名相同)
http.server_port=80 (这个端口也要改)
启动storage
,并查看是否成功(出现如下提示,表示启动成功):
/etc/init.d/fdfs_storaged start
netstat -lntup | grep storaged
tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 14291/fdfs_storaged
查看tracker
和storage
是不是在通信:
fdfs_monitor /etc/fdfs/storage.conf
如下提示,出现ACTIVE
,表示二者均正常启动,至此就可以进行上传文件测试了。
7、测试图片上传
Tracker
和storage
都已经安装完成,使用命令测试文件上传:
FastDFS
提供一个文件上传命令:/usr/bin/fdfs_test
测试文件上传。测试上传需要连接tracker
服务器,连接storage
服务器。因此需要指定一个配置文件:client.conf
配置文件,通过Client.conf
连接tracker
服务器。
修改/etc/fdfs
下client.conf
tracker_server=192.168.2.231:22122 (tracker端口)
测试命令
/usr/bin/fdfs_test /etc/fdfs/client.conf upload jbhd.jpg
如下图返回地址则成功
第五章、FastDFS通过HTTP访问
1、源码部署Nginx
# 1.解压NGINX源码包
tar xf nginx-1.12.1.tar.gz
# 2.初始化nginx
/root/nginx-1.12.1/configure
# 3.编译nginx服务
/root/nginx-1.12.1/make
# 4.安装nginx
/root/nginx-1.12.1/make install
2、安装fastdfs-nginx-module
首先解压fastdfs-nginx-module_v1.16.tar.gz
:
tar xf fastdfs-nginx-module_v1.16.tar.gz
修改/fastdfs-nginx-module/src/config
文件。去掉所有的local
(三个)
拷贝usr/lib64目录下库文件libfdfsclient.so
cp /usr/lib64/libfdfsclient.so /usr/lib
把module
添加nginx
中。通过设置安装参数方式添加模块。
/root/nginx-1.12.1/configure --add-module=/root/fastdfs-nginx-module/src
重新编译安装NGINX
/root/nginx-1.12.1/make
/root/nginx-1.12.1/make install
查看Nginx的模块
/usr/local/nginx/sbin/nginx -V
nginx version: nginx/1.12.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
configure arguments: --add-module=/root/fastdfs-nginx-module/src
复制 fastdfs-nginx-module
源码中的配置文件到/etc/fdfs
目录, 并修改
cd fastdfs-nginx-module/src
cp mod_fastdfs.conf /etc/fdfs/
进入/etc/fdfs/修改mod_fastdfs.conf如下配置,其他默认
# 连接超时时间
connect_timeout=10
# Tracker Server
tracker_server=192.168.150.133:22122
# StorageServer 默认端口
storage_server_port=23000
# 如果文件ID的uri中包含/group**,则要设置为true
url_have_group_name = true
配置Nginx
vim /usr/local/nginx/conf/nginx.conf
修改配置,其它的默认,在80端口下添加fastdfs-nginx模块
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
cat /usr/local/nginx/conf/nginx.conf
#user nobody;
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name 192.168.150.133;
location ~/group([0-9])/M00 {
ngx_fastdfs_module;
}
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
注意:
listen 80
端口值是要与/etc/fdfs/storage.conf
中的http.server_port=80
(前面改成80了)相对应。如果改成其它端口,则需要统一,同时在防火墙中打开该端口,如果防火墙已关闭,则不用配置防火墙。location
的配置,如果有多个group
则配置location ~/group([0-9])/M00
,没有则不用配group
。
启动nginx
#启动nginx
/usr/local/nginx/sbin/nginx
#设置开机启动
vim /etc/rc.local
/usr/local/nginx/sbin/nginx
# 设置执行权限
chmod 755 /etc/rc.local
查看Nginx是否启动
ps -ef | grep nginx
root 15899 21620 0 21:34 pts/0 00:00:00 grep --color=auto nginx
root 24437 1 0 17:50 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx
nobody 24438 24437 0 17:50 ? 00:00:00 nginx: worker process
在地址栏中访问成功:http://192.168.150.133/group1/M00/00/00/wKiWhWJf16iATa_kAAGjV6gKGUk859_big.jpg
注意:
group2
同组的Storage2
和Storage3 FastDFS
服务端口必须一致:port=23000
。- 一台服务器可以装多个组(
group
)但不能装同组的多个Storage
,日志会报错误,日志报错原因是"注意1" Version 4.05
之前fastdfs
内部绑定了libevent
作为http
服务器.Version 4.05
之后的版本删除了内置的web http
服务,内置的web http
服务是个累赘,不用也罢!- 启动
storage server
时,一直处于僵死状态.启动storage server
,storage
将连接tracker server
,如果连不上,将一直重试。直到连接成功,启动才算真正完成!如果集群中有2台tracker server
,而其中一台tracker
没有启动,可能会导致storage server
一直处于僵死状态。