分布式存储介绍
传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储应用的需求。
分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。
FastDFS介绍
FastDFS是一款开源的轻量级分布式文件系统, 由淘宝开发平台部资深架构师余庆开发。它对文件进行管理,功能包括文件存储、文件同步、文件访问(文件上传、文件下载、文件删除)等,解决了大容量存储和负载均衡的问题。
FastDFS是一款类GoogleFS的开源分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等类UNIX系统。它只能通过专有API对文件进行存取访问,不支持POSIX接口方式,不能mount使用。准确地讲,GoogleFS以及FastDFS、mogileFS、HDFS、TFS等类GoogleFS都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。
github地址:https://github.com/happyfish100/fastdfs
FastDFS系统架构
FastDFS由三部分组成:
- Tracker Server: 跟踪器。跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。
- Storage Server: 存储节点。保存文件和文件属性,直接利用OS的文件系统调用管理文件。
- Client: 客户端。作为业务请求的发起方,通过专有接口,使用TCP/IP协议与Tracker server或Storage server进行数据交互。
FastDFS架构图:
上传文件
首先Client请求Tracker Server获取到Storage Server的ip地址和端口,然后Client根据返回的IP和端口请求上传文件,Storage Server接收到请求后生产文件,并且将文件内容写入磁盘并把 file_id、路径、文件名等信息返回给Client,Client保存相关信息后上传完毕。
下载文件
Client带上文件名信息请求Tracker Server获取到Storage Server的ip和端口,然后Client根据返回的IP和端口请求下载文件,Storage Server接收到请求后返回文件给Client。
安装
旧版FastDFS(FastDFS 2.0之前版本)没有直接使用epoll实现,而是通过libevent 实现(libevent 是一个用C语言编写的、轻量级的开源高性能网络库),而新的FastDFS网络IO这部分是重新用epoll实现。所以如果是FastDFS是2.0之前的版本,需要先安装好libevent环境(新版本不需要安装)。
安装libfastcommon
libfastcommon为FastDFS操作的基础库,FastDFS没有使用标准的库,而是封装了一套和FastDFS相关的库。安装FastDFS之前需要安装libfastcommon。
代码语言:javascript复制libfastcommon github地址:https://github.com/happyfish100/libfastcommon
# 解压
tar -zxvf libfastcommon-1.0.7.tar.gz
# 进入源码目录
cd libfastcommon-1.0.7
# 编译
./make.sh
# 安装
sudo ./make.sh install
安装成功后,libfastcommon.so会被复制到/usr/lib64/路径下。
安装FastDFS
FastDFS github地址:https://github.com/happyfish100/fastdfs
FastDFS安装过程和libfastcommon是一样的
代码语言:javascript复制# 解压
tar -zxvf fastdfs-5.12.tar.gz
# 进入源码目录
cd fastdfs-5.12
# 编译
./make.sh
# 安装
sudo ./make.sh install
可执行程序会被安装到/usr/bin/路径下
安装成功后,会自动在/etc/fdfs/下生成几个配置文件
fdfs_test命令可用来测试是否安装成功
配置
进入到/etc/fdfs/路径下进行配置,首先复制一份三个配置文件
代码语言:javascript复制cd /etc/fdfs/
sudo cp client.conf.sample client.conf
sudo cp storage.conf.sample storage.conf
sudo cp tracker.conf.sample tracker.conf
然后在家目录下创建fastdfs目录(可以自行指定,不必放在家目录下)后,在fastdfs下创建tracker storage client三个子目录
代码语言:javascript复制mkdir fastdfs
cd fastdfs
mkdir tracker storage client
Tracker配置
修改配置文件tracker.conf,这里主要列出几个重要的配置项
代码语言:javascript复制# 跟踪器绑定的ip,为空表示绑定本机所有ip
bind_addr=
# 绑定的端口号
port=22122
# log目录,使用之前创建的tracker文件夹
base_path=/home/ifantsai/fastdfs/tracker/
Storage配置
修改配置文件storage.conf,这里主要列出几个重要的配置项
代码语言:javascript复制# 存储节点所属组
group_name=group1
# 存储节点绑定的ip,为空表示绑定本机所有ip
bind_addr=
# 绑定的端口号
port=23000
# log目录,使用之前创建的storage文件夹
base_path=/home/ifantsai/fastdfs/storage/
# 存储目录个数
store_path_count=1
# 存储目录,使用之前创建的storage文件夹
store_path0=/home/ifantsai/fastdfs/storage/
# 跟踪器的IP和端口 (注:不要使用:127.0.0.1)
tracker_server=192.168.43.146:22122
Client配置
修改配置文件client.conf,这里主要列出几个重要的配置项
代码语言:javascript复制# log目录,使用之前创建的client文件夹
base_path=/home/ifantsai/fastdfs/client/
# 跟踪器的IP和端口 (注:不要使用:127.0.0.1)
tracker_server=192.168.43.146:22122
启动测试
先启动跟踪器
代码语言:javascript复制fdfs_trackerd /etc/fdfs/tracker.conf
启动存储节点
代码语言:javascript复制fdfs_storaged /etc/fdfs/storage.conf
测试
代码语言:javascript复制fdfs_monitor /etc/fdfs/client.conf
执行后输出一对信息,如下图处显示ACTIVE表示存储节点已激活
上传文件
代码语言:javascript复制# 格式:fdfs_upload_file /etc/fdfs/client.conf 文件名
fdfs_upload_file /etc/fdfs/client.conf wallhaven-250247.jpg
返回的就是上传的文件的存储路径和经过哈希计算的文件名,group1表示是所属组,M00表示在storage.conf中配置的store_path0的值,所以该文件的完整路径为/home/ifantsai/fastdfs/storage/data/00/00/wKgrkly3NY-ANAP6AACEQjQtgEQ567.jpg
下载文件
代码语言:javascript复制# 格式:fdfs_download_file /etc/fdfs/client.conf 上创文件时返回的路径
fdfs_download_file /etc/fdfs/client.conf group1/M00/00/00/wKgrkly3NY-ANAP6AACEQjQtgEQ567.jpg
本文作者: Ifan Tsai (菜菜)
本文链接: https://cloud.tencent.com/developer/article/2164576
版权声明: 本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!