一、 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 ,节点命名为 node 1,并定义状态为 alive
mogadm --tracker=172.17.252.91:7001 host add node1 --ip=172.17.254.225 --port=7500 --status=alive
然后使用 check 查看一下,果然有一个 host 了。
同样,我们将另一台也加上,节点起名叫 node 2
添加成功。
可以用 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查看一下,确实添加成功
同样,把 dev 2加到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 中去找一下
dev 2中没有
我们去 dev 1下看一下,果然多了一个名为 0 的文件夹
然后一层一层找下去,最后找到了那个文件
去看一下数据库中 file 表中的 fid 为 5 ,因此这个文件才叫 0000000005 。
file _on表中的devid为1,因此这个文件才会在dev1下,而不在dev2下。
(注意:其实正常情况下,应该是 dev 1中和dev2中都有的,因为设置的副本数为2,但是因为现在使用的这个默认版本有些bug,不能复制,因此只有一份。我们一会可以降级,让它实现复制功能。)
我们也可以使用命令查询刚才传的文件的路径
可以去浏览器中访问一下这个路径
可以成功查看到图片
刚才添加用的是 mogfileinfo --domain=img --key=test ,如果要删除的话使用 mogdelete --domain=img --key=test 即可
暂时停止服务器
如果你需要维护一个服务器,比如更新内存,升级操作系统之类的需要关机的操作,推荐你在操作之前先设置这些为“down”。MogileFS对这种偶然的故障可以很弹性的处理。
(注:将机器 down 之后,新的读操作和写操作都不会再去分配了,但是老的那些已经查询过的读写请求,尤其是在 storage 上已经写好的数据是不会变的, storage 上的节点( 7500 端口)还是在监听状态的)
所以,如果我们使用mogadm host mark node1 down 将 storage 1上的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+ 这个路径即可访问了)
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com