分布式存储介绍、FastDFS 部署

什么是分布式系统?

简单来说,多台主机提供同一个服务,例如负载均衡集群,就是一个分布式系统。

什么是分布式存储?

看看某宝,上面多少图片,如果使用传统的单机存储,需要准备多大的磁盘空间?读写性能如何提升?

分布式存储介绍、FastDFS 部署

上图就是一个分布式存储的结构,此处存储节点不在是磁盘,而是多个主机组成,多个主机内部通信实现数据副本,客户端发来的请求发往前端,前端分发至后端,有点像负载均衡集群中的调度器(此处描述不精确,但便于理解)

分布式存储给我们带来了复杂性。并且还有一个问题

在理论计算机科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:

  • 一致性(Consistence) (等同于所有节点访问同一份最新的数据副本)
  • 可用性(Availability)(每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据)
  • 分区容错性(Network partitioning)(以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。)

根据定理,分布式系统只能满足三项中的两项而不可能满足全部三项。理解CAP理论的最简单方式是想象两个节点分处分区两侧。允许至少一个节点更新状态会导致数据不一致,即丧失了C性质。如果为了保证数据一致性,将分区一侧的节点设置为不可用,那么又丧失了A性质。除非两个节点可以互相通信,才能既保证C又保证A,这又会导致丧失P性质。

以上摘自维基百科,指出如果要保证数据一致性就会丢失可用性或者分区容错性,但我们在生产环境中可用性是最最最应该保证的,那么就会丢失分区容错性,但分区容错性又是分布式的基础,(我们在集群环境里了解到,在集群环境里如果网络发生了分区,我们应该理解通过投票机制,选举出票数大于半数的主机以保证可用性)相比较此两者,一致性的要求就稍次一些,我们保证他最终一致即可,所以一般架构中我们会选择满足可用性和分区容错性,尽量提高一致性。

ps:说了一大堆,单独理解还好,揉在一起也不是那么容易想明白分布式存储介绍、FastDFS 部署,慢慢来吧。

分布式的分类

    提供存储,并且提供文件系统接口,可以挂载使用的,我们称之为分布式文件系统。

    提供存储,但不提供文件系统接口,使用特有的API进行访问,我们称之为分布式存储。

分布式存储的分为两类

    数据节点中,元数据集中存储管理,数据节点只存储数据,被称为专用的元数据节点

    数据节点中,所有节点均完整存储元数据数据,只存储部分数据,被称为无专用的元数据节点



FastDFS

C语言开发,各节点通过tcp/ip自有协议通信,没有数据库节点,元数据都存储于storage节点,storage节点自行向tracker报告,国人研发。

三个组件

tracker:跟踪服务器,主要负责调度,在内存中记录所有存储组,和存储服务器的状态信息,这里相对mogilefs有个存储组的概念,简单的说就是提供storge的两个或多个节点组成一个组,所以内存占用并不大

storage server: 存储服务器,存储文件和文件属性

client: 客户端,通过专用接口协议与tracker以及storage server进行交互,向tracker提供group_name并发送请求,如果上传,则会接受到storage,响应的group_name 。

分布式存储介绍、FastDFS 部署

fid格式:

group_name/M##/&&/&&/file_name
group_name:存储组的组名;上传完成后,需要客户端自行保存
M##:服务器配置的虚拟路径,与磁盘选项store_path#对应
两级以两位16进制数字命名的目录

文件名,与原文件名并不相同,由storage server 根据特定信息生成,文件名包含,源服务器的IP地址,文件创建时间戳、文件大小、随机数和文件扩展名等

fid是什么? 简单的说 文件有文件名,但是在我们分布式环境中会有很多文件存在,为了提高搜索的效率,把文件名做了hash计算,把计算出来的值前面2位相同的放一个目录,后面2位在此相同的又放一个目录,这样当请求一个文件时,直接对请求的文件名做hash计算,得出前面四位去快速定位位置。


提供两台centos7 一台安装tracker和storage节点  一台只提供storage

安装:

git clone  https://github.com/happyfish100/fastdfs.git 

作者交由github托管,克隆此节点

git clone https://github.com/happyfish100/libfastcommon.git

依赖此库

接着先安装libfastcommon

./make.sh

./make.sh install

fastdfs目录执行相同操作

完成后

分布式存储介绍、FastDFS 部署

可以看到关于fdfs的一大堆命令。

接着我们进入配置文件目录,复制一份配置文件,并修改配置文件。

[root@localhost fastdfs]# cd /etc/fdfs/
[root@localhost fdfs]# cp tracker.conf.sample tracker.conf

配置文件按需修改这里实验用只修改了日志的目录

fdfs_trackerd /etc/fdfs/tracker.conf start                #指明配置文件,启动。

检查端口是否启用,然后就按上面的步骤继续修改storage节点的配置文件

fdfs_storaged /etc/fdfs/storage.conf start        #指明配置文件,启动

tracker_server=192.168.20.103:22122         #这里一定记得修改tracker服务器的路径。

检查端口都是否正常启动

第二个节点接着上面的操作重复进行~

fdfs_monitor STORAGE.CONF         #指明storage节点的配置文件,可以看到当前节点状况了~

分布式存储介绍、FastDFS 部署分布式存储介绍、FastDFS 部署

会显示出来一大堆的信息,其他的我们先不管,只管看两个箭头所指,写了active 说明两个节点都准备就绪啦。

group_name=group1                #两个storage节点需配置同一个组

接着我们继续修改客户端的配置文件

tracker_server=192.168.20.103:22122            #同样,记得修改此行指向tracker服务器的地址

接着就可以上传一个文件试试了

[root@localhost fdfs]# fdfs_upload_file client.conf /etc/fstab                 #指明配置文件,指明上传的文件

group1/M00/00/00/wKgUZ1i-6f-AJiocAAABvCXI6iY2960552                    #同时我们可以看到storage节点已经向我们返回了此文件的fid

我们再次去查看监控

[root@localhost fdfs]# fdfs_monitor storage.conf    

分布式存储介绍、FastDFS 部署分布式存储介绍、FastDFS 部署

接着可以看到两个存储节点的状态,从返回数据可以看到,我们执行的时候应该是写入到左边一个服务器上了,右边服务器同步了左边的服务器

接着我们来测试一下他的心跳检测状态

[root@localhost fdfs]# vi storage.conf            #编辑此配置文件看清楚啊,是storage的配置节点,我们开篇就说了,是storage节点像tracker报告自己的信息.

storage.conf:heart_beat_interval=1               #此行改为1,单位为秒

先看下下载

[root@localhost fdfs]# fdfs_download_file  client.conf group1/M00/00/00/wKgUZ1i-6f-AJiocAAABvCXI6iY2960552 /tmp/fstab
[root@localhost fdfs]# cat /tmp/fstab 
#
# /etc/fstab
# Created by anaconda on Tue Jan 24 06:51:26 2017
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk’
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=6a58d807-3b42-49da-aa3c-f7e0fe97d643 /                       btrfs   subvol=root     0 0
UUID=45df57d0-4193-4c30-bf3f-3601e4b7cac8 /boot                   xfs     defaults        0 0
/dev/sr0 /media iso9660 defaults 0 0

可以看到能正常下载,接着我去关掉那台节点主机~

关掉过后仍能下载,并且马上执行fdfs_monitor 已经显示另一个节点已经offline了~ 就不截图了~自行尝试下吧。

FastDFS和MogileFS适用于相同场景,一般是在有大量>4KB、<512MB图片和文件环境被用来当做解决方案。

原创文章,作者:N24_Ghost,如若转载,请注明出处:http://www.178linux.com/70765

(2)
上一篇 2017-03-07 21:31
下一篇 2017-03-08 11:58

相关推荐

  • 有证说话硬–实现CA和证书申请

    centos下利用openssl来实现证书的颁发 直接进入正题,细节坑就不说了,自己解决起来更有挑战性不是 步骤流程: 我是拿的7.3版本做CA主机,6.8版本做客户端 1.创建CA 2.生成私钥 3.生成自签名证书 4.到客服端 5.生成私钥 6.生成证书申请文件 7.将请求发送给-CA主机 8.CA主机-验证签署 9.拷回给客户端使用 用法:openss…

    2017-04-11
  • 数据分析≠Hadoop+NoSQL,不妨先看完善现有技术的10条捷径

    让业务搭乘大数据技术确实是件非常有吸引力的事情,而Apache Hadoop让这个诱惑来的更加的猛烈。Hadoop是个大规模可扩展数据存储平台,构成了大多数大数据项目基础。Hadoop是强大的,然而却需要公司投入大量的学习精力及其它的资源。 如果得到正确的应用,Hadoop确实能从根本上提升你公司的业务,然而这条Hadoop的应用之路却充满了荆棘。另一个方面…

    Linux干货 2015-02-25
  • Linux运维学习历程-第八天-Linux文本工具sed与Vim(vi)

    概述:    本篇我们主要学习两个功能非常强大的文本编辑器,了解这两种文本编辑器的各自的特点 一、sed命令:  1、sed简介:     sed(Stream EDitor)是一种流编辑器、行编辑器。逐行处理文本内容,即一次处理一行内容,处理时,当前处理的行存储在“模式空间”(pattern sp…

    Linux干货 2016-08-15
  • 用户管理和组管理

         Linux是一个多用户多任务的系统 ,因此学习用户管理和组管理,对我们工作和学习有很大的帮助。用户是你登录这个操作系统的凭证,因此用户的创建和修改,删除是用户管理的基本工作,所以你掌握这些,对你的工作有很好的帮助。 用户账号管理 /etc/passwd username:x: UId:gid:comment:…

    Linux干货 2016-08-10
  • shell编程及小命令

    1. ping 10.1.252.25d2 -c1 -w1 &> /dev/null && echo "The host is up" || echo "The host is down" 2. 在vim命令中, p或则P可以实现复制。     p: 复制到下一行 &n…

    Linux干货 2016-08-12
  • 快速运用NFS共享web页面

    环境:centos7.3最小化三台,前期准备关闭防火墙和selinux 目的:通过文件共享,使客户端访问web服务器时是同样的页面。 拓扑图: 优势:减少WEB服务器的压力。 一、安装软件 NFS、WEB1、WEB2: #yum install nfs-utils -y WEB1、WEB2: #yum install httpd -y 二、配置 NFS: #…

    2017-04-27

评论列表(1条)

  • 马哥教育
    马哥教育 2017-03-13 23:25

    赞~~从原理到架构,再到实战部分~比较详细~加油!