分布式存储——mogilefs & fastdfs
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式存储——mogilefs & fastdfs相关的知识,希望对你有一定的参考价值。
一、 mogilefs
mogilefs特性:
1、支持多节点冗余
2、可实现自动的文件复制
3、使用名称空间(命名空间),每个文件通过key来确定
4、不需要RAID,应用层可以直接实现RAID,不共享任何东西,通过“集群”接口提供服务
5、工作于应用层,没有特殊的组件要求;
6、不共享任何数据,MogileFS不需要依靠昂贵的SAN来共享磁盘,每个机器只用维护
好自己的磁盘。
mogilefs的架构:
mogileFS主要由三部分构成:tracker节点,database节点,storage节点
1、Tracker(MogileFSd 进程):这个是 MogileFS的核心部分,他是一个调度器,MogileFSd进程就是trackers进程程序,trackers做了很多工作:Replication,Deletion,Query,Reaper,Monitor 等等,这个是基于事件的( event-based ) 父进程/消息总线来管理所有来之于客户端应用的交互(requesting operations to be performed),包括将请求负载平衡到多个“query workers”中,然后让 MogileFSd 的子进程去处理;
2、mysql:用来存放 MogileFS 的元数据 (命名空间, 和文件在哪里),是Trackers 来操作和管理它,可以用mogdbsetup程序来初始化数据库,因为数据库保存了MogileFS的所有元数据,建议做成HA架构;
3、Storage Nodes:这个是 MogileFS存储文件存放在这些机器上,也是 mogstored 节点,也叫 Storage Server,一台存储主要都要启动一个 mogstored 服务.扩容就是增加这些机器,实际文件存放的地方。
每次文件的上传和读取,都经过前端TrackerServer服务器,trackerServer服务器受到client端的请求,查询数据库,返回一个上传或者是读取的可用的后端StorageServer的地址,然后由client端直接操作后端StorageServer服务器。upload操作返回就是成功或者失败的结果,read操作就是返回对应的查询数据。
MogileFS管理的几个概念:
1、Domain:一个MogileFS可以有多个Domain,用来存放不同文件(大小,类型),同一个Domain内key必须唯一,不同Domain内,key可以相同;
2、每一个存储节点称为一个主机host,一个主机上可以有多个存储设备dev(单独的硬盘),每个设备都有ID号,Domain+Fid用来定位文件。
3、Class:文件属性管理,定位文件存储在不同设备上的份数;
mogilefs程序路径
主程序(Tracker):/usr/bin/mogilefsd
主程序(Storage Nodes):/usr/bin/mogstored
数据库初始化:/usr/bin/mogdbsetup
命令行管理工具程序:/usr/bin/mogadm
主配置文件(Tracker):/etc/mogilefs/mogilefsd.conf
主配置文件(Storage Nodes):/etc/mogilefs/mogstored.conf
实验:
1、准备三台机器,关闭防火墙,然后分别安装这些包
yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO
然后可以建一个目录mogilefs,将需要的软件包下到目录中
查看一下,下载好了
然后将那些包全部安装到当前目录下 yum localinstall ./*
2、当三台都做好上述准备之后,我们可以开始分角色了
一台作为tracker和database,另外两台是storage1(172.17.254.225 )和storage2(172.17.251.13)
3、我们先操作tracke+mysql那台。
首先需要初始化服务
启动,登陆数据库
给mogilefs库授权,然后刷新一下权限
GRANT ALL PRIVILEGES ON mogilefs.* TO 'mogile'@'127.0.0.1' IDENTIFIED BY 'mogile'WITH GRANT OPTION;
我们现在已经授权了一个mogile的用户
然后使用mogdbsetup命令,指定密码,设定数据库
这样它就帮我把数据库和库中的表都创建好了,我们可以去看一下
但是现在我们的表里还没有东西,因为还没开始往里加主机呢。
接下来我们就可以去配置tracker了
编辑配置文件:/etc/mogilefs/mogilefsd.conf
然后保存退出
使用启动脚本启动tracker
查看一下端口监听状态
正常。
也可以查看一下主进程子进程
我们也可以使用专业命令mogadm check可以查看状态:(要指定tracker是谁)
可以看到,目前里面没有host,等会我们加入host之后再来看一下。
4、那我们现在就该来配storage了。
编辑storage的配置文件/etc/mogilefs/mogstored.conf
也不需要改啥,配个工作路径就行
然后我们需要建立/data下的mogdata目录
目前目录下没有东西
因为它的进程工作是以mogilefs用户(这个用户在装包的时候会自动帮你创建)来运行,因此我们需要修改目录的属主属组
然后就可以使用脚本启动了
查看一下,确实启动起来了:
然后在另一台storage上也做同样的事。
(PS:
)
5、这样,两台storage也配好了,现在我们要将它们和tracker组合到一块。
在tracker的机器上操作。
添加一台host,节点命名为node1,并定义状态为alive
mogadm --tracker=172.17.252.91:7001 host add node1 --ip=172.17.254.225 --port=7500 --status=alive
然后使用check查看一下,果然有一个host了。
同样,我们将另一台也加上,节点起名叫node2
添加成功。
可以用mogadm host list查看主机具体IP还有状态
(如果想要修改IP或者状态,将add换成modify即可)
6、加完了host,接下来我们该加设备(dev)了。
操作storage1机器。
首先需要给设备创建个目录,建议目录使用dev+ID这种格式,并且记的所有系统中ID不能重复,而且必须与配置文件中的路径一样。(我们刚才配置文件中定义的路径为/data/mogdata)
查看一下文件
同样的,在storage2上也做如上操作,不过建立的文件夹ID不能与刚才相同,应该叫dev2。
7、我们已经从目录上建立了两个设备,接下来要将它们添加到MogileFS集群中
操作tracker机器,还是使用刚才添加host的命令,只不过将host改为device,然后指定节点和ID
使用check查看一下,确实添加成功
同样,把dev2加到node2中
同样可以使用device list查看
添加好了之后我们可以去storage的dev文件夹下看一看
多了一个test-write文件夹,随机写一些东西用来测试一下
这个时候呢,我们可以再去看看数据库
看一下host里面,刚才是空的,现在就有了信息了
还有dev设备也有了
8、如果我们使用mogadm命令时不想每次都指定 --tracker=172.17.252.91:7001的话,我们可以将它写到配置文件中
我们自己创建一个mogilefs.conf文件(代表客户端设置)vim /etc/mogilefs/mogilefs.conf
将那句话写到文件中(注意要加s)
保存退出
然后再使用命令试一下:
成功!
9、然后我们该创建域了。
比如我们建一个img域专门用来存放图片 mogadm domain add img
查看一下
加完域之后,它会给你分配一个默认的class叫default,这个mindevconut代表副本数
你也可以手动添加一个class
查看一下
创建成功
10、一切准备就绪,现在我们可以测试一下了
我们有张名为linux的图片
我们将它上传上去
需要指定domain,key和文件路径名称(当前目录下可以写./也可以不写)
mogupload --domain=img --key=test --file=linux.jpg
上传完了,我们可以去storage中去找一下
dev2中没有
我们去dev1下看一下,果然多了一个名为0的文件夹
然后一层一层找下去,最后找到了那个文件
去看一下数据库中file表中的fid为5,因此这个文件才叫0000000005。
file_on表中的devid为1,因此这个文件才会在dev1下,而不在dev2下。
(注意:其实正常情况下,应该是dev1中和dev2中都有的,因为设置的副本数为2,但是因为现在使用的这个默认版本有些bug,不能复制,因此只有一份。我们一会可以降级,让它实现复制功能。)
我们也可以使用命令查询刚才传的文件的路径
可以去浏览器中访问一下这个路径
可以成功查看到图片
刚才添加用的是mogfileinfo --domain=img --key=test,如果要删除的话使用mogdelete --domain=img --key=test即可
暂时停止服务器
如果你需要维护一个服务器,比如更新内存,升级操作系统之类的需要关机的操作,推荐你在操作之前先设置这些为“down”。MogileFS对这种偶然的故障可以很弹性的处理。
(注:将机器down之后,新的读操作和写操作都不会再去分配了,但是老的那些已经查询过的读写请求,尤其是在storage上已经写好的数据是不会变的,storage上的节点(7500端口)还是在监听状态的)
所以,如果我们使用mogadm host mark node1 down 将storage1上的host下线,然后再上传文件的话,就只能上传到storage2上的node2里了。
降级
因为当前版本有bug,没法复制,因此我们需要降级(以下操作三台都要进行)
需要使用perl,因此我们先需要安装perl的编译环境
然后我们就可以去下载perl的模块了,进到一个临时目录/tmp/下,然后下载
wget http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz
这就是那个包啦
然后解压缩
进入解压后的目录
使用perl编译
然后使用make&&make install就安装完成了
然后需要重启一下,在tracker上使用/etc/init.d/mogilefsd stop 和 start,在两台storage上使用/etc/init.d/mogstored stop 和start(重启的时候如果出现fail不用管它,又是一个bug,其实已经启动成功了)
三台都做好如上操作之后就完成了降级,我们可以试一下看看现在有没有复制功能了。
新添加一个图片,key为bug
然后我们查看一下
看到了两份,复制成功!!!!!
二、 FastdFS
FastDFS是一个轻量级的开源分布式文件系统,主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。
FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过 专有API对文件进行存取访问,不支持POSIX
接口方式,不能mount使用。准确地讲,Google FS以及FastDFS、mogileFS、 HDFS、TFS等类Google FS都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。
架构解读
? 只有两个角色,tracker server和storage server,不需要存储文件索引信息
? 所有服务器都是对等的,不存在Master-Slave关系
? 存储服务器采用分组方式,同组内存储服务器上的文件完全相同(RAID 1)
? 不同组的storage server之间不会相互通信
? 由storage server主动向tracker server报告状态信息,tracker server之间通常不会相互通信
FastDFS同步机制
采用binlog文件记录更新操作,根据binlog进行文件同步
同一组内的storage server之间是对等的,文件上传、删除等操作可以在任意一台storage server上进行;
文件同步只在同组内的storage server之间进行,采用push方式,即源服务器同步给目标服务器;
源头数据才需要同步,备份数据不需要再次同步,否则就构成环路了;
上述第二条规则有个例外,就是新增加一台storage server时,由已有的一台storage server将已有的所有数据(包括源头数据和备份数据)同步给该新增服务器。
FastDFS核心组件
Tracker:调度器,负责维持集群的信息,例如各group及其内部的storage node,这些信息也是storage node报告所生成;每个storage node会周期性向tracker发心跳信息;
storage server:以group为单位进行组织,任何一个storage server都应该属于某个group,一个group应该包含多个storage server;在同一个group内部,各storage server的数据互相冗余;
实验
那我们还是准备3台机器,一台做tracker,两台做storage
1、先建立一个文件夹,然后去下包
使用mget * 下载全部
查看一下
要安装fastdfs包需要依赖lib包,所以全都安装
yum localinstall fastdfs-* libf*
三台全部安装好,我们就可以开始接下来的配置了。
2、先配tracker
配置文件放在/etc/fdfs目录下,有一个样本文件,我们将它改个名字
然后去编辑它
其实也没什么好配的,就改个目录即可
于是我们给它建一个tracker目录 mkdir /data/fastdfs/tracker -p
然后因为它是客户端工具,因此我们还需要配一下客户端
配一下工作路径和tracker的地址
就可以直接启动服务了
启动成功
查看下端口
3、配置storage
还是进入/etc/fdfs目录,然后拷贝一份配置文件,这会就要拷贝storage.conf的模板了
也是需要指定一个工作路径
然后指定一个存储路径(可以与上面相同)
这里配置tracker的IP地址
然后保存退出
同样的,建个目录启动即可
查看一下
确实起来了
另一台也做相同的操作。
3、然后就可以测试了
FastDFS实现nginx代理
1、在两台storage上安装nginx包
还是进到fastdfs目录下,安装所有的nginx包
编辑配置文件 /etc/nginx/nginx.conf
还要修改一个配置文件vim /etc/fdfs/mod_fastdfs.conf
配置一下trackerIP
再将这句改为true
然后改一下路径
启动nginx服务
然后就可以在网页中访问了
(使用storage的IP+这个路径即可访问了)
以上是关于分布式存储——mogilefs & fastdfs的主要内容,如果未能解决你的问题,请参考以下文章
分布式存储之MogileFS基于Nginx实现负载均衡(Nginx+MogileFS)