FastDFS 分布式文件系统

时间:2019-10-19 20:51:17   收藏:0   阅读:51

FastDFS

什么是分布式文件系统

为什么会有分布文件系统

存在问题

解决办法

示例图

技术分享图片

好处

主流的分布式文件系统

NFS(Network File System),即网络文件系统

结构图

技术分享图片

GFS(Google File System)

结构图

技术分享图片

HDFS(Hadoop Distributed File System)

结构图

技术分享图片

什么是fastDFS

简介

FastDFS是用c语言编写的一款开源的分布式文件系统,它是由淘宝资深架构师余庆编写并开源。

FastDFS专为互联 网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标

使用FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务

为什么要使用fastDFS

通用分布式文件系统

专用分布式文件系统

fastDFS工作原理

结构图

技术分享图片

Tracker

作用
    Tracker Server作用是负载均衡和调度,
    通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。
    可以将tracker称为追踪服务器或调度服务器。
集群
    FastDFS集群中的Tracker server可以有多台
    Tracker server之间是相互平等关系同时提供服务.
    客户端请求Tracker server采用轮询方式,如果请求的tracker无法提供服务则换另一个tracker。 

Storage

作用
    Storage Server作用是文件存储,客户端上传的文件最终存储在Storage服务器上
    
集群
     Storage集群采用了分组存储方式。storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和
    一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,
    不同组的Storage server之间不会相互通信
    同组内的Storage server之间会相互连接进行文件同步,从而保证同组内每个storage上的文件是完全一致的
    一个组的存储容量为该组内的存储服务器容量最小的那个
    采用分组存储方式的好处
        灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由tracker进行调度选择。
        一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向 扩容)
        当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。

Storage状态收集
    Storage server会连接集群中所有的Tracker server,定时向他们报告自己的状态,
    包括磁盘剩余空间、文件同步 状况、文件上传下载次数等统计信息。

FastDFS安装与配置

1.需要安装 gcc

yum install gcc-c++ 

2.安装libevent(FastDFS依赖libevent库)

yum -y install libevent 

3.安装libfastcommon (由 FastDFS 官方提供,包含了 FastDFS 运行所需要的一些基础库)

将libfastcommonV1.0.7.tar.gz拷贝至/usr/local/下
cd /usr/local/
tar -zxvf libfastcommonV1.0.7.tar.gz 
cd libfastcommon-1.0.7
./make.sh
./make.sh install

libfastcommon安装好后会自动将库文件拷贝至/usr/lib64下

4.安装libevent

cd /usr/local/
tar -zxvf libevent-2.0.15-stable.tar.gz 
cd libevent-2.0.15-stable/
./configure
make && make install
ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5

4.安装libevent

cd /usr/local/
tar -zxvf libevent-2.0.15-stable.tar.gz 
cd libevent-2.0.15-stable/
./configure
make && make install
ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5

5.tracker编译安装

将FastDFS_v5.05.tar.gz拷贝至/usr/local/下 
tar -zxvf FastDFS_v5.05.tar.gz 
cd FastDFS 
./make.sh 
./make.sh install

安装成功将安装目录下的conf下的文件拷贝到/etc/fdfs/下
cp -ri conf/* /etc/fdfs
    
进入/etc/fdfs目录
cd /etc/fdfs
    
修改tracker.conf 
vim tracker.conf
base_path=/home/fastdfs
http.server_port=80

创建目录
    mkdir -p /home/fastdfs
            
启动
    /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

6.进入/etc/fdfs

cd /etc/fdfs
vi storage.conf 
group_name=group1 
base_path=/home/yuqing/FastDFS改为:base_path=/home/fastdfs 
store_path0=/home/fastdfs/fdfs_storage
#配置tracker服务器:IP如果有多个则配置多个tracker
tracker_server=192.168.1.88:22122   
http.server_port=80 

mkdir -p /home/fastdfs/fdfs_storage 
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

查看是否启动
ps aux|grep dfs

文件上传流程

流程图

技术分享图片

文件信息

客户端上传文件后,存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。
文件索引信息 包括:组名,虚拟磁盘路径,数据两级目录,文件名

组名:
    文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
    
虚拟磁盘路径:
    storage配置的虚拟路径,与磁盘选项store_path*对应。如果配置了store_path0则是M00, 如果配置了store_path1则是M01,以此类推。 
    
数据两级目录:
    storage服务器在每个虚拟磁盘路径下创建的两级目录,用于存储数据文件
    
文件名:
    是由存储服务器根据特定信息生成,文件名包含:源存储服务器IP地址、文件创 建时间戳、文件大小、随机数和文件拓展名等信息

通过客户端上传图片

添加fastdfs依赖

<dependencies>
    <dependency>
        <groupId>org.csource.fastdfs</groupId>
        <artifactId>fastdfs</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>

在resources当中创建fdfs_client.conf配置文件

# connect timeout in seconds
# default value is 30s
connect_timeout=30

# network timeout in seconds
# default value is 30s
network_timeout=60

# the base path to store log files
base_path=/home/fastdfs

# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=192.168.1.88:22122

#standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info

# if use connection pool
# default value is false
# since V4.05
use_connection_pool = false

# connections whose the idle time exceeds this time will be closed
# unit: second
# default value is 3600
# since V4.05
connection_pool_max_idle_time = 3600

# if load FastDFS parameters from tracker server
# since V4.05
# default value is false
load_fdfs_parameters_from_tracker=false

# if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V4.05
use_storage_id = false

# specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V4.05
storage_ids_filename = storage_ids.conf


#HTTP settings
http.tracker_server_port=80

#use "#include" directive to include HTTP other settiongs
##include http.conf

创建测试,上传图片

 public static void main(String[] args) throws Exception {
        //1. 加载配置文件
        ClientGlobal.init("D:\\Java\\testcode\\fastDFSProject\\src\\main\\resources\\fdfs_client.conf");
        //2. 创建管理端对象
        TrackerClient trackerClient = new TrackerClient();
        //3. 通过管理端对象获取连接
        TrackerServer connection = trackerClient.getConnection();
        //4. 创建存储端对象
        StorageClient1 storageClient = new StorageClient1(connection, null);

        //创建文件属性信息对象数组
        NameValuePair[] meta_list = new NameValuePair[3];
        meta_list[0] = new NameValuePair("fileName","idea");
        meta_list[1] = new NameValuePair("ExtName","jpg");
        meta_list[2] = new NameValuePair("zuozhe","gaowei");

        //5. 上传文件
        String path = storageClient.upload_file1("E:\\idea.jpg", "jpg", meta_list);
        System.out.println("======" + path);
    }

搭建图片服务虚拟主机

在Storage上安装nginx

安装FastDFS-nginx-module_v1.16

将 FastDFS-nginx-module_v1.16.tar.gz上到usr/local下
cd /usr/local 
tar -zxvf fastdfs-nginx-module_v1.16.tar.gz
rm -rf fastdfs-nginx-module_v1.16.tar.gz
cd fastdfs-nginx-module/src
修改config文件将带有/usr/local/的路径改为/usr/
vi config
esc后保存并退出 :wq
    
将FastDFS-nginx-module/src下的mod_FastDFS.conf拷贝至/etc/fdfs/下 
cp mod_fastdfs.conf /etc/fdfs/

修改mod_fastdfs.conf
vim /etc/fdfs/mod_fastdfs.conf
base_path=/home/fastdfs
tracker_server=192.168.1.88:22122 
url_have_group_name=true    
store_path0=/home/fastdfs/fdfs_storage 
esc后保存并退出 :wq
        
将libfdfsclient.so拷贝至/usr/lib下 
    cp /usr/lib64/libfdfsclient.so /usr/lib/
复制 FastDFS的部分配置文件到/etc/fdfs目录,根据相对应的安装情况进入到相对应的路径
    cd /usr/local/FastDFS/conf/
    cp http.conf mime.types /etc/fdfs/

nginx安装

        将nginx-1.8.1.tar.gz拷贝到/usr/local下

        cd /usr/local

        解压nginx-1.8.1.tar.gz 
            tar -zxvf nginx-1.8.1.tar.gz

            rm -rf nginx-1.8.1.tar.gz

        安装依赖包
            sudo yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel
        cd nginx-1.8.1/
        执行配置
            ./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/usr/local/fastdfs-nginx-module/src
        make
        make install
        useradd -s /sbin/nologin -M nginx
        id nginx

        启动
            nginx

        停止
            nginx -s stop 

        重新加载配置
            nginx -s reload

        查看是否启动
            ps -ef|grep nginx

        修改配置文件,添加上
            vim  /opt/nginx/conf/nginx.conf


#监听域名中带有group的,交给FastDFS模块处理
location ~/group([0-9])/ {
    ngx_fastdfs_module;
}

启动

/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart 
/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart
nginx

原文:https://www.cnblogs.com/mumuyinxin/p/11705056.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!