赞
踩
FastDFS是一款开源的轻量级分布式文件系统纯C实现,支持Linux、FreeBSD等UNIX系统类google FS,不是通用的文件系统,只能通过专有API访问,目前提供了C、Java和PHP API为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性FastDFS可以看做是基于文件的key value pair存储系统,称作分布式文件存储服务更为合适。
------ 官网介绍
tracker-server:
跟踪服务器, 主要做调度工作, 起负载均衡的作用。 在内存中记录集群中所有存储组和存储服务器的状态信息, 是客户端和数据服务器交互的枢纽。 相比GFS中的master更为精简, 不记录文件索引信息, 占用的内存量很少。
storage-server:
存储服务器( 又称:存储节点或数据服务器) , 文件和文件属性( metadata) 都保存到存储服务器上。 Storage server直接利用OS的文件系统调用管理文件。
group:
组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的storage server之间是对等的, 文件上传、 删除等操作可以在任意一台storage server上进行 。
meta data:
meta data:文件相关属性,键值对( Key Value Pair) 方式,如:width=1024,heigth=768 。
文件系统 | 高可用 | 扩展 | 部署复杂程度 | 性能 |
---|---|---|---|---|
单机文件系统 | 低,依赖于单机服务器,只要服务器崩溃,完全不可用。 | 低,要扩容只能停机增加硬盘。 | 低 | 当文件数量多到一定的程度,磁盘IO寻址操作将会成为瓶颈 |
分布式文件系统 | 高,一个group内的服务器崩溃后,group内的其他storage将接管服务。 | 高,可以不停机增加group机器。 | 高,部署较复杂 | 高,通过集群或者分布式的方式分担服务器的压力。 |
指标 | 适合类型 | 文件分布 | 系统性能 | 复杂度 | FUSE | POSIX | 备份机制 | 通讯协议接口 | 社区支持 | 开发语言 |
---|---|---|---|---|---|---|---|---|---|---|
FastDFS | 4KB~500MB | 小文件合并存储不分片处理 | 很高 | 简单 | 不支持 | 不支持 | 组内冗余备份 | Api HTTP | 国内用户群 | C语言 |
TFS | 所有文件 | 小文件合并,以block组织分片 | 复杂 | 不支持 | Block存储多份,主辅灾备 | API http | 少 | C++ | ||
MFS | 大于64K | 分片存储 | Master占内存多 | 支持 | 支持 | 多点备份动态冗余 | 使用fuse挂在 | 较多 | Perl | |
HDFS | 大文件 | 大文件分片分块存储 | 简单 | 支持 | 支持 | 多副本 | 原生api | 较多 | Java | |
Ceph | 对象文件块 | OSD一主多从 | 复杂 | 支持 | 支持 | 多副本 | 原生api | 较少 | C++ | |
MogileFS | 海量小图片 | 高 | 复杂 | 可以支持 | 不支持 | 动态冗余 | 原生api | 文档少 | Perl | |
ClusterFS | 大文件 | 简单 | 支持 | 支持 | 多 | C |
特别适合以中小文件( 建议范围: 4KB 到 500MB ) 为载体的在线服务, 如相册网站、 视频网站等等。
fastdfs文件系统.png
fastdfs文件系统1 (1).png
192.168.1.177安装fastdfs的tracker节点,以及nginx反向代理服务器用于下载服务。
192.168.1.188,192.168.1.189安装fastdfs的storage节点,默认分一组,一组内两台机器互为备份.
注意:为了做到高可用,一个group建议分为两台以上的机器。
* 从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库,基础环境
* 在安装 FastDFS 前需要先安装这个
* 下载地址址:https://github.com/happyfish100/libfastcommon/releases
* FastDFS 安装包
* 下载地址:https://github.com/happyfish100/fastdfs/releases
* 为了实现通过 HTTP 服务访问和下载 FastDFS 服务器中的文件
* 可以重定向文件链接到源服务器取文件,避免同一组 Storage 服务器同步延迟导致文件访问错误
* 下载地址:https://github.com/happyfish100/fastdfs-nginx-module/releases
* 注:这个目前最新版是 V1.20,不过由于配置时出了点问题,故这里改为使用 V1.16 版本
* 实现 HTTP 访问,负载均衡和缓存等功能
* 下载地址:http://nginx.org/en/download.html
本次采用的安装包版本如下
* libfastcommon :1.0.38
* FastDFS :5.11
* fastdfs-ninx-module :1.16
* Nginx : 1.15.1
libfastcommon是从 FastDFS 和 FastDHT 中提取出来的公共 C 函数库,基础环境,安装即可 。
1、下载libfastcommonV1.0.7.tar.gz压缩包
2、上传安装包到服务器中
这里创建一个专门存放安装包的文件夹:
[root@admin /]# mkdir fastdfs
[root@admin /]# cd fastdfs/
[root@admin fastdfs]#
后使用xftp上传安装包到服务器中
3、安装gcc 依赖环境
因为FastDFS是使用c语言开发,需要先安装gcc环境,否则之后运行类库的 ./make.sh 会报错,如下图:
# 在线安装 gcc
[root@localhost ~]# yum -y install gcc
[root@localhost ~]# yum -y install gcc-c++
# 在线安装 perl
[root@localhost ~]# yum -y install perl*
4、解压
[root@admin fastdfs]# ll
total 72
-rw-r--r--. 1 root root 73148 Nov 9 14:09 libfastcommonV1.0.7.tar.gz
[root@admin fastdfs]# tar -zxvf libfastcommonV1.0.7.tar.gz
解压后,会生成libfastcommon-1.0.7文件夹,里面有make.sh编译脚本。
[root@admin libfastcommon-1.0.7]# ll
5、编译、安装
[root@localhost libfastcommon-1.0.7]# ./make.sh
[root@localhost libfastcommon-1.0.7]# ./make.sh install
libfastcommon.so 安装到了/usr/lib64/libfastcommon.so但是FastDFS主程序设置的lib目录是/usr/local/lib,所以需要创建软链接。
# 由于 libfastcommon 安装的路径在 /usr/lib64/ # 但是 FastDFS 主程序设置的 lib 目录是在 /usr/local/lib,所以需要创建软链接
[root@localhost /]# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so
[root@localhost /]# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so
[root@localhost /]# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so
[root@localhost /]# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so
下载地址:FastDFS - Browse Files at SourceForge.net
下载安装 FastDFS,也可通过wget下载。
wget https://github.com/happyfish100/fastdfs/archive/V5.11.tar.gz
选择FastDFS Server Source Code
这里我们选择下载最多的应该也是比较稳定的版本:FastDFS Server with PHP Extension Source Code V5.05。
点击之后就能成功下载fastdfs压缩包。
2、解压
将安装包上传到服务器中:
[root@localhost fastdfs]# ll
[root@localhost fastdfs]# tar -zxvf FastDFS_v5.05.tar.gz
解压缩之后,可以看到生成了FastDFS文件夹,里面有编译相关脚本
[root@localhost fastdfs]# ll
total 412
drwxr-xr-x. 10 8980 users 258 Dec 2 2014 FastDFS
-rw-r--r--. 1 root root 345400 Nov 9 14:39 FastDFS_v5.05.tar.gz
drwxrwxr-x. 3 root root 102 Nov 9 14:31 libfastcommon-1.0.7
-rw-r--r--. 1 root root 73148 Nov 9 14:30 libfastcommonV1.0.7.tar.gz
[root@localhost fastdfs]# cd FastDFS/
[root@localhost FastDFS]# ll
total 120
drwxr-xr-x. 3 8980 users 4096 Dec 2 2014 client
drwxr-xr-x. 2 8980 users 261 Dec 2 2014 common
drwxr-xr-x. 2 8980 users 146 Dec 2 2014 conf
-rw-r--r--. 1 8980 users 35067 Dec 2 2014 COPYING-3_0.txt
-rw-r--r--. 1 8980 users 2802 Dec 2 2014 fastdfs.spec
-rw-r--r--. 1 8980 users 31386 Dec 2 2014 HISTORY
drwxr-xr-x. 2 8980 users 48 Dec 2 2014 init.d
-rw-r--r--. 1 8980 users 7755 Dec 2 2014 INSTALL
-rwxr-xr-x. 1 8980 users 5813 Dec 2 2014 make.sh
drwxr-xr-x. 2 8980 users 4096 Dec 2 2014 php_client
-rw-r--r--. 1 8980 users 2380 Dec 2 2014 README.md
-rwxr-xr-x. 1 8980 users 1768 Dec 2 2014 restart.sh
-rwxr-xr-x. 1 8980 users 1680 Dec 2 2014 stop.sh
drwxr-xr-x. 4 8980 users 4096 Dec 2 2014 storage
drwxr-xr-x. 2 8980 users 4096 Dec 2 2014 test
drwxr-xr-x. 2 8980 users 4096 Dec 2 2014 tracker
[root@localhost FastDFS]#
3、编译、安装
# 解压 FastDFS 压缩包,编译以及安装
[root@localhost FastDFS]# ./make.sh
[root@localhost FastDFS]# ./make.sh install
FastDFS默认服务脚本路径
/etc/init.d/fdfs_storaged
/etc/init.d/fdfs_trackerd
4、FastDFS相关配置文件示例
/etc/fdfs/client.conf.sample
/etc/fdfs/storage.conf.sample
/etc/fdfs/tracker.conf.sample
FastDFS默认的脚本安装后放在/usr/bin下面
但是FastDFS 服务脚本设置的 bin 目录是 /usr/local/bin,所以还是需要建立 /usr/bin 到 /usr/local/bin 的软链接
[root@localhost fdfs]# ln -s /usr/bin/fdfs_trackerd /usr/local/bin
[root@localhost fdfs]# ln -s /usr/bin/fdfs_storaged /usr/local/bin
[root@localhost fdfs]# ln -s /usr/bin/stop.sh /usr/local/bin
[root@localhost fdfs]# ln -s /usr/bin/restart.sh /usr/local/bin
[root@localhost fdfs]# ll
total 20
-rw-r--r--. 1 root root 1461 Nov 9 14:42 client.conf.sample
-rw-r--r--. 1 root root 7829 Nov 9 14:42 storage.conf.sample
-rw-r--r--. 1 root root 7102 Nov 9 14:42 tracker.conf.sample
[root@localhost fdfs]# cp tracker.conf.sample tracker.conf
[root@localhost fdfs]#
# 配置 tracker.conf
vi tracker.conf
配置 Tracker
# 启用配置文件(默认为 false,表示启用配置文件)
disabled=false # Tracker 服务端口(默认为 22122)
port=22122 # 存储日志和数据的根目录
base_path=/home/fastdfs/tracker
3、创建Tracker 数据和日志目录地址
# 创建 Tracker 的存储日志和数据的根目录
mkdir -p /home/fastdfs/tracker
cd /etc/fdfs cp tracker.conf.sample tracker.conf
4、防火墙中打开跟踪端口(默认的22122)
[root@localhost fastdfs]# vim /etc/sysconfig/iptables
加入开放22122端口的配置:
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22122 -j ACCEPT
修改完成后,重启防火墙:
service iptables restart
5、启动Tracker
使用如下命令启动Tracker跟踪器:
[root@localhost /]# /etc/init.d/fdfs_trackerd start
Reloading systemd: [ OK ]
Starting fdfs_trackerd (via systemctl): [ OK ]
[root@localhost /]#
启动成功后,会在 /fastdfs/tracker (配置的base_path)下创建 data、logs 两个目录
查看 FastDFS Tracker 是否已成功启动 ,22122端口正在被监听,则说明Tracker服务安装成功
6、设置Tracker开机启动
[root@localhost tracker]# chkconfig fdfs_trackerd on
7、Tracker server 目录及文件结构
Tracker服务启动成功后,会在base_path下创建data、logs两个目录。目录结构如下:
${base_path}
|__data
| |__storage_groups.dat:存储分组信息
| |__storage_servers.dat:存储服务器列表
|__logs
| |__trackerd.log: tracker server 日志文件
# 创建 Storage 的存储日志和数据的根目录
mkdir -p /home/fastdfs/storage
cd /etc/fdfs cp storage.conf.sample storage.conf
# 配置 storage.conf
vi storage.conf
创建Storage基础数据目录,对应base_path目录
[root@localhost fdfs]# mkdir /home/fastdfs/storage
[root@localhost fdfs]# mkdir /home/fastdfs/file
[root@localhost fdfs]# cp storage.conf.sample storage.conf
[root@localhost fdfs]# ll
total 36
-rw-r--r--. 1 root root 1461 Nov 9 14:42 client.conf.sample
-rw-r--r--. 1 root root 7829 Nov 9 15:41 storage.conf
-rw-r--r--. 1 root root 7829 Nov 9 14:42 storage.conf.sample
-rw-r--r--. 1 root root 7234 Nov 9 15:12 tracker.conf
-rw-r--r--. 1 root root 7102 Nov 9 14:42 tracker.conf.sample
在这里,storage.conf 只是修改一下 storage 存储日志和数据的路径
# 启用配置文件(默认为 false,表示启用配置文件) disabled=false
# Storage 服务端口(默认为 23000) port=23000
# 数据和日志文件存储根目录 base_path=/home/fastdfs/storage# 存储路径,访问时路径为 M00
# store_path1 则为 M01,以此递增到 M99(如果配置了多个存储目录的话,这里只指定 1 个) store_path0=/home/fastdfs/storage
# Tracker 服务器 IP 地址和端口,单机搭建时也不要写 127.0.0.1
# tracker_server 可以多次出现,如果有多个,则配置多个
tracker_server=192.168.229.166:22122# 设置 HTTP 访问文件的端口。这个配置已经不用配置了,配置了也没什么用
# 这也是为何 Storage 服务器需要 Nginx 来提供 HTTP 访问的原因
http.server_port=8888
# 启动 Tracker 服务
# 其它操作则把 start 改为 stop、restart、reload、status 即可。Storage 服务相同
/etc/init.d/fdfs_trackerd start
# 启动 Storage 服务
/etc/init.d/fdfs_storaged start
# 可以通过 fdfs_monitor 查看集群的情况
# 查看 Storage 是否已经注册到 Tracker 服务器中
# 当查看到 ip_addr = 192.168.229.166 (localhost.localdomain) ACTIVE
# ACTIVE 表示成功
/usr/bin/fdfs_monitor /etc/fdfs/storage.conf
# 修改 Tracker 服务器客户端配置文件
cp /etc/fdfs/client.conf.sample
/etc/fdfs/client.conf vi /etc/fdfs/client.conf
2、client.conf 中修改 base_path 和 Tracker 服务器的 IP 地址与端口号即可
# 存储日志文件的基本路径
base_path=/home/fastdfs/tracker
# Tracker 服务器 IP 地址与端口号
tracker_server=192.168.229.166:22122
3、创建base_path路径
mkdir /fastdfs/c
4、上传测试
拷贝一张图片到 root 目录下
# 存储到 FastDFS 服务器中
/usr/bin/fdfs_upload_file /etc/fdfs/client.conf /root/test.png
当返回文件 ID 号,如 group1/M00/00/00/wKjlpltF-K-AZQQsAABhhboA1Kk469.png
则表示上传成功
- Storage 安装 Nginx,为了提供 http 的访问和下载服务,同时解决 group 中 Storage 服务器的同步延迟问题
- Tracker 安装 Nginx,主要是为了提供 http 访问的反向代理、负载均衡以及缓存服务
Nginx 依赖环境安装
Nginx 依赖环境有 GCC(这个在安装 libfastcommon 时就安装了)、PCRE、zlib 和 openssl。可以通过以下几条命令 or 一条命令进行在线安装# 安装 GCC
yum install -y gcc-c++
# 安装 PCRE
yum install -y pcre pcre-devel
# 安装 zlib
yum install -y zlib zlib-devel
# 安装 openssl
yum install -y openssl openssl-devel# 以上命令也可以使用一条命令来安装
yum install gcc gcc-c++ make automake autoconf libtool pcre* zlib openssl openssl-devel
所有 storage 节点都要安装 fastdfs-nginx-module 模块
cd /root
# 解压 fastdfs-nginx-module 模块
tar zxvf fastdfs-nginx-module_v1.16.tar.gz
# 修改 fastdfs-nginx-module 的 config 配置文件
vi fastdfs-nginx-module/src/config
将 CORE_INCS="$CORE_INCS /usr/local/include/fastdfs /usr/local/include/fastcommon/"
中的 local 去掉,修改为 CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/"
cd /root
tar zxvf nginx-1.15.1.tar.gz
cd nginx-1.15.1
# 给 Nginx 添加 fastdfs-nginx-module 模块
./configure --add-module=/root/fastdfs-nginx-module/src
make && make install
# 复制 FastDFS 的部分配置文件到 /etc/fdfs
cd /root/fastdfs-5.11/conf/
cp http.conf mime.types /etc/fdfs/
# 复制 fastdfs-nginx-module 源码中的配置文件到 /etc/fdfs 中
cp /root/fastdfs-nginx-module/src/mod_fastdfs.conf /etc/fdfs/
vi /etc/fdfs/mod_fastdfs.conf
# Tracker 服务器IP和端口修改
tracker_server=192.168.229.166:22122
# url 中是否包含 group 名称,改为 true,包含 group
url_have_group_name = true
# 配置 Storage 信息,修改 store_path0 的信息
store_path0=/home/fastdfs/storage
# 其它的一般默认即可,例如
base_path=/tmp
group_name=group1
storage_server_port=23000
store_path_count=1
vi /usr/local/nginx/conf/nginx.conf
在 server 中添加以下代码
# 配置为支持 group0-group9,以及 M00-M99,以便于以后扩容
# 本单机环境下其实配置为 ~/group1/M00 就可以了
location ~/group([0-9])/M([0-9])([0-9]) {
ngx_fastdfs_module;
}
# 启动 Nginx
/usr/local/nginx/sbin/nginx
# 重启 Nginx
/usr/local/nginx/sbin/nginx -s reload
# 停止 Nginx
/usr/local/nginx/sbin/nginx -s stop
通过 HTTP 访问文件
根据 URL 访问之前上传的那张图片
http://192.168.229.166:80/group1/M00/00/00/wKjlpltF-K-AZQQsAABhhboA1Kk469.png
可以将 Nginx、Tracker 和 Storage 服务设置为开机自启。
# 每次开机时,手动打开 Tracker 服务
/etc/init.d/fdfs_trackerd start
# 打开 Storage 服务
/etc/init.d/fdfs_storaged start
# 启动 Nginx
/usr/local/nginx/sbin/nginx
FastDFS 单机版安装与配置到此也就结束了,集群是一样的使用方式,只不过配置文件有所不同。有空再配置一下集群版。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。