前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速学习-fastDFS入门

快速学习-fastDFS入门

作者头像
cwl_java
发布2020-01-14 14:50:57
5530
发布2020-01-14 14:50:57
举报
文章被收录于专栏:cwl_Java

3 fastDFS入门

3.1 fastDFS安装与配置

3.1.1 导入虚拟机

  1. 使用Vmware打开虚拟机配置文件“CentOS 7 64 位.vmx”,提示如下图:
在这里插入图片描述
在这里插入图片描述
  1. 选择“我已复制该虚拟机”
  2. 启动虚拟机之前启动VMware的服务:
在这里插入图片描述
在这里插入图片描述
  1. 修改网卡的IP地址为101网段。
在这里插入图片描述
在这里插入图片描述
  1. 修改虚拟机网络配置 修改VMnet8的子网IP为101.0。
在这里插入图片描述
在这里插入图片描述

DHCP配置:

在这里插入图片描述
在这里插入图片描述
  1. 启动虚拟机 用户名:root 密码:centos
  2. 导入的虚拟机已经安装了fastDSF,直接启动fastDSF即可使用。

3.1.2 fastDFS安装

如果想自己尝试安装fastDSF也可以按照文档一步一步安装。

tracker和storage使用相同的安装包,fastDFS的下载地址在:https://github.com/happyfish100/FastDFS

建议在linux上运行,本教程使用CentOS7作为安装环境。

详细内容请看 https://cwl-java.blog.csdn.net/article/details/103871043

3.1.3 Tracker配置

本小节介绍Tracker的配置文件内容。 fastDFS的配置文件目录 : /etc/fdfs 主要的配置文件: /etc/fdfs/tracker.conf (tracker配置文件 ); storage.conf(storage配置文件)

在这里插入图片描述
在这里插入图片描述

tracker.conf配置内容如下: 端口:port=22122 存储策略:store_lookup= 取值范围:0(轮询向storage存储文件)、1(指定具体的group)、2负载均衡,选择空闲的storage存储 指定具体的group:store_group= 如果store_lookup设置为1则这里必须指定一个具体的group。 tracker 基础目录:base_path=/home/fastdfs,tracker在运行时会向此目录存储storage的管理数据。

3.1.4 storage配置

本小节介绍storage的配置文件内容。 storage.conf配置 内容如下: 组名:group_name=group1 端口:port=23000 向tracker心跳间隔(秒):heart_beat_interval=30 storage基础目录:base_path=/home/fastdfs 磁盘存储目录,可定义多个store_path: store_path0=/home/fastdfs/fdfs_storage 此目录下存储上传的文件,在/home/fastdfs/fdfs_storage/data下 store_path1= … 上报tracker的地址:tracker_server=192.168.101.64:22122 如果有多个tracker则配置多个tracker,比如: tracker_server=192.168.101.64:22122 tracker_server=192.168.101.65:22122

3.1.5 启动停止

fastDFS启动/停止脚本目录:

在这里插入图片描述
在这里插入图片描述

fdfs_trackerd:tracker脚本,通过此脚本对 tracker进行启动和停止 /usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart

fdfs_storaged:storage脚本,通过此脚本对 storage进行启动和停止 /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart

3.2 文件上传下载测试

3.2.1搭建环境

这里我们使用javaApi测试文件的上传,java版本的fastdfs-client地址在:https://github.com/happyfish100/fastdfs-client-java,参考此工程编写测试用例。

1)创建maven工程 pom.xml

代码语言:javascript
复制
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring‐boot‐starter‐parent</artifactId>
        <version>1.5.9.RELEASE</version>
    </parent>
    <groupId>com.xuecheng</groupId>
    <artifactId>test‐fastDSF</artifactId>
    <version>1.0‐SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring‐boot‐starter‐web</artifactId>
        </dependency>
        <!‐‐ https://mvnrepository.com/artifact/net.oschina.zcx7878/fastdfs‐client‐java ‐‐>
        <dependency>
            <groupId>net.oschina.zcx7878</groupId>
            <artifactId>fastdfs‐client‐java</artifactId>
            <version>1.27.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring‐boot‐starter‐test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons‐io</artifactId>
            <version>1.3.2</version>
        </dependency>
    </dependencies>
  1. 配置 文件 在classpath:config下创建fastdfs-client.properties文件
代码语言:javascript
复制
fastdfs.connect_timeout_in_seconds = 5 
#http连接超时时间 
fastdfs.network_timeout_in_seconds = 30 
#tracker与storage网络通信超时时间 
fastdfs.charset = UTF‐8 
#字符编码 
fastdfs.tracker_servers = 192.168.101.64:22122 
#tracker服务器地址,多个地址中间用英文逗号分隔

3.2.2 文件上传

代码语言:javascript
复制
    //上传文件 
    @Test
    public void testUpload() {
        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);
            NameValuePair[] meta_list = null;
            //new NameValuePair[0]; 
            String item = "C:\\Users\\admin\\Desktop\\1.png";
            String fileid;
            fileid = sc1.upload_file1(item, "png", meta_list);
            System.out.println("Upload local file " + item + " ok, fileid=" + fileid);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

3.2.3 文件查询

代码语言:javascript
复制
	//查询文件
    @Test
    public void testQueryFile() throws IOException, MyException {
        ClientGlobal.initByProperties("config/fastdfs‐client.properties");
        TrackerClient tracker = new TrackerClient();
        TrackerServer trackerServer = tracker.getConnection();
        StorageServer storageServer = null;
        StorageClient storageClient = new StorageClient(trackerServer, storageServer);
        FileInfo fileInfo = storageClient.query_file_info("group1", "M00/00/01/wKhlQFrKBSOAW5AWAALcAg10vf4862.png");
        System.out.println(fileInfo);
    }

3.2.4 文件下载

代码语言:javascript
复制
	// 文件下载
    @Test
    public void testDownloadFile() throws IOException, MyException {
        ClientGlobal.initByProperties("config/fastdfs‐client.properties");
        TrackerClient tracker = new TrackerClient();
        TrackerServer trackerServer = tracker.getConnection();
        StorageServer storageServer = null;
        StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
        byte[] result = storageClient1.download_file1("group1/M00/00/01/wKhlQFrKBSOAW5AWAALcAg10vf4862.png");
        File file = new File("d:/1.png");
        FileOutputStream fileOutputStream = new FileOutputStream(file);
        fileOutputStream.write(result);
        fileOutputStream.close();
    }

3.3 搭建图片虚拟主机

3.3.1 在storage上安装Nginx

在 storage server 上安装 nginx 的目的是对外通过 http 访问 storage server 上的文 件。使用 nginx 的模块 FastDFS-nginx-module 的作用是通过 http 方式访问 storage 中 的文件,当 storage 本机没有要找的文件时向源 storage 主机代理请求文件。

参考:https://cwl-java.blog.csdn.net/article/details/103871043 安装完成启动storage上的nginx

代码语言:javascript
复制
/usr/local/nginx/sbin/nginx ‐c /usr/local/nginx/conf/nginx‐fdfs.conf

3.3.2 配置Nginx图片服务虚拟机主机

图片服务虚拟主机的作用是负载均衡,将图片请求转发到storage server上。

1、通过图片服务虚拟主机请求图片流程图

在这里插入图片描述
在这里插入图片描述

3、在nginx图片代理服务上配置图片服务器虚拟主机

代码语言:javascript
复制
#图片服务 
upstream img_server_pool{ 
	#server 
	192.168.101.64:80 
	weight=10; 
	server 
	192.168.101.65:80 
	weight=10; 
} 
#图片服务 
server { 
	listen 80; 
	server_name img.xuecheng.com; 
	#个人中心 
	location /group1 { 
		proxy_pass http://img_server_pool; }location /group2 { 
			proxy_pass http://img_server_pool; 
		} 
	}

3.3.3 图片服务器启动

代码语言:javascript
复制
1、启动tracker:/usr/bin/fdfs_trackerd /etc/fdfs/tracker.conf restart 
2、启动storage:/usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart 
3、启动storage上的nginx:/usr/local/nginx/sbin/nginx ‐c /usr/local/nginx/conf/nginx‐fdfs.conf 
4、启动图片虚拟主机 nginx

4 总结

通过本次课程的学习您要达到以下目标: 1)了解分布式文件系统的概念及应用场景 分布式文件系统是通过网络将单机上的文件系统组成一个网络文件系统。 分布式文件系统主要应用在大型互联网项目中,实现图片存储、音视频存储等服务。 分布式文件系统的优点:可以快速扩容存储,提高文件访问速度。 2)理解fastDFS的工作原理 fastDFS由tracker和storage组成,它们都可以部署集群。 tracker负责调度,storage负责存储。 3)掌握fastDFS存取文件方法 客户端与fastDFS采用socket协议通信,可以采用官方提供的java版本的fastDSF-client快速开发。 4)能够动手搭建一个fastDSF文件服务器

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 3 fastDFS入门
    • 3.1 fastDFS安装与配置
      • 3.1.1 导入虚拟机
      • 3.1.2 fastDFS安装
      • 3.1.3 Tracker配置
      • 3.1.4 storage配置
      • 3.1.5 启动停止
    • 3.2 文件上传下载测试
      • 3.2.1搭建环境
      • 3.2.2 文件上传
      • 3.2.3 文件查询
      • 3.2.4 文件下载
    • 3.3 搭建图片虚拟主机
      • 3.3.1 在storage上安装Nginx
      • 3.3.2 配置Nginx图片服务虚拟机主机
      • 3.3.3 图片服务器启动
  • 4 总结
相关产品与服务
TDSQL MySQL 版
TDSQL MySQL 版(TDSQL for MySQL)是腾讯打造的一款分布式数据库产品,具备强一致高可用、全球部署架构、分布式水平扩展、高性能、企业级安全等特性,同时提供智能 DBA、自动化运营、监控告警等配套设施,为客户提供完整的分布式数据库解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档