FastDSF那些事-安装与使用

2019-12-17  本文已影响0人  Dane_404

FastDSF 是用 c 语言编写的一款开源的分布式文件系统,它非常适合存储图片等那些小文件,因为 FastDSF 不对文件进行分块,所以没有分块合并的开销,FastDSF 网络通信采用 socket ,通信速度很快。

工作流程

FastDFS架构包括 Tracker server 和 Storage server。客户端请求Tracker server 进行文件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。

Tracker Server 作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些策略找到 Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。

Storage Server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上,Storage server 没有实现自己的文件系统而是使用操作系统的文件系统来管理文件。

image.png
上传流程
image.png

客户端上传文件后 Storage Server 将文件 ID 返回给客户端,包括组名、路径等,如:

group1/M00/02/44/wkgDrE34wAAAAAAAAGkEI.sh

组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。
文件名:包含:源存储服务器IP地址、文件创建时间戳、文件大小、随机数和文件拓展名等信息。

下载流程
image.png

根据组名和路径找到对应的文件。

Centos 下安装 FastDFS

安装依赖

安装 GCC 依赖,用来对C语言代码进行编译运行

sudo yum -y install gcc

安装 unzip 工具,可以帮我们对压缩包进行解压

sudo yum install -y unzip zip

安装 libevent

sudo yum -y install libevent

安装 Nginx 所需依赖

sudo yum -y install pcre pcre-devel zlib zlib-devel openssl openssl-devel

安装 libfastcommon-master ,由于这个没有 yum 包,先到 https://github.com/happyfish100/libfastcommon下载,通过 fileZilla 上传到 Centos 的 /usr/local/fastDFS/ 下,解压

unzip libfastcommon-master.zip

然后 cd 进去,执行

sudo ./make.sh 
sudo ./makesh install
安装 FastDSF

上传 FastDSF 包到 /usr/local/fastDFS/ 下,下载地址是https://github.com/happyfish100/FastDFS,解压:

unzip fastdfs-master.zip

然后 cd 进去,执行

sudo ./make.sh 
sudo ./make.sh install

启动 tracker,先 cd 到 /etc/fdfs,把 tracker.conf.sample 改名为 tracker.conf

sudo cp tracker.conf.sample tracker.conf

可以修改配置设置 tracker 的数据和日志存放目录

sudo vim tracker.conf
base_path=xx/xx/xx

启动 tracker

sudo service fdfs_trackerd start

开机启动

sudo chkconfig fdfs_trackerd on

启动 storage,和 tracker 差不多,重命名配置文件

sudo cp storage.conf.sample storage.conf

修改配置文件

sudo vim storage.conf
base_path=/xxx/xxx/xxxx # storage的数据和日志存放目录
store_path0=/xxx/xxx/xxx # storage的上传文件存放路径
tracker_server=192.168.56.111:22122 # tracker的地址

启动 storage

sudo service fdfs_storaged start

开机启动

sudo chkconfig fdfs_storaged on

注意的是,要先把设置的路径目录创建出来,才能启动成功,ps -ef | grep fdfs 查看进程


image.png
FastDFS 的 Nginx 模块

下载 fastdfs-nginx-module,还是上传到 /usr/local/fastDFS/ 下,解压

unzip fastdfs-nginx-module-master.zip

cd 到 src 下 cd fastdfs-nginx-module-master/src,修改 config

vim config

执行下面命令(将配置中的/usr/local改为/usr)

:%s+/usr/local/+/usr/+g

将 src 下的 mod_fastdfs.conf 复制到 /etc/fdfs 目录下

sudo cp mod_fastdfs.conf /etc/fdfs/

然后编辑复制后的文件

connect_timeout=10                          # 客户端访问文件连接超时时长(单位:秒)
tracker_server=192.168.0.111:22122      # tracker服务IP和端口
url_have_group_name=true                # 访问链接前缀加上组名
store_path0=/home/fastDFS/storage   

然后 cd 到 fastDFS conf 目录,将部分配置复制到 /etc/fdfs/ 下

cd /usr/local/fastDFS/fastdfs-master/conf
cp http.conf mime.types /etc/fdfs/

然后安装 Nginx,解压后执行

sudo ./configure --prefix=/opt/nginx --sbin-path=/usr/bin/nginx --add-module=/usr/local/fastDFS/fastdfs-nginx-module-master/src

编译安装

sudo make && sudo make install

然后整合配置 nginx 整合 fastdfs-module 模块,

vim /opt/nginx/config/nginx.conf

加入

server {
        listen       80;
        server_name  image.ohome.com;

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

        location / {
            root   html;
            index  index.html index.htm;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
        
    }

重新加载配置

nginx -s reload
测试

新建工程引入依赖

<dependency>
    <groupId>net.oschina.zcx7878</groupId>
    <artifactId>fastdfs-client-java</artifactId>
    <version>1.27.0.0</version>
</dependency>

resource 下新建 config 目录,新建 fastdfs-client.properties

#http连接超时时间
fastdfs.connect_timeout_in_seconds = 5 
#tracker与storage网络通信超时时间
fastdfs.network_timeout_in_seconds = 30 
#字符编码
fastdfs.charset = UTF-8
#tracker服务器地址,多个地址中间用英文逗号分隔
fastdfs.tracker_servers = 192.168.0.111:22122 

测试类

@SpringBootTest
@RunWith(SpringRunner.class)
public class FastDFSTest {

    @Test
    public void upload() {

        try {
            ClientGlobal.initByProperties("config/fastdfs-client.properties");
            System.out.println("network_timeout=" + ClientGlobal.g_network_timeout + "ms");
            System.out.println("charset=" + ClientGlobal.g_charset);
            //创建客户端
            TrackerClient tc = new TrackerClient();
            //连接tracker Server
            TrackerServer ts = tc.getConnection();
            if (ts == null) {
                System.out.println("getConnection return null");
                return;
            }
            //获取一个storage server
            StorageServer ss = tc.getStoreStorage(ts);
            if (ss == null) {
                System.out.println("getStoreStorage return null");
            }
            //创建一个storage存储客户端
            StorageClient1 sc1 = new StorageClient1(ts, ss);

            String item = "/Users/czd/Downloads/WechatIMG21.jpeg";
            String fileid;
            fileid = sc1.upload_file1(item, "jpeg", null);
            System.out.println("Upload local file " + item + " ok, fileid=" + fileid);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

得到 /group1/M00/00/00/wKgAb13ufI2AdM3WAAGjQFQg_4g67.jpeg ,浏览器测试访问 http://image.ohome.com/group1/M00/00/00/wKgAb13ufI2AdM3WAAGjQFQg_4g67.jpeg

上一篇 下一篇

猜你喜欢

热点阅读