一:MogileFS简介
MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发。Danga团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。目前使用MogileFS 的公司非常多,如日本排名先前的几个互联公司及国内的yupoo(又拍)、digg、豆瓣、1号店、大众点评、搜狗和安居客等,分别为所在的组织或公司管理着海量的图片,以大众点评为例,用户全部图片均有mogileFS存储,数据量已经达到500TB级别以上。
(1)、MogileFS特性:
1,支持多节点冗余
2,可实现自动的文件复制
3,使用名称空间(命名空间),每个文件通过key来确定
4,不需要RAID,应用层可以直接实现RAID,不共享任何东西,通过“集群”接口提供服务
5,工作于应用层,没有特殊的组件要求
6,不共享任何数据,mogilefs不需要依靠昂贵的SAN来共享磁盘,每个机器只用维护好自己的磁盘
(2)、MogileFS主要由三部分构成:tracker节点,MySQL(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的元数据(命名空间和文件路径),是tracker来操作和管理它,可以用来mogdbsetup程序来初始化数据库,因为数据库保存了mogilefs的所有元数据,建议做成HA架构
3,storage Nodes:这个是mogilefs存储文件存放在 一些机器上,也是mogstored节点,也叫storager server,一台存储主要都要启动一个mogstored服务,扩容就是增加这些机器实际文件存放的地方
(3)、MogileFS架构:
每次文件的上传和读取,都经过前端TrackerServer服务器,trackerServer服务器受到client端的请求,查询数据库,返回
一个上传或者是读取的可用的后端StorageServer的地址,然后由client端直接操作后端StorageServer服务器。upload操
作返回就是成功或者失败的结果,read操作就是返回对应的查询数据
(4)MogileF管理的三个概念:
1,Domain(域):一个mogilefs可以有多个Domain,用来存放不同文件(大小,类型)同一个Domain内key必须唯一,不同DOmain内,key可以相同
2,每一个存储节点称为一个主机host,一个主机上可以有多个存储设备dev(单独的硬盘),每个设备都有id号,Domain+fid用来定位文件
3,class:文件属性管理,定位文件存储在不同设备上的份数
(5)、MogileFS安装方式
mogilefs安装常用两种方式,yum安装和perl程序安装
yum 安装:通常是在线安装,好处是安装方式简单,不易出错;常用的安装yum源为
epel
yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO #安装相关的依赖关系
本地安装的rpm包:
MogileFS-Server-2.46-2.el6.noarch.rpm #核心服务
perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm #socket
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm # tracker节点
perl-MogileFS-Client-1.14-1.el6.noarch.rpm #客户端
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm #Storage存储节点
MogileFS-Utils-2.19-1.el6.noarch.rpm #主要是MogileFS的一些管理工具,例如
mogadm等。
perl程序源码包安装:通过perl的包管理命令cpanm进行安装
yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl- YAML perl-Time-HiRes
cpanm安装
wget http://xrl.us/cpanm -O /usr/bin/cpanm; sudo chmod +x
/usr/bin/cpanm
#cpanm DBD::mysql
#cpanm MogileFS::Server
#cpanm MogileFS::Utils
#cpanm MogileFS::Client
#cpanm IO::AIO
mogilefs程序路径
主程序:/usr/bin/mogilefsd
命令行管理工具程序:/usr/bin/mogadm
主配置文件(Tracker):/etc/mogilefs/mogilefsd.conf
主配置文件(Storage Nodes):/etc/mogilefs/mogstored.conf
二、MogileFS相关配置文件讲解
(1)主配置文件(tracker)
daemonize = 1 #设置为1表示启动为守护进程
配置数据库连接相关信息:
db_dsn = DBI:mysql:mogilefs:host=127.0.0.1
db_user = username #连接数据库的用户名
db_pass = password #连接数据库用户名的密码
listen = 127.0.0.1:7001 #mogilefs监听地址,监听在127.0.0.1表示只允许从本机登录进行管理
query_jobs = 10 #启动多少个查询工作线程
delete_jobs = 1 #启动多少个删除工作线程
replicate_jobs = 5 #启动多少个复制工作线程
reaper_jobs = 1 #启动多少个用于回收资源的线程
maxconns = 10000 #存储系统的最大连接数.
httplisten = 0.0.0.0:7500 #可通过http访问的服务端口
mgmtlisten = 0.0.0.0:7501 #mogilefs的管理端口
docroot = /var/mogdata #该项决定了数据的在storage上存储的实际位置,建议使用的是一个单独挂载使用的磁盘
(2)主配置文件(storage)
maxconns = 10000 #存储系统的最大连接数
httplisten = 0.0.0.0:7500 #可通过http访问的服务端口
mgmtlisten = 0.0.0.0:7501 #mogilefs的管理端口
docroot = /var/mogdata
(3)数据库的授权:
只需一个命令即可完成:mogdbsetup
按照步骤输入即可。
tracker服务的启动:/etc/init.d/mogilefsd start
storage服务的启动:/etc/init.d/mogstored start
三、MogileFS的管理
mogstored 程序的启动将使主机本身成为一个存储的节点,mogstored 的启动后, 还需要使用 mogadm 来让当前的这个主机加入到 MogileFS 的系统中.这就是一
个存储节点.注意存储节点中还需要添加设备,每个设备有一个 uniq 的 ID 号.同样也要使用 mogadm 来加入到 MogileFS 的系统中. MogileFS 中的存储主机(节点)管理
现在加入“存储节点”到 trackers 中.告诉注册自己到 trackers.相当于为每个主机加入 MogileFS 的存储系统
mogadm host add
mogadm host list #检查这个主机是否加入到 MogileFS 的系统中.
mogadm host modify node1 --ip=123.xxx.xxx.70 --status=alive #modify可以修改主机IP,状态
MogileFS 中的存储设备管理
建一个目录 ( 并且需要 mount 一个硬盘给这个目录 ) 给这个"设备" 使用, 我们这的例子是使用dev1在主机中建一个目录,建目录使用 dev + ID 这种格式,记的所有系统中 ID 不能重复.也必
须和配置文件中的路径一样. 如下:
mkdir -p /data/mogdata/dev1
一定要注意, 给相对应用的块设备 mount 到这个点, 软链也行. 不然写文件都会写到系统硬上, 其它的硬盘都是空的
mogadm device add
mogadm device list #检查我们加入的"设备"信息,这样就能见到上面这个设备了.还能显示加入的大小
标记失效的设备,当硬盘坏了,设备有问题时,这时会自动在一个域内复制到最小设置的保存份数. 恢复上面一样在一次 add 设备就好了
mogadm device mark
建"域" mogadm domain add
mogadm domain list #检查"域",显示存在的域
mogadm class add
MogileFS 中文件管理
我们可以简单的使用 mog 开头的系列 Linux 命令, 来进行管理, 当然也可以用 Client 的 API
来管理. 新的 MogileFS 的工具, 拆分成多个了. 下面这些命令, 都需要在
/etc/mogilefs/mogilefs.conf 中指定 trackers , 不然就需要在下面的命令都加上 –trackers
来指定.
- 上传文件
mogupload --domain=domainID --key=--file= -
查询文件
mogfileinfo --trackers=host --domain=--key= -
删除指定文件
mogdelete --domain=--key= -
列出所有的文件 key这个可以列出指定 domain 下面的所有的 key , 也可以指定的一个前缀, 来找特定前缀的所有文件的 key.
moglistkeys --domain=--key_prefix= - 列出指定 fid 的文件
这个 fromfid 是指 mogileFS 内部的文件 id , 这个是自增的, 你可以指定一个开始的位置, 指定显示多少文件, 这个用于查询指定时间段内上传的文件时很有用. 比如我们在 8 点上传了一个文件, 是 100 的 id, 我们可以查询到从这个之后的所有的 id 的文件.
moglistfids --fromfid=--count=<数量>
暂时停止服务器
mogadm host mark storageid down #停止storage节点
mogadm host mark mystorage alive #启动storage节点
mogadm host mark storageid dead #彻底关闭storage节点,这时候就需要重新更换一个新的
只读模式和耗尽(Drain) 模式
mogadm device mark storageid 5 readonly
mogadm device mark storageid 5 drain