专栏首页运维猫CentOS7 搭建FastDFS分布式文件系统(上)

CentOS7 搭建FastDFS分布式文件系统(上)

1.1 简介

FastDFS的作者淘宝资深架构余庆,这个优秀的轻量及的分布式文件系统的开源没多久,立马就火了。FastDFS是为互联网应用量身定做的一套分布式文件存储系统,非常适合用来存储用户图片、视频、文档等文件。对于互联网应用,和其他分布式文件系统相比,优势非常明显。

1.2 详细介绍

FastDFS是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage)。跟踪器主要做调度工作,在访问上起负载均衡的作用。

存储节点存储文件,完成文件管理的所有功能:存储、同步和提供存取接口,FastDFS同时对文件的meta data进行管理。所谓文件的meta data就是文件的相关属性,以键值对(key value pair)方式表示,如:width=1024,其中的key为width,value为1024。文件meta data是文件属性列表,可以包含多个键值对。

跟踪器和存储节点都可以由一台或多台服务器构成。跟踪器和存储节点中的服务器均可以随时增加或下线而不会影响线上服务。其中跟踪器中的所有服务器都是对等的,可以根据服务器的压力情况随时增加或减少。

为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式。存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷 的文件容量累加就是整个存储系统中的文件容量。一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起 到了冗余备份和负载均衡的作用。

在卷中增加服务器时,同步已有的文件由系统自动完成,同步完成后,系统自动将新增服务器切换到线上提供服务。

当存储空间不足或即将耗尽时,可以动态添加卷。只需要增加一台或多台服务器,并将它们配置为一个新的卷,这样就扩大了存储系统的容量。

FastDFS中的文件标识分为两个部分:卷名和文件名,二者缺一不可。

1.3 FastDFS架构

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

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

Storageserver作用是文件存储,客户端上传的文件最终存储在Storage服务器上,Storage server没有实现自己的文件系统而是利用操作系统 的文件系统来管理文件。可以将storage称为存储服务器。

如下图:

1.4 Tracker 集群

Storage集群采用了分组存储方式。storage集群由一个或多个组构成,集群存储总容量为集群中所有组的存储容量之和。一个组由一台或多台存储服务器组成,组内的Storage server之间是平等关系,不同组的Storageserver之间不会相互通信,同组内的Storageserver之间会相互连接进行文件同步,从而保证同组内每个storage上的文件完全一致的。一个组的存储容量为该组内存储服务器容量最小的那个,由此可见组内存储服务器的软硬件配置最好是一致的。

Storage集群

采用分组存储方式的好处是灵活、可控性较强。比如上传文件时,可以由客户端直接指定上传到的组也可以由tracker进行调度选择。一个分组的存储服务器访问压力较大时,可以在该组增加存储服务器来扩充服务能力(纵向扩容)。当系统容量不足时,可以增加组来扩充存储容量(横向扩容)。

1.5 上传文件交互过程

client询问tracker上传到的storage,不需要附加参数;

tracker返回一台可用的storage;

client直接和storage通讯完成文件上传。

1.6 下载文件交互过程

client询问tracker下载文件的storage,参数为文件标识(卷名和文件名);

tracker返回一台可用的storage;

client直接和storage通讯完成文件下载。

2.FastDFS安装准备

作者的GitHub地址:https://github.com/happyfish100

https://github.com/happyfish100/fastdfs/tree/V5.11

Version 5.11 对应的 fastdfs-nginx-module 的Version 1.20

Version 5.10 对应的 fastdfs-nginx-module 的Version 1.19

下载其它工具:

libfastcommon

fastdfs-nginx-module

fastdfs-client-java

nginx

https://github.com/happyfish100/libfastcommon/archive/master.zip

https://github.com/happyfish100/fastdfs-nginx-module/archive/master.zip

https://github.com/happyfish100/fastdfs-client-java/archive/master.zip

http://nginx.org/download/nginx-1.13.11.tar.gz

3. 安装libfastcommon

先安装解压工具:

[root@docker-01 opt]# yum -y install unzip zip

安装成功后解压 libfastcommon-master.zip

[root@docker-01 opt]# unzip libfastcommon-master.zip

进入刚解压的目录:

[root@docker-01 opt]# cd libfastcommon-master

[root@docker-01 libfastcommon-master]# ls

doc HISTORY INSTALL libfastcommon.spec make.sh php-fastcommon README src

编译前,先安装 gcc

[root@docker-01 libfastcommon-master]# yum -y install gcc-c++

然后执行:

[root@docker-01 libfastcommon-master]#./make.sh

[root@docker-01 libfastcommon-master]# ./make.sh install

libfastcommon默认会被安装到/usr/lib64/libfastcommon.so但是FastDFS的主程序却在/usr/local/lib目录下,这个时候我们就要建立一个软链接了。

[root@docker-01 libfastcommon-master]# ln -s /usr/lib64/libfastcommon.so /usr/local/lib/libfastcommon.so

[root@docker-01 libfastcommon-master]# ln -s /usr/lib64/libfastcommon.so /usr/lib/libfastcommon.so

[root@docker-01 libfastcommon-master]# ln -s /usr/lib64/libfdfsclient.so /usr/local/lib/libfdfsclient.so

[root@docker-01 libfastcommon-master]# ln -s /usr/lib64/libfdfsclient.so /usr/lib/libfdfsclient.so

4.安装FastDFS

4.1 解压 FastDFS 安装包

[root@docker-01 opt]# unzip fastdfs-master.zip

进入刚解压的目录:

4.2 编译安装

[root@docker-01 opt]# cd fastdfs-master/

[root@docker-01 fastdfs-master]# ./make.sh

[root@docker-01 fastdfs-master]# ./make.sh install

如果没有报错那么就成功了。

安装log中会提示FastDFS安装到了/etc/fdfs目录下。

成功后查看安装目录:

[root@docker-01 fastdfs-master]# cd /etc/fdfs/

[root@docker-01 fdfs]# ll

总用量 24

-rw-r--r--. 1 root root 1461 8月 31 23:27 client.conf.sample

-rw-r--r--. 1 root root 7978 8月 31 23:27 storage.conf.sample

-rw-r--r--. 1 root root 105 8月 31 23:27 storage_ids.conf.sample

-rw-r--r--. 1 root root 7443 8月 31 23:27 tracker.conf.sample

我们需要把这三个示例文件复制一份,去掉.sample。

cp client.conf.sample client.conf

cp storage.conf.sample storage.conf

cp tracker.conf.sample tracker.conf

FastDFS 安装完成。

5.安装tracker

5.1 创建tracker工作目录

这个目录可以自定义创建,用来保存tracker的data和log

下面创建的目录:

[root@docker-01 fdfs]# cd /usr/

[root@docker-01 usr]# mkdir yunweimao

[root@docker-01 usr]# cd yunweimao/

[root@docker-01 yunweimao]# mkdir fastdfs

[root@docker-01 yunweimao]# cd fastdfs/

[root@docker-01 fastdfs]# mkdir fastdfs_tracker

[root@docker-01 fastdfs]# cd fastdfs_tracker/

[root@docker-01 fastdfs_tracker]# pwd

/usr/yunweimao/fastdfs/fastdfs_tracker

/usr/yunweimao/fastdfs/fastdfs_tracker #这个是我最终创建的目录

5.2 配置tracker

[root@docker-01 fastdfs_tracker]# cd /etc/fdfs

[root@docker-01 fdfs]# vim tracker.conf

打开后注意以下4个配置:

disabled=false #默认开启

port=22122 #默认端口号

base_path=/usr/yunweimao/fastdfs/fastdfs_tracker #我刚刚创建的目录

http.server_port=6666 #默认端口是8080

5.3 启动tracker

保存配置后启动tracker:

[root@docker-01 fdfs]# service fdfs_trackerd start

如果不能启动,或提示用systemctl,则可用命令:

systemctl start fdfs_trackerd

成功后可以看到:

[root@docker-01 fdfs]# service fdfs_trackerd start

Reloading systemd: [ OK ]

Starting fdfs_trackerd (via systemctl): [ OK ]

进入刚刚创建的tracker目录,发现目录中多了data和log两个目录:

[root@docker-01 fdfs]# cd /usr/yunweimao/fastdfs/fastdfs_tracker/

[root@docker-01 fastdfs_tracker]# ll

总用量 0

drwxr-xr-x. 2 root root 60 8月 31 23:35 data

drwxr-xr-x. 2 root root 26 8月 31 23:35 logs

5.4 将tracker加入开机启动

[root@docker-01 fastdfs_tracker]# ll /etc/rc.d/rc.local

-rw-r--r--. 1 root root 473 10月 31 2018 /etc/rc.d/rc.local

发现并没有执行权限,需要权限:

[root@docker-01 fastdfs_tracker]# chmod +x /etc/rc.d/rc.local

加完成应该是这样的:

-rwxr-xr-x. 1 root root 473 10月 31 2018 /etc/rc.d/rc.local

修改rc.local

vim /etc/rc.d/rc.local

#!/bin/bash

# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES

#

# It is highly advisable to create own systemd services or udev rules

# to run scripts during boot instead of using this file.

#

# In contrast to previous versions due to parallel execution during boot

# this script will NOT be run after all other services.

#

# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure

# that this script will be executed during boot.

touch /var/lock/subsys/local

service fdfs_trackerd start

查看一下tracker的端口监听情况

[root@docker-01 fastdfs_tracker]# netstat -unltp|grep fdfs

tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 14234/fdfs_trackerd

端口22122成功监听

6.安装storage

storage的安装与tracker很类似.

6.1 为storage配置工作目录

与tracker不同的是,由于storage还需要一个目录用来存储数据,所以我另外多建了一个fasdfs_storage_data

下面是我的目录结构:

[root@docker-01 fastdfs]# ls

fastdfs_storage fastdfs_storage_data fastdfs_tracker

6.2修改storage配置文件

修改 storage.conf

vim /etc/fdfs/storage.conf

disabled=false

group_name=group1 #组名,根据实际情况修改

port=23000 #设置storage的端口号,默认是23000,同一个组的storage端口号必须一致

base_path=/usr/yunweimao/fastdfs/fastdfs_storage #设置storage数据文件和日志目录

store_path_count=1 #存储路径个数,需要和store_path个数匹配

store_path0=/usr/yunweimao/fastdfs/fastdfs_storage_data #实际文件存储路径

tracker_server=172.17.120.50:22122 #我CentOS7的ip地址

http.server_port=8888 #设置 http 端口号

修改保存后创建软链接:

[root@docker-01 fastdfs]# ln -s /usr/bin/fdfs_storaged /usr/local/bin

6.3 启动storage

[root@docker-01 fastdfs]# service fdfs_storaged start

如果不能启动,或提示用systemctl,则可改用命令:

systemctl start fdfs_storaged

成功后应该可以看到:

[root@docker-01 fastdfs]# service fdfs_storaged start

Starting fdfs_storaged (via systemctl): [ OK ]

6.4 设置开机启动

修改rc.local

vim /etc/rc.d/rc.local

#!/bin/bash

# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES

#

# It is highly advisable to create own systemd services or udev rules

# to run scripts during boot instead of using this file.

#

# In contrast to previous versions due to parallel execution during boot

# this script will NOT be run after all other services.

#

# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure

# that this script will be executed during boot.

touch /var/lock/subsys/local

service fdfs_trackerd start

service fdfs_storaged start

查看一下服务是否启动:

[root@docker-01 fastdfs]# netstat -unltp | grep fdfs

tcp 0 0 0.0.0.0:22122 0.0.0.0:* LISTEN 14234/fdfs_trackerd

tcp 0 0 0.0.0.0:23000 0.0.0.0:* LISTEN 14311/fdfs_storaged

服务已正常启动。

7.校验整合

到这里,fastdfs的东西都已安装完成,最后我们还要确定一下,storage是否注册到了tracker中去。

查看命令:

[root@docker-01 fastdfs]# /usr/bin/fdfs_monitor /etc/fdfs/storage.conf

成功后可以看到:

ip_addr = 172.17.120.50 (localhost.localdomain) ACTIVE

关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。

本文分享自微信公众号 - 运维猫(centos15),作者:胡齐

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CentOS7 搭建FastDFS分布式文件系统(下)

    前面一篇文章已对FastDFS的安装和配置,做了比较详细的讲解。FastDFS的基础模块都搭好了,现在开始测试下载。

    胡齐
  • heartbeat实现web服务器高可用

    heartbeat的工作原理:heartbeat最核心的包括两个。部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之...

    胡齐
  • 使用SVN+apache搭建版本控制服务器

    SVN(subversion)是近年来崛起的版本管理工具,是CVS的接班人。目前,绝大多数开源软件都使用svn作为代码版本管理软件。作为一个运维人员安装和配置S...

    胡齐
  • CentOS7 搭建FastDFS分布式文件系统(下)

    前面一篇文章已对FastDFS的安装和配置,做了比较详细的讲解。FastDFS的基础模块都搭好了,现在开始测试下载。

    胡齐
  • Docker学习记录(3)——Docker指向多个私有镜像仓库地址

    最近在研究openshift的时候碰到一个问题:openshift本身内部有一个docker registry(存储s2i生成的镜像),我自己又搭了一个本地镜...

    胡了了
  • MySQL在Docker环境下运行基础

    墨墨导读:MySQL在Docker环境下运行的基础操作,本文从Docker介绍、安装Docker、MySQL安装部署几个方面展开介绍。

    数据和云
  • 如何在spark里面使用窗口函数

    在大数据分析中,窗口函数最常见的应用场景就是对数据进行分组后,求组内数据topN的需求,如果没有窗口函数,实现这样一个需求还是比较复杂的,不过现在大多数标准SQ...

    我是攻城师
  • JavaScript专题之如何判断两个对象相等

    虽然标题写的是如何判断两个对象相等,但本篇我们不仅仅判断两个对象相等,实际上,我们要做到的是如何判断两个参数相等,而这必然会涉及到多种类型的判断。

    前端博客 : alili.tech
  • SAP JAM的回收站

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • 分分钟教会你搭建企业级的 npm 私有仓库

    npm 作为一种包管理工具,无论你是泛前端还是大前端都已经离不开它。它的出现方便了万千少年。让我们跨过了 Ctrl+C、Ctrl+V,通过 npm instal...

    lucifer210

扫码关注云+社区

领取腾讯云代金券