通过docker配置Fastdfs文件系统

2022-12-02 10:22:17 浏览数 (1)

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

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

0 人点赞