传智播客
C++学院
1. 项目概要
本项目主要讲解高负载的分布式存储解决方案:
基于 Nginx 作为反向代理和轻量级 web 服务器
FastCGI 作为中间包裹,后台应用程序用 C/C++完成
分布式解决方案用 FastDFS
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
2. 分布式存储 FastDFS
2.1 什么是分布式存储
分布式存储简单的来说,就是将数据分散存储到多个存储设备(服务
器)上。
传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务
器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规
模存储应用的需要。
分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分
担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可
靠性、可用性和存取效率,还易于扩展。
经典的分布式文件系统介绍:
http://os.51cto.com/art/201209/357433.htm
2.2 FastDFS
2.2.1 什么是 FastDFS
FastDFS 是一款开源的、分布式文件系统(Distributed File System), 由
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
淘宝开发平台部资深架构师余庆开发。它对文件进行管理,功能包括:
文件存储、文件同步、文件访问(文件上传、文件下载、文件删除)
等,解决了大容量存储和负载均衡的问题。
FastDFS 是通过纯 C 实现,支持 Linux, FreeBSD 等 Unix 系统类 Google
FS, 不是通用的文件系统,只能够通过专有 API 访问,目前提供了 C,
Java 和 PHP API 为互联网应用量身定做,解决大容量文件存储问题,
追求高性能和高扩展性 FastDFS 可以看做是基于文件的 key-value 存
储系统,称为分布式文件存储服务更为合适。
FastDFS 相关资源:
开源项目主页:https://code.google.com/archive/p/fastdfs/
源码下载:fastdfs.sourceforge.net
ChinaUnix 论坛版块:http://bbs.chinaunix.net/forum-240-1.html
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
2.2.2 架构简析
我们可以通过 FastDFS 对文件的上传过程,来初步了解 FastDFS 的
基本架构:
1 首先客户端 client 发起对 FastDFS 的文件传输动作,是通
过连接到某一台 Tracker Server 的指定端口来实现的;
2
Tracker Server 根据目前已掌握的信息,来决定选择哪一台
Storage Server ,然后将这个 Storage Server 的地址等信息返回给
client;
3 然后 client 再通过这些信息连接到这台 Storage Server,将
要上传的文件传送到给 Storage Server 上。
FastDFS 服务端有两个重要角色:跟踪器(tracker)和存储节点
(storage):
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
跟踪器主要做调度工作,在访问上起负载均衡的作用
存储节点存储文件,完成文件管理的所有功能
Tracker Server 与 Storage Server 之间不直接通信,其基本的信息由
配置文件在系统启动加
载时获知。
多台 Tracker Server 之间保证了 Tracker 的分布式,Tracker Server
之间是对等的,防止了单点故障。
Storage Server 是分成多个 Group(组),每个 Group 中的 Storage 都
是互相备份的,也就是说,如果 Group1 有 Storage1、Storage2、
Storage3,其容量分别是 100GB、200GB、300GB,
那么 Group1 的存储能力是 100GB,而不是 300GB,这就是互相备
份的意思。
进一步说,整个 Group 的存储能力由该组中该储能力最小的 Storage
决定。多个 Group 之间的存储方式,可以采用 round robin( 轮训)、
load balanced( 负载均衡) 或指定 Group 的方式。
另一点相对于 MS( Master-Slave) 模式的优势,不仅 master 有上
面可能提到的单点故障问题,而且 client 与 master 之间可能会出现
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
瓶颈。但 FastDFS 架构中,Tracker Server 不会称为系统瓶颈,数据
最终是与一个 available 的 Storage Server 进行传输的。
简单总结一下,FastDFS 的特点包括:
高可靠性:无单点故障
高吞吐量:只要 Group 足够多,数据流量是足够分散的
2.3 FastDFS 安装和配置
2.3.1 旧版本 FastDFS 说明
FastDFS 有一部分是网络通信功能,旧版本 FastDFS(FastDFS 2.0 之间
版本)没有直接使用 epoll 实现,而是通过 libevent 实现(libevent 是
一个用 C 语言编写的、轻量级的开源高性能网络库),但是最新版的
FastDFS 最终网络 IO 这部分重新用 epoll 实现。
所以如果是 FastDFS 是 2.0 之前的版本,请先安装好 libevent 环境(新
版本不需要安装)。
libevent 下载地址:http://libevent.org
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
2.3.2 libfastcommon 的安装
libfastcommon 为 FastDFS 操作的基础库,FastDFS 没有使用标准的库,而是封装
了一套和 FastDFS 相关的库。
libfastcommon 的 git 下载地址:https://github.com/happyfish100/libfastcommon
安装 FastDFS 前,需要安装
libfastcommon(01_package\01_fdfs\libfastcommon-1.0.7.tar.gz):
1) 解压压缩包:tar -xzvf libfastcommon-1.0.7.tar.gz
2) 进入解压后的目录
3) 编译代码:./make.sh
4) 安装:sudo ./make.sh install
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090
5) 动态库安装后的路径
安装成功后,默认会复制到/usr/lib64 下:
6) 设置环境变量或者创建软链接
由于系统不会自动在/usr/lib64 找动态库,所以需要人为设置环境变量
或者创建软链接(两者选一):
1
export
LD_LIBRARY_PATH=/usr/lib64/:$LD_LIBRARY_PATH
2
sudo ln -s /usr/lib64/libfastcommon.so
/usr/lib/libfastcommon.so(推荐)
2.3.3 FastDFS 的安装
FastDFS 源代码下载地址:
https://code.google.com/archive/p/fastdfs/downloads
https://github.com/happyfish100/fastdfs.git
北京市昌平区建材城西路金燕龙办公楼一层 电话:400-618-9090