|
一、MogileFS的概念:
MogileFS是一个开源的分布式文件存储系统,是由LiveJournal旗下的Danga Interactive公司开发。目前使用MogileFS的公司非常多,如日本排名先前的几个互联公司以及国内的Yupoo(又拍)、digg、豆瓣、大众点评、搜狗等,分别为所在的组织或公司管理着海量的图片。以大众点评为例,用户全部图片均有MogileFS存储,数据量已经达到500TB以上。
二、MogileFS的特性:
1、支持多节点冗余
2、可实现自动的文件复制
3、使用名称空间(命名空间),每个文件通过key来确定
4、不需要RAID,应用层可以直接实现R ID,不共享任何东西,通过“集群”接口提供服务
5、工作在应用层,没有特殊的组件要求
6、不共享任何数据,mogilefs不需要依靠昂贵的SAN来共享磁盘,每个机器只用维护好自己的磁盘
三、MogileFS的构成:
1、tracker节点:
tracker是调度器,是mogilefs的核心部分,MogileFSd 进程就是trackers进程程序,trackers 做了很多工作:Replication,Deletion,Query,Reaper,Monitor 等等,这个是基于事件的( event-based ) 父进程/消息总线来管理所有来之于客户端应用的交互(requesting operations to be performed),包括将请求负载平衡到多个“query workers”中,然后让 MogileFSd 的子进程去处理。
2、database节点:
database存放mogilefs的元数据 (命名空间, 和文件在哪里),是Trackers来操作和管理它,可以用mogdbsetup程序来初始化数据库,因为数据库保存了MogileFS的所有元数据,建议做成HA架构。
3、storage节点:
storage是mogilefs的存储文件储存的地方,也是 mogstored 节点,也叫 Storage Server,一台存储要启动一个mogstored服务,扩容就是增加这些机器,扩大文件存放的地方。
四、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程序源码包安装:
1.yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes
2.下载Sys-Syscall-0.23.tar.gz程序安装包:
http://search.cpan.org/CPAN/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz
3.rz Sys-Syscall-0.23.tar.gz
4.tar -xvf Sys-Syscall-0.23.tar.gz
5.cd Sys-Syscall-0.23/
6.perl Makefile.PL
7.make && make install
五、MogileFS程序路径:
主程序:/usr/bin/mogilefsd
命令行管理工具程序:/usr/bin/mogadm
主配置文件(Tracker):/etc/mogilefs/mogilefsd.conf
主配置文件(Storage Nodes):/etc/mogilefs/mogstored.conf
六、MogileFS的主配置文件解析:
tracker配置文件:/etc/mogilefs/mogilefsd.conf
【1】 daemonize = 1 #设置为1表示启动为守护进程
【2】 db_dsn = DBI:mysql:mogilefs:host=127.0.0.1
db_user = username
db_pass = password #配置数据库连接相关信息
【3】listen = 127.0.0.1:7001 #mogilefs监听地址,监听在127.0.0.1表示只允许从本机登录进行管理
【4】query_jobs = 10 #启动多少个查询工作线程
【5】delete_jobs = 1 #启动多少个删除工作线程
【6】replicate_jobs = 5 #启动多少个复制工作线程
【7】reaper_jobs = 1 #启动多少个用于回收资源的线程
storage配置文件:/etc/mogilefs/mogstored.conf
【1】maxconns = 10000 #存储系统的最大连接数
【2】httplisten = 0.0.0.0:7500 #可通过http访问的服务端口
【3】mgmtlisten = 0.0.0.0:7501 #mogilefs的管理端口
【4】docroot = /var/mogdata #该项决定了数据在storage上存储的实际位置,建议使用的是一个单独挂载使用的磁盘
七、Mogilefs服务初始化:
1、数据库授权:
GRANT ALL PRIVILEGES ON . TO 'mogile' @'127.0.0.1' IDENTIFIED BY 'mogile' WITH GRANT OPTION;
【注:WITH GRANT OPTION 表示前面授权的mogile用户也可以对其他用户授权】
2、设定数据库:
mogdbsetup --help 查看帮助
mogdbsetup --dbhost=172.17.251.222 --dbpass=123456
用户名默认为:mogile
3、添加运行用户:
useradd -r mogilefs
mkdir /var/run/mogilefsd/
chown -R mogilefs.mogilefs /var/run/mogilefsd #yum安装的话已经完成
4、修改主配置文件:
Tracker配置文件:/etc/mogilefs/mogilefsd.conf
Storage配置文件:/etc/mogilefs/mogstored.conf
5、启动服务:
Tracker启动:/etc/init.d/mogilefsd start
Storage启动:/etc/init.d/mogstored start
八、Mogilefs的管理:
mogstored 程序的启动将使主机本身成为一个存储的节点,mogstored启动后,还需要使用mogadm来让当前的这个主机加入到MogileFS的系统中,这就是一个存储节点,注意存储节点中还需要添加设备,每个设备有一个uniq的ID号,同样也要使用mogadm 来加入到 MogileFS 的系统中。
MogileFS 中的存储主机(节点)管理:
1.添加“存储节点”到 trackers 中:
【mogadm host add --ip=127.0.0.1 --port=7500 --status=alive/down】 #添加主机,将主机信息注册到数据库中
2.修改添加到trackers中的“存储节点”:
【mogadm --tracker=172.17.17.222:7001 host modify node1 --ip=172.17.17.221 --port=7500 --status=alive/down】
3.检查这个主机是否加入到 MogileFS 的系统中:
【mogadm --tracker=172.17.17.222:7001 host list】或【mogadm --tracker=172.17.17.222:7001 check】
MogileFS 中的存储设备管理:
建一个目录(并且需要mount一个硬盘给这个目录)给这个"设备" 使用, 我们这的例子是使用dev1在主机中建一个目录,建目录使用 dev + ID 这种格式,记的所有系统中ID不能重复。也必须和配置文件中的路径一样。
1.【mkdir -p /data/mogdata/dev1】 *一定要注意, 给相对应用的块设备mount到这个点, 软链也行。不然写文件都会写到系统硬上,其它的硬盘都是空的
2.【mogadm device add ID】 #把"设备"加入”存储的节点“当中,相当于把每个设备加入MogileFS的存储系统
3.【mogadm device list】 #查看添加的设备
4.【mogadm device mark ID dead】 #标记失效的设备,当硬盘坏了,设备有问题时,这时会自动在一个域内复制到最小设置的保存份数,恢复上面一样在一次add设备就好了
MogileFS 中域,类的管理:
当上面的准备好了,MogileFS 是运行中时,接下来我们要建一个我们自己的'名字空间'和加入文件到存储当中。我们使用 mogadm 的工具来能创建一个"域"和"类",也可以使用这个来增加文件到"类"中。
1.建"域"
【mogadm domain add 】
2.检查"域",显示存在的域
【mogadm domain list】
3.在"域"中建"类",并加入最小保存份数
【mogadm class add --mindevcount=3】
MogileFS 中文件管理:
若没有在/etc/mogilefs/mogilefs.conf 中指定 trackers , 那么需要在下面的命令都加上--trackers来指定。
1.上传文件:
【mogupload --domain=magedu --key= --file=】
2.查询文件:
【mogfileinfo --trackers=host --domain= --key=】
3.删除指定文件:
【mogdelete --domain= --key=】
4.列出指定domain下面的所有的key,也可以指定的一个前缀, 来找特定前缀的所有文件的key。
【moglistkeys --domain= --key_prefix=】
5.列出指定 fid 的文件:
这个 fromfid 是指 mogileFS 内部的文件 id , 这个是自增的, 你可以指定一个开始的位置, 指定显示多少文件, 这个用于查询指定时间段内上传的文件时很有用. 比如我们在 8 点上传了一个文件, 是 100 的 id, 我们可以查询到从这个之后的所有的 id 的文件。
【moglistfids --fromfid= --count=<数量>】
暂时停止服务器:
如果你需要维护一个服务器,比如更新内存,升级操作系统之类的需要关机的操作,推荐你在操作之前先设置这些为 "down"。MogileFS 对这种偶然的故障可以很弹性的处理。
$ mogadm host mark mystorage down
$ mogadm host mark mystorage alive
添加新的硬盘设备编号:
添加新的硬盘设备需要给一个唯一的,增量的设备 ID(devid)。如果你用一个新的硬盘来更换坏掉的硬盘,总是需要给一个新的 devid。不能重用老的devid。之所以这样做的原因是可以让你从旧设备中给所有文件列表中的文件,重新复制到其它的Mogilefs 的硬盘中.不然容易引起文件不会复制到这个中和错误的更新,也不会重新复制的旧文件。
添加设备的命令如下:
【mogadm --tracker=172.17.xxx.xxx:7001 device add node 5 --status=alive】
【mogadm --tracker=172.17.xxx.xxx:7001 device add node 5 --status=down】
只读模式和耗尽(Drain) 模式:
如果你想要冻结设备上所有的文件,你要使用只读模式就行了。这将停掉 MogileFS 存放新文件到这个设备上,但它也将阻止删除文件。代替的删除的操作是会给这些内容放到队列中等待为您标记为'alive'着或'drain'。
【mogadm device mark mystorage 5 readonly】
【mogadm device mark mystorage 5 drain】
耗尽(Drain) 模式,在2.40和更高版本以上,告诉MogileFS不会有新的文件应写入设备。但是在耗尽(Drain) 模式,文件可能被删除。所以如果你不希望写文件到这个设备上,可以设置为drain的模式。
注:耗尽(Drain) 模式在MogileFS的早期版本,将会从设备删除 FIDS。现在它已经被重新均衡的功能取代。
重新复制文件:
如果有一个硬盘坏了MogileFS可以自动的让请求不在访问这个设备,但是不会自动的重新复制这个硬盘的文件,你必须通过 mogadm来手工来标志成 'dead'。只要你这样做,MogileFS将开始删除设备上的文件,并试图在集群间重新复制它们到其它的设备上。
|
|
|