一、   mogilefs

mogilefs特性:

1、支持多节点冗余
2
、可实现自动的文件复制
3
、使用名称空间(命名空间),每个文件通过key来确定
4
、不需要RAID,应用层可以直接实现RAID,不共享任何东西,通过集群接口提供服务
5
、工作于应用层,没有特殊的组件要求;
6
、不共享任何数据,MogileFS不需要依靠昂贵的SAN来共享磁盘,每个机器只用维护
好自己的磁盘。

 

mogilefs的架构:

mogileFS主要由三部分构成:tracker节点,database节点,storage节点

1Tracker(MogileFSd 进程):这个是 MogileFS的核心部分,他是一个调度器MogileFSd进程就是trackers进程程序,trackers做了很多工作:Replication,Deletion,Query,Reaper,Monitor 等等,这个是基于事件的( event-based ) 父进程/消息总线来管理所有来之于客户端应用的交互(requesting operations to be performed),包括将请求负载平衡到多个“query workers”中,然后让 MogileFSd 的子进程去处理;

 

2MySQL:用来存放 MogileFS 元数据 (命名空间, 和文件在哪里),是Trackers 来操作和管理它,可以用mogdbsetup程序来初始化数据库,因为数据库保存了MogileFS的所有元数据,建议做成HA架构;

 

3Storage Nodes这个是 MogileFS存储文件存放在这些机器上,也是 mogstored 节点,也叫 Storage Server,一台存储主要都要启动一个 mogstored 服务.扩容就是增加这些机器,实际文件存放的地方。

image001.png

image003.png

每次文件的上传和读取,都经过前端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:文件属性管理,定位文件存储在不同设备上的份数;

image005.png


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,将需要的软件包下到目录中

image011.png

image013.png

查看一下,下载好了

image015.png

然后将那些包全部安装到当前目录下 yum localinstall ./*


2、当三台都做好上述准备之后,我们可以开始分角色了

一台作为trackerdatabase,另外两台是storage1172.17.254.225 )和storage2172.17.251.13

image019.png


3、我们先操作tracke+mysql那台。

首先需要初始化服务

启动,登陆数据库

image021.png

给mogilefs库授权,然后刷新一下权限

GRANT ALL PRIVILEGES ON mogilefs.* TO 'mogile'@'127.0.0.1' IDENTIFIED BY 'mogile'WITH GRANT OPTION; 

image023.png

我们现在已经授权了一个mogile的用户

然后使用mogdbsetup命令,指定密码,设定数据库

image025.png

这样它就帮我把数据库和库中的表都创建好了,我们可以去看一下

image027.png

image029.png

但是现在我们的表里还没有东西,因为还没开始往里加主机呢。

image031.png

接下来我们就可以去配置tracker

编辑配置文件:/etc/mogilefs/mogilefsd.conf

image035.png

然后保存退出

使用启动脚本启动tracker

image037.png

查看一下端口监听状态

image039.png

正常。

也可以查看一下主进程子进程

image041.png

我们也可以使用专业命令mogadm check可以查看状态:(要指定tracker是谁)

image043.png

可以看到,目前里面没有host,等会我们加入host之后再来看一下。

 

4、那我们现在就该来配storage了。

编辑storage的配置文件/etc/mogilefs/mogstored.conf

也不需要改啥,配个工作路径就行

image047.png

然后我们需要建立/data下的mogdata目录

image049.png

目前目录下没有东西

因为它的进程工作是以mogilefs用户(这个用户在装包的时候会自动帮你创建)来运行,因此我们需要修改目录的属主属组

image051.png

然后就可以使用脚本启动了

image053.png

查看一下,确实启动起来了:

image055.png

然后在另一台storage上也做同样的事。

PS

image057.png

 

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了。

image059.png

同样,我们将另一台也加上,节点起名叫node2

image061.png

添加成功。

可以用mogadm host list查看主机具体IP还有状态

image063.png

(如果想要修改IP或者状态,将add换成modify即可)

 

6、加完了host,接下来我们该加设备(dev)了。

操作storage1机器。

首先需要给设备创建个目录,建议目录使用dev+ID这种格式,并且记的所有系统中ID不能重复,而且必须与配置文件中的路径一样。(我们刚才配置文件中定义的路径为/data/mogdata

image065.png

查看一下文件

image067.png

同样的,在storage2上也做如上操作,不过建立的文件夹ID不能与刚才相同,应该叫dev2

image069.png


7、我们已经从目录上建立了两个设备,接下来要将它们添加到MogileFS集群中

操作tracker机器,还是使用刚才添加host的命令,只不过将host改为device,然后指定节点和ID

image071.png

使用check查看一下,确实添加成功

image073.png

同样,把dev2加到node2中

image075.png

同样可以使用device list查看

image077.png

添加好了之后我们可以去storagedev文件夹下看一看

image079.png

多了一个test-write文件夹,随机写一些东西用来测试一下

这个时候呢,我们可以再去看看数据库

看一下host里面,刚才是空的,现在就有了信息了

image081.png

还有dev设备也有了

image083.png


8、如果我们使用mogadm命令时不想每次都指定 --tracker=172.17.252.91:7001的话,我们可以将它写到配置文件中

我们自己创建一个mogilefs.conf文件(代表客户端设置)vim /etc/mogilefs/mogilefs.conf

将那句话写到文件中(注意要加s

image087.png

保存退出

然后再使用命令试一下:

image089.png

成功!

 

9、然后我们该创建域了。

比如我们建一个img域专门用来存放图片 mogadm domain add img

image091.png

查看一下

image093.png

加完域之后,它会给你分配一个默认的classdefault,这个mindevconut代表副本数

你也可以手动添加一个class

image095.png

查看一下

image097.png

创建成功

 

10、一切准备就绪,现在我们可以测试一下了

我们有张名为linux的图片

image099.png

我们将它上传上去

需要指定domain,key和文件路径名称(当前目录下可以写./也可以不写)

mogupload --domain=img --key=test --file=linux.jpg

image101.png

上传完了,我们可以去storage中去找一下

dev2中没有

image103.png

我们去dev1下看一下,果然多了一个名为0的文件夹

image105.png

然后一层一层找下去,最后找到了那个文件

image107.png

去看一下数据库中file表中的fid5,因此这个文件才叫0000000005

image109.png

file_on表中的devid为1,因此这个文件才会在dev1下,而不在dev2下。

image111.png

(注意:其实正常情况下,应该是dev1中和dev2中都有的,因为设置的副本数为2,但是因为现在使用的这个默认版本有些bug,不能复制,因此只有一份。我们一会可以降级,让它实现复制功能。)

我们也可以使用命令查询刚才传的文件的路径

image113.png

可以去浏览器中访问一下这个路径

image115.png

可以成功查看到图片

刚才添加用的是mogfileinfo --domain=img --key=test,如果要删除的话使用mogdelete --domain=img --key=test即可

 

 

暂时停止服务器

如果你需要维护一个服务器,比如更新内存,升级操作系统之类的需要关机的操作,推荐你在操作之前先设置这些为“down”。MogileFS对这种偶然的故障可以很弹性的处理。

111115.png

(注:将机器down之后,新的读操作和写操作都不会再去分配了,但是老的那些已经查询过的读写请求,尤其是在storage上已经写好的数据是不会变的,storage上的节点(7500端口)还是在监听状态的)

所以,如果我们使用mogadm host mark node1 down storage1上的host下线,然后再上传文件的话,就只能上传到storage2上的node2里了。



降级

因为当前版本有bug,没法复制,因此我们需要降级(以下操作三台都要进行)

需要使用perl,因此我们先需要安装perl的编译环境

image119.png

然后我们就可以去下载perl的模块了,进到一个临时目录/tmp/下,然后下载

wget http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz

image121.png

这就是那个包啦

image123.png

然后解压缩

image125.png

进入解压后的目录

image127.png

使用perl编译

image129.png

然后使用make&&make install就安装完成了

然后需要重启一下,在tracker上使用/etc/init.d/mogilefsd stop start,在两台storage上使用/etc/init.d/mogstored stop start(重启的时候如果出现fail不用管它,又是一个bug,其实已经启动成功了)

三台都做好如上操作之后就完成了降级,我们可以试一下看看现在有没有复制功能了。

新添加一个图片,keybug

image131.png

然后我们查看一下

image133.png

看到了两份,复制成功!!!!!




二、  
FastdFS

 

FastDFS是一个轻量级的开源分布式文件系统,主要解决了大容量的文件存储和高并发访问的问题,文件存取时实现了负载均衡。

FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux、FreeBSD、AIX等UNIX系统。它只能通过 专有API对文件进行存取访问,不支持POSIX

接口方式,不能mount使用。准确地讲,Google FS以及FastDFS、mogileFS、 HDFS、TFS等类Google FS都不是系统级的分布式文件系统,而是应用级的分布式文件存储服务。

image135.png


架构解读

• 只有两个角色,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、先建立一个文件夹,然后去下包

image143.png

image145.png

image147.png

使用mget * 下载全部

image149.png

查看一下

image151.png

要安装fastdfs包需要依赖lib包,所以全都安装

yum localinstall fastdfs-* libf*

image153.png

三台全部安装好,我们就可以开始接下来的配置了。

 

2、先配tracker

配置文件放在/etc/fdfs目录下,有一个样本文件,我们将它改个名字

image155.png

然后去编辑它

其实也没什么好配的,就改个目录即可

image157.png

于是我们给它建一个tracker目录 mkdir /data/fastdfs/tracker -p

image159.png


然后因为它是客户端工具,因此我们还需要配一下客户端

image161.png

配一下工作路径和tracker的地址

image163.png

就可以直接启动服务了

image165.png

启动成功

image167.png

查看下端口

image169.png


3、配置storage

还是进入/etc/fdfs目录,然后拷贝一份配置文件,这会就要拷贝storage.conf的模板了

image171.png

也是需要指定一个工作路径

image173.png

然后指定一个存储路径(可以与上面相同)

image175.png

这里配置trackerIP地址

image177.png

然后保存退出

同样的,建个目录启动即可

image179.png

查看一下

image181.png

确实起来了

image183.png

另一台也做相同的操作。

 

3、然后就可以测试了

image185.png



FastDFS实现nginx代理

1、在两台storage上安装nginx

还是进到fastdfs目录下,安装所有的nginx

image187.png

编辑配置文件 /etc/nginx/nginx.conf

image191.png

还要修改一个配置文件vim /etc/fdfs/mod_fastdfs.conf

配置一下trackerIP

image195.png

再将这句改为true

image197.png

然后改一下路径

image199.png

启动nginx服务

然后就可以在网页中访问了

image201.png

(使用storageIP+这个路径即可访问了)