MogileFS介绍

MogileFS

	是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发。
Danga团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。
目前使用MogileFS 的公司非常多,以大众点评为例,用户全部图片均有mogileFS存储,数据量已经达到500TB级别以上。

mogilefs的特性

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

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 服务,扩容就是增加这些机器,实际文件存放的地方。

mogileFS架构

	每次文件的上传和读取,都经过前端TrackerServer 服务。
trackerServer 服务器受到client 端的请求,查询数据库,返回一个上传或者是读取的可用的后端StorageServer 的地址,然后由client 端直接操作后端StorageServer 服务器。
upload 操作返回就是成功或者失败的结果。
read 操作就是返回对应的查询数据。

mogileFS管理的几个概念

	Domain:
一个MogileFS可以有多个Domain,用来存放不同文件(大小,类型),同一个Domain内key必须唯一,不同Domain内,key可以相同。
每一个存储节点称为一个主机host,一个主机上可以有多个存储设备dev(单独的硬盘),每个设备都有ID号,Domain+Fid用来定位文件。
Class:
文件属性管理,定位文件存储在不同设备上的份数。

mogilefs安装方式

	yum安装
使用epel源进行安装环境包
yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO
本地安装的rpm包:
MogileFS-Server-2.46-2.el7.noarch.rpm #核心服务
MogileFS-Server-mogilefsd-2.46-2.el7.noarch.rpm # tracker节点
MogileFS-Server-mogstored-2.46-2.el7.noarch.rpm #Storage存储节点
MogileFS-Utils-2.19-1.el7.noarch.rpm #主要是MogileFS的一些管理工具,例如mogadm等。
perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm #socket
perl-MogileFS-Client-1.14-1.el7.noarch.rpm #客户端
perl-Perlbal-1.78-1.el6.noarch.rpm
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程序功能的配置文件

	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上存储的实际位置,建议使用的是一个单独挂载使用的磁盘

mogilefs服务初始化

	1》数据库授权
GRANT ALL PRIVILEGES ON *.* TO 'mogile' @'localhost' IDENTIFIED BY 'mogile' WITH GRANT OPTION;
2》设定数据库:
mogdbsetup --help
mogdbsetup --dbhost=127.0.0.1 --dbpass=mogpass
用户名默认为:mogile
3》添加运行用户
useradd -r mogilefs
mkdir /var/run/mogilefsd/
chown -R mogilefs.mogilefs /var/run/mogilefsd #yum安装的话已经完成
4》修改主配置文件:
/etc/mogilefs/mogilefsd.conf
5》启动服务 (tracker 服务为 mogilefsd ) (storage服务为mogstored)

mogilefs的管理

	mogstored 程序的启动将使主机本身成为一个存储的节点,mogstored 的启动后,还需要使用 mogadm 来让当前的这个主机加入到 MogileFS 的系统中.这就是一个存储节点.注意存储节点中还需要添加设备,每个设备有一个 uniq 的 ID 号.同样也要使用 mogadm 来加入到 MogileFS 的系统中.
MogileFS 中的存储主机(节点)管理
现在加入“存储节点”到 trackers 中.告诉注册自己到 trackers.相当于为每个主机加入 MogileFS 的存储系统
添加主机,将主机信息注册到数据库中
mogadm host add <storage_node_name> --ip=127.0.0.1 --port=7500 --status=alive
检查这个主机是否加入到 MogileFS 的系统中.
mogadm host list
可以修改主机IP
mogadm host modify node1 --ip=123.xxx.xxx.70 --status=alive MogileFS 中的存储设备管理
建一个目录 ( 并且需要 mount 一个硬盘给这个目录 ) 给这个"设备" 使用, 我们这的例子是使用dev1在主机中建一个目录,建目录使用 dev + ID 这种格式,记的所有系统中 ID 不能重复.也必须和配置文件中的路径一样.
mkdir -p /data/mogdata/dev1
一定要注意, 给相对应用的块设备 mount 到这个点, 软链也行. 不然写文件都会写到系统硬上,其它的硬盘都是空的
给"设备"加入”存储的节点“当中,相当于为每个设备加入 MogileFS 的存储系统
mogadm device add <storage_node_name> ID
检查我们加入的"设备"信息,这样就能见到上面这个设备了.还能显示加入的大小.
mogadm device list
标记失效的设备,当硬盘坏了,设备有问题时,这时会自动在一个域内复制到最小设置的保存份数.恢复上面一样在一次 add 设备就好了
mogadm device mark <storage_node_name> <storage_node_name> ID dead MogileFS 中域,类的管理
当上面的准备好了,MogileFS 是运行中时,接下来我们要建一个我们自己的'名字空间'和加入文件到存储当中.
我们使用 mogadm 的工具来能创建一个"域"和"类".也可以使用这个来增加文件到"类"中.
建"域"
mogadm domain add <domain_name>
检查"域",显示存在的域
mogadm domain list
在"域"中建"类",并加入最小保存份数
mogadm class add <domain_name> <class_name> --mindevcount=3
MogileFS 中文件管理
我们可以简单的使用 mog 开头的系列 Linux 命令, 来进行管理, 当然也可以用 Client 的 API来管理. 新的 MogileFS 的工具, 拆分成多个了. 下面这些命令, 都需要在/etc/mogilefs/mogilefs.conf 中指定 trackers , 不然就需要在下面的命令都加上 –trackers来指定.
1. 上传文件
mogupload --domain=magedu --key=<key_name> --file=<file_path>
2. 查询文件
mogfileinfo --trackers=host --domain=<domain_name> --key=<key_name>
3.查询一个叫 crossdomain 的 key .在指定的 domain 中.
mogfileinfo --domain=magedu --key=magedu
4. 删除指定文件
mogdelete --domain=<domain_name> --key=<key_name>
5. 列出所有的文件 key
这个可以列出指定 domain 下面的所有的 key , 也可以指定的一个前缀, 来找特定前缀的所有文件的 key.
moglistkeys --domain=<domain_name> --key_prefix=<key_name>
6. 列出指定 fid 的文件
这个 fromfid 是指 mogileFS 内部的文件 id , 这个是自增的, 你可以指定一个开始的位置, 指定显示多少文件, 这个用于查询指定时间段内上传的文件时很有用. 比如我们在 8 点上传了一个文件, 是 100 的 id, 我们可以查询到从这个之后的所有的 id 的文件.
moglistfids --fromfid=<file_id> --count=<数量> 暂时停止服务器
如果你需要维护一个服务器,比如更新内存,升级操作系统之类的需要关机的操作,推荐你在操作之前先设置这些为 "down". MogileFS 对这种偶然的故障可以很弹性的处理.
mogadm host mark mystorage down
mogadm host mark mystorage alive
硬盘设备编号
添加新的硬盘设备需要给一个唯一的,增量的设备 ID(devid).
如果你用一个新的硬盘来更换坏掉的硬盘,总是需要给一个新的 devid.不能重用老的 devid. 之所以这样做的原因是可以让你从旧设备中给所有文件列表中的文件,重新复制到其它的Mogilefs 的硬盘中.不然容易引起文件不会复制到这个中和错误的更新,也不会重新复制的旧文件.
添加设备
添加设备的命令如下:
mogadm device add mystorage 5 --status=alive
... or...
mogadm device add mystorage 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 将开始删除设备上的文件,并试图在集群间重新复制它们到其它的设备上.

MogileFS的rebalance功能

	MogileFS的rebalance功能可以平衡各个storage节点磁盘的使用情况,将磁盘剩余空间很少的磁盘中的数据搬到磁盘剩余空间大的磁盘上,使磁盘的使用率基本达到平衡
使用方法
mogadm rebalance policy --options="from_hosts=2 to_percent_free=99" #设置rebalance策略,表示从设备id为2,搬到剩余空间为99%的存储设备
mogadm rebalance test #查看一下策略
Tested rebalance policy...
Policy: from_hosts=2 to_percent_free=99
Source devices:
- 2
Destination devices:
- 1
- 3
mogadm rebalance start #运行此策略
mogadm rebalance stop #停止rebalance策略

MogileFS介绍的更多相关文章

  1. MogileFS-2.44 安装与配置

    MogileFS-2.44 安装与配置 (转:https://my.oschina.net/u/1259000/blog/182277) 目录 一.MogileFS 介绍 1.1.环境 二.Mogil ...

  2. MogileFS 的介绍(MogileFS 系列1)[分布式文件系统]

    MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包括 Memcached.M ...

  3. 企业级分布式存储应用与实战-mogilefs实现

    Mogilefs是什么 MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发.Danga团队开发了包括 Memcached.Mogi ...

  4. Ceph,TFS,FastDFS,MogileFS,MooseFS,GlusterFS 对比

    系统整体对比 对比说明 /文件系统 TFS FastDFS MogileFS MooseFS GlusterFS Ceph 开发语言 C++ C Perl C C C++ 开源协议 GPL V2 GP ...

  5. MogileFS与FastDFS的个人见解

    MogileFS与FastDFS的个人见解 六月 9, 2013 1 条评论 MogileFS & FastDFS 为两个开源分布式文件系统,都主要适用于互联网文件共享,上传,下载等功能,主要 ...

  6. 构建Mogilefs分布式文件系统(配置篇)

    构建Mogilefs分布式文件系统:  当下互联网飞速发展,海量并发所产生的数据量以几何方式增长,随着信息链接方式日益多样化,数据存储的结构也发生了变化,在这样的压力下我们不得不重新审视大量数据的存储 ...

  7. 分布式存储之MogileFS基于Nginx实现负载均衡(Nginx+MogileFS)

    MogileFS分布式文件系统特点: 1.具有raid的性能 2.不存在单点故障 3.简单的命名空间: 每个文件对应一个key:用于domain定义名称空间 4.不共享任何数据 5.传输中立,无特殊协 ...

  8. FastDFS的介绍

    FastDFS的介绍 FastDFS FastDFS是由国人余庆所开发,其项目地址: https://github.com/happyfish100 FastDFS是一个轻量级的开源分布式文件系统,主 ...

  9. CSS3 background-image背景图片相关介绍

    这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...

随机推荐

  1. WSS、SSL 和 https 之间的关系

    SSL SSL(Secure Socket Layer,安全套接层) 简单来说是一种加密技术, 通过它, 我们可以在通信的双方上建立一个安全的通信链路, 因此数据交互的双方可以安全地通信, 而不需要担 ...

  2. unity 菜单栏添加新菜单

    using UnityEngine; using System.Collections; using UnityEditor; public class jqmTools : CreateSphere ...

  3. maven运行tomcat6出现错误Exception starting filter encodingFilter怎么解决

    严重: Exception starting filter encodingFilterjava.lang.ClassCastException: org.springframework.web.fi ...

  4. git-svn操作

    1.git svn clone --username=chenzheng   http://10.0.0.178/repos/trunk/hxqcgf/auto_accessories.admin.h ...

  5. MVC系统学习8——AsyncController

    关于为什么使用异步Controller,这里不做备忘,三岁小孩都懂.主要的备忘是如何使用AsyncController. //这个action以Async结尾,并且返回值是void public vo ...

  6. CodeForces 159E

    题目大意: 给定一堆带颜色和高度的魔方 用两种颜色的魔方,一种颜色接一种颜色向上拼接搭建成一个高塔,求高塔的最长高度,以及将拼接的过程中对应的编号顺序输出 多种情况成立输出任意一种即可 这里首先要对颜 ...

  7. 2017年12月14日 一个Java开发的Python之路----------------(二)

    说一个收获最大的,就是这个关闭流对象 之前写java读取文件的时候,最后往往要关闭流对象,以前我一直不明白,为什么,我不使用.close()方法,文件也可以读取成功,总感觉没有什么意义 原来是因为,这 ...

  8. Thinkphp5.0 的使用模型Model的获取器与修改器

    Thinkphp5.0 的使用模型Model的获取器.修改器.软删除 一.获取器 在model中使用 get+字段名+Attr,可以修改字段的返回值. 数据库中性别保存为,0未知.1男.2女,查询时返 ...

  9. mysql性能调优——Query优化

    上节谈了关于mysql锁定机制的优化方案,下面来谈一下Query优化——Mysql Query Optimizer 当Mysql Query Optimizer接受到从Query Parser过来的Q ...

  10. Win7 文件加密存储操作后,如何在事后备份证书、秘钥

    这个密钥的特点是只有在此系统下用此账户才可以修改,即便是你用此账户设置加密后删除此账户再重新建一个同名的账户依然无法修改.而且此密钥无法破解.所以一旦加密后,重装系统或者更换账户就无法修改了.唯一的办 ...