前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >通过docker配置Fastdfs文件系统

通过docker配置Fastdfs文件系统

作者头像
向着百万年薪努力的小赵
发布2022-12-02 10:22:17
9150
发布2022-12-02 10:22:17
举报
文章被收录于专栏:小赵的Java学习

1 Fastdfs简单介绍

1.1 什么是fastdfs

  FastDFS是一个开源的轻量级分布式文件系统。它解决了大数据量存储和负载均衡等问题。特别适合以中小文件(建议范围:4KB < file_size <500MB)为载体的在线服务,如相册网站、视频网站等等。在UC基于FastDFS开发向用户提供了:网盘,社区,广告和应用下载等业务的存储服务。

FastDFS是一款开源的轻量级分布式文件系统纯C实现,支持Linux、FreeBSD等UNIX系统类google FS,不是通用的文件系统,只能通过专有API访问,目前提供了C、Java和PHP API为互联网应用量身定做,解决大容量文件存储问题,追求高性能和高扩展性FastDFS可以看做是基于文件的key value pair存储系统,称作分布式文件存储服务更为合适。

1.2 Fastdfs特性

  1. 文件不分块存储,上传的文件和OS文件系统中的文件一一对应
  2. 支持相同内容的文件只保存一份,节约磁盘空间
  3. 下载文件支持HTTP协议,可以使用内置Web Server,也可以和其他Web Server配合使用
  4. 支持在线扩容
  5. 支持主从文件
  6. 存储服务器上可以保存文件属性(meta-data)V2.0网络通信采用libevent,支持大并发访问,整体性能更好

1.3Fastdfs相关概念

  FastDFS服务端有三个角色:跟踪服务器(tracker server)、存储服务器(storage server)和客户端(client)。

1.3.1 Tracker-server

  跟踪服务器,主要做调度工作,起负载均衡的作用。在内存中记录集群中所有存储组和存储服务器的状态信息,是客户端和数据服务器交互的枢纽。相比GFS中的master更为精简,不记录文件索引信息,占用的内存量很少。   Tracker是FastDFS的协调者,负责管理所有的storage server和group,每个storage在启动后会连接Tracker,告知自己所属的group等信息,并保持周期性的心跳,tracker根据storage的心跳信息,建立group==>[storage server list]的映射表。   Tracker需要管理的元信息很少,会全部存储在内存中;另外tracker上的元信息都是由storage汇报的信息生成的,本身不需要持久化任何数据,这样使得tracker非常容易扩展,直接增加tracker机器即可扩展为tracker cluster来服务,cluster里每个tracker之间是完全对等的,所有的tracker都接受stroage的心跳信息,生成元数据信息来提供读写服务。

1.3.2 Storage-server

  存储服务器(又称:存储节点或数据服务器),文件和文件属性(meta data)都保存到存储服务器上。Storage server直接利用OS的文件系统调用管理文件。   Storage server(后简称storage)以组(卷,group或volume)为单位组织,一个group内包含多台storage机器,数据互为备份,存储空间以group内容量最小的storage为准,所以建议group内的多个storage尽量配置相同,以免造成存储空间的浪费。   以group为单位组织存储能方便的进行应用隔离、负载均衡、副本数定制(group内storage server数量即为该group的副本数),比如将不同应用数据存到不同的group就能隔离应用数据,同时还可根据应用的访问特性来将应用分配到不同的group来做负载均衡;缺点是group的容量受单机存储容量的限制,同时当group内有机器坏掉时,数据恢复只能依赖group内地其他机器,使得恢复时间会很长。   group内每个storage的存储依赖于本地文件系统,storage可配置多个数据存储目录,比如有10块磁盘,分别挂载在/data/disk1-/data/disk10,则可将这10个目录都配置为storage的数据存储目录。   storage接受到写文件请求时,会根据配置好的规则(后面会介绍),选择其中一个存储目录来存储文件。为了避免单个目录下的文件数太多,在storage第一次启动时,会在每个数据存储目录里创建2级子目录,每级256个,总共65536个文件,新写的文件会以hash的方式被路由到其中某个子目录下,然后将文件数据直接作为一个本地文件存储到该目录中。

1.3.3Client

  客户端,作为业务请求的发起方,通过专有接口,使用TCP/IP协议与跟踪器服务器或存储节点进行数据交互。FastDFS向使用者提供基本文件访问接口,比如upload、download、append、delete等,以客户端库的方式提供给用户使用。

1.3.4Group

  组, 也可称为卷。 同组内服务器上的文件是完全相同的 ,同一组内的storage server之间是对等的, 文件上传、 删除等操作可以在任意一台storage server上进行 。

1.3.5Meta-data

  文件相关属性,键值对( Key Value Pair) 方式,如:width=1024,heigth=768

1.3.6部署图

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

2 准备工作

个人使用附件服务建议直接搭建在虚拟机上,方便使用 所需软件: VMware上安装centos7且能联网的虚拟机

3.安装docker

3.1docke环境准备

Docker支持以下的CentOS版本:   1、Docker运行在CentOS 7(64-bit)上要求系统为64位,系统内核版本为3.10以上   2、Docker运行在Centos 6.5或者更高的版本上,要求系统为64位,系统内核版本为2.6.32-431或者更高版本

3.2查看centos版本和内核版本

查看系统版本:cat /etc/centos-release 查看内核版本:uname -a

3.3docker 安装

1、安装系统依赖工具

代码语言:javascript
复制
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

2、yum的配置管理,添加docker的软件源地址

代码语言:javascript
复制
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、更新yum缓存

代码语言:javascript
复制
sudo yum makecache fast

4、可以查看所有仓库中所有docker版本,并选择特定版本安装

代码语言:javascript
复制
yum list docker-ce --showduplicates | sort -r

5、选择docker版本安装,由于repo中默认只开启stable仓库,这里安装的是最新版本

代码语言:javascript
复制
sudo yum install docker-ce

6、启动docker服务

代码语言:javascript
复制
sudo systemctl start docker

7、加入开机启动项

代码语言:javascript
复制
sudo systemctl enable docker

8、查看docker版本

代码语言:javascript
复制
docker version

4. 使用docker搭建FastDFS文件系统

1.首先下载FastDFS文件系统的docker镜像

代码语言:javascript
复制
[root@localhost /]# docker search fastdfs
安装镜像
[root@localhost ~]# docker pull season/fastdfs
[root@localhost ~]# docker images

2.使用docker镜像构建tracker容器(跟踪服务器,起到调度的作用): 关闭防火墙

代码语言:javascript
复制
[root@localhost /]# systemctl stop firewalld

这里的防火墙也要关 进入编辑模式:

代码语言:javascript
复制
[root@localhost /]# vi /etc/sysconfig/selinux

将SELINUX的值改成disabled,如下:

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

改完配置后重启

代码语言:javascript
复制
[root@localhost /]# reboot

创建tracker容器

代码语言:javascript
复制
[root@localhost /]# docker run -ti -d --name trakcer -v ~/tracker_data:/fastdfs/tracker/data --net=host season/fastdfs tracker

Tracker服务器的端口默认是22122,你可以查看是否启用端口

代码语言:javascript
复制
[root@localhost /]# netstat -aon | grep 22122

3.使用docker镜像构建storage容器(存储服务器,提供容量和备份服务): (注意修改自己的ip)

代码语言:javascript
复制
docker run -tid --name storage -v ~/storage_data:/fastdfs/storage/data -v ~/store_path:/fastdfs/store_path --net=host -e TRACKER_SERVER:192.168.115.130:22122 -e GROUP_NAME=group1 season/fastdfs storage

4.此时两个服务都已启动,进行服务的配置。 进入storage容器,到storage的配置文件中配置http访问的端口,配置文件在fdfs_conf目录下的storage.conf。

代码语言:javascript
复制
[root@localhost /]# docker exec -it storage bash
[root@localhost:/# cd fdfs_conf
[root@localhost:/fdfs_conf# more storage.conf
在这里插入图片描述
在这里插入图片描述

往下拉,你会发现storage容器的ip不是你linux的ip,如下:

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

接下来,退出storage容器,并将配置文件拷贝一份出来:

代码语言:javascript
复制
[root@localhost ~]# docker cp storage:/fdfs_conf/storage.conf ~/
[root@localhost ~]# vi ~/storage.conf
在这里插入图片描述
在这里插入图片描述

将修改后的配置文件拷贝到storagee的配置目录下:

代码语言:javascript
复制
[root@localhost ~]# docker cp ~/storage.conf storage:/fdfs_conf/

重新启动storage容器:

代码语言:javascript
复制
[root@localhost ~]# docker stop storage
[root@localhost ~]# docker start storage

查看tracker容器和storage容器的关联

代码语言:javascript
复制
[root@localhost ~]# docker exec -it storage bash
[root@localhost:/# cd fdfs_conf
[root@localhost:/fdfs_conf# fdfs_monitor storage.conf
在这里插入图片描述
在这里插入图片描述

5.在docker模拟客户端上传文件到storage容器

开启一个客户端

代码语言:javascript
复制
[root@localhost 00]# docker run -tid --name fdfs_sh --net=host season/fastdfs sh

更改配置文件,因为之前已经改过一次了,所以现在直接拷贝

代码语言:javascript
复制
[root@localhost 00]# docker cp ~/storage.conf  fdfs_sh:/fdfs_conf/

创建一个txt文件

代码语言:javascript
复制
[root@localhost 00]# docker exec -it fdfs_sh bash
[root@localhost:/# echo hello>a.txt

进入fdfs_conf目录,并将文件上传到storage容器

代码语言:javascript
复制
[root@localhost:/# cd fdfs_conf
[root@localhost:/fdfs_conf# fdfs_upload_file storage.conf /a.txt

/a.txt:指要上传的文件 上传之后,根据返回的路径去找a.txt

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

退出去查看上传的txt文件

代码语言:javascript
复制
[root@localhost ~]# cd ~/store_path/data/00/00
[root@localhost 00]# ls
[root@localhost 00]# more wKhzg1wGsieAL-3RAAAABncc3SA337.txt

别忘了关防火墙 到此已经配置完成

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Fastdfs简单介绍
    • 1.1 什么是fastdfs
      • 1.2 Fastdfs特性
        • 1.3Fastdfs相关概念
          • 1.3.1 Tracker-server
          • 1.3.2 Storage-server
          • 1.3.3Client
          • 1.3.4Group
          • 1.3.5Meta-data
          • 1.3.6部署图
      • 2 准备工作
      • 3.安装docker
        • 3.1docke环境准备
          • 3.2查看centos版本和内核版本
            • 3.3docker 安装
            • 4. 使用docker搭建FastDFS文件系统
            • 5.在docker模拟客户端上传文件到storage容器
            相关产品与服务
            对象存储
            对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档