MogileFS

一、分布式文件系统

分布式文件系统是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,即集群文件系统,可以支持大量的节点以及PB级的数量存储。

1、分布式文件系统类别

名称 特性
MogileFS 适用于处理海量的小文件
Ceph 一个Linux PB级别的分布式文件系统
MooseFS 通用简便,适用于研发能力不强的公司
Taobao Filesystem 适用于处理海量小文件
ClusterFS 适用于处理单个大文件
Google Filesystem GFS+MapReduce擅长处理单个大文件
Hadoop Distributed Filesytem 擅长处理单个大文件

2、分布式文件系统特点

  • 节点间能相互通信
  • 同一数据存储在多个节点上
  • 数据空间平衡
  • 具有容错能力
  • 文件系统支持

3、CAP理论

  • C(Consistency):任何一个读写操作总是能够读取之前完成写操作
  • A(Availability):每一次操作总是能够在确定的时候返回,无论成功或失败都能够收到一个返回值
  • P(Tolerance of network Parition):在出现网络分区的情况下,仍然能够满足一致性和可用性

二、MogileFS

MogileFS是一款开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发。

1、MogileFS组成

  • server:主要包括mogilefsd和mogstored两个应用程序。监听端口与7001

    • mogilefsd实现的是tracker,它是一个调度器;主要用于Replication,Deletion,Query,Reaper,Moinitor等,这个是基于事件父进程/消息总线来管理所有来之于客户端应用的交互,包括将请求负载平衡到多个“query workers”中,然后让MogileFS的子进程去处理。
    • mogstored是存储节点,它其实是WebDAV服务,默认监听在7501端口,接受客户端的文件存储请求。一台存储主要都要启动一个mogstored服务,廓清就是增加这些机器,实际文件存放地方。
  • MySQL:用来存放MogileFS的元数据,是Tracker来操作和管理它,可以用mogdbsetup程序来初始化数据库,因为数据保存了MogileFS的所有元数据,建议做成HA结构。

注意:在MogileFS安装完后,要运行mogadm工具将所有的存储节点注册到mogilefsd的数据库中,mogilefsd会对这些节点进行管理和监控。

  • utils(工具集):主要是MogileFS的一些管理工具,如mogadm

  • 客户端API:MogileFS的客户端API很多,例如Perl、PHP、Java等,用这些模块可以编写客户端程序,实现文件的备份管理功能等。

2、MogileFS特性

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

3、MogileFS管理几个概念

  • Domain:一个MogileFS可以有多个Domain,用来存放不同文件,同一个Domain内key必须唯一,不同Domain内,key可以相同
  • 每一个存储节点称为一个主机host,一个主机可以有多个存储设备dev,每个设备都有ID号,Domain+FID用来定位文件。设备不能删除的,只能将其设备的状态的值为dead,当一个设备dead之后,就真的dead了,里面的数据也无法恢复了,且这个dead了的设备ID也不能使用了。
  • Class:文件属性管理,定位文件存储在不同设备上的分数

4、MogileFS工作原理

  • (1)应用程序请求打开一个文件,做一个“create_open”请求
  • (2)tracker做一些负载均衡处理,决定应该去哪儿,然后给应用程序一些可能用的位置信息
  • (3)应用程序写到其中一个位置上去
  • (4)应用程序通过“create_close”告诉tracker文件写到哪里
  • (5)tracker将名称和域的空间管理
  • (6)tracker在后台开始复制文件,知道他满足该文件类别设定的复制规则
  • (7)应用程序通过“get_path”请求domain+key文件,tracker基于每一位的I/O繁忙情况回复,该文件可用的完整URL地址列表
  • (8)应用程序然后按顺序尝试这些URL地址

三、MogileFS安装及文件介绍

1、MogileFS安装

安装包 描述
MogileFS-Server.noarch 0:2.46-2.el7.centos 核心服务
MogileFS-Server-mogilefsd.noarch 0:2.46-2.el7.centos tracker节点
MogileFS-Server-mogstored.noarch 0:2.46-2.el7.centos 存储节点
MogileFS-Utils.noarch 0:2.19-1.el7.centos MogileFS管理工具
perl-Danga-Socket.noarch 0:1.61-1.el6.rf socket
perl-MogileFS-Client.noarch 0:1.14-1.el7.centos 客户端
perl-Perlbal.noarch 0:1.78-1.el6 库包

将上述的包上传至本地安装

[root@node1~]#yum localinstall -y *.rpm

2、MogileFS-Server-mogilefsd安装包文件

文件 描述
/etc/mogilefs/mogilefsd.conf 主配置文件
/etc/rc.d/init.d/mogilefsd 启动程序
/usr/bin/mogdbsetup 数据库初始化工具

/etc/mogilefsd.conf配置文件详解

  1 # Enable daemon mode to work in background and use syslog
  2 daemonize = 1   #是否启动守护进程
  3 # Where to store the pid of the daemon (must be the same in the init script)
  4 pidfile = /var/run/mogilefsd/mogilefsd.pid  #pid文件存放位置
  5 # Database connection information
  6 db_dsn = DBI:mysql:mogilefs:host=127.0.0.1  #数据库连接地址
  7 db_user = username  #数据库名称
  8 db_pass = password  #数据库密码
  9 # IP:PORT to listen on for mogilefs client requests
 10 listen = 127.0.0.1:7001 #监听地址及端口
 11 # Optional, if you don't define the port above.
 12 conf_port = 7001
 13 # Number of query workers to start by default.
 14 query_jobs = 10 #工作线程
 15 # Number of delete workers to start by default.
 16 delete_jobs = 1 #删除工作线程
 17 # Number of replicate workers to start by default.
 18 replicate_jobs = 5  #复制数量
 19 # Number of reaper workers to start by default.
 20 # (you don't usually need to increase this)
 21 reaper_jobs = 1
 22 # Number of fsck workers to start by default.
 23 # (these can cause a lot of load when fsck'ing)
 24 #fsck_jobs = 1  #检查
 25 # Minimum amount of space to reserve in megabytes
 26 # default: 100
 27 # Consider setting this to be larger than the largest file you
 28 # would normally be uploading.
 29 #min_free_space = 200
 30 # Number of seconds to wait for a storage node to respond.
 31 # default: 2
 32 # Keep this low, so busy storage nodes are quickly ignored.
 33 #node_timeout = 2   #超时时长
 34 # Number of seconds to wait to connect to a storage node.
 35 # default: 2
 36 # Keep this low so overloaded nodes get skipped.
 37 #conn_timeout = 2   #连接超时时长

3、MogileFS-Server-mogstored安装包文件

文件 描述
/etc/mogilefs/mogstored.conf 主配置文件
/etc/rc.d/init.d/mogstored 启动程序

/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  #数据存放位置

4、mogdbsetup命令

使用方法

Usage: mogdbsetup [opts]
选项 默认值 描述
–dbhost localhost 数据库主机IP或主机名
–dbport dbd default 数据库端口
–dbname mogilefs 数据库名称
–dbrootuser root 数据库用户
–dbrootpass 数据库密码
–dbuser mogile 数据库dbname使用者
–dbpass 数据库密码
–type MySQL 数据库类型

5、mogstored命令

使用方法

Usage: mogstored [OPTS]

|选项|描述
|–daemonize,-d|是否守护进行运行
|–config|指定配置文件,默认为/etc/mogilefs/mogstored.conf
|–httplisten=|HTTP服务监听地址和端口
|–docroot|数据存储位置,默认为/var/mogdata
|–maxconns|最大连接数

6、mogadm命令

  • mogadm host 管理主机节点
    • host add 添加主机到MogileFS
    • host delete 删除
    • host list 列出所有节点
    • host mark 标记主机节点状态
    • host modify 修改属性
  • mogadm device 管理设备
    • device add 添加设备到一个主机中
    • device list 列出所有设备从每个主机中
    • device marik 标记设备状态(alive、dead、down、drain、readonly)
    • device modify 修改设备属性
    • device next 显示下一个可用设备
  • mogadm domain 管理域
    • domain add 添加一个域
    • domain delete 删除一个域
    • domain list 列出所有
  • mogadm class 管理文件属性
    • class add 添加一个文件属性到域中
    • class delete 删除一个属性
    • class list 列出所有
    • class modify 修改属性
  • mogadm fsck 检测
    • fsck clearlog 清除检测日志
    • fsck printlog 显示检测日志
    • fsck status 显示检测状态

7、mogupload命令

使用方法

mogupload --trackers=host --domain=foo --class=bar  --key="/hello.jpg" --file="input.jpg"
选项 描述
–trackers=host:7001,host2:7002 指定trakcers
–domain 指定域
–key 指定key
–file 指定文件,如果使用“-”,读文件标准输入

四、MogileFS集群构建

主机名 IP地址 功用 安装的包
node1 192.168.4.61 tracker、storged、mogilefsd MogileFS-Server-2.46-2.el7.centos.noarch.rpm 、MogileFS-Server-mogilefsd-2.46-2.el7.centos.noarch.rpm、 MogileFS-Server-mogstored-2.46-2.el7.centos.noarch.rpm 、MogileFS-Utils-2.19-1.el7.centos.noarch.rpm perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm、 perl-MogileFS-Client-1.14-1.el7.centos.noarch.rpm 、perl-Perlbal-1.78-1.el6.noarch.rpm
node2 192.168.4.62 storged、mogilefsd MogileFS-Server-mogstored-2.46-2.el7.centos.noarch.rpm 、perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm 、perl-MogileFS-Client-1.14-1.el7.centos.noarch.rpm 、perl-Perlbal-1.78-1.el6.noarch.rpm
node3 192.168.4.63 storged、mogilefsd MogileFS-Server-mogstored-2.46-2.el7.centos.noarch.rpm 、perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm、 perl-MogileFS-Client-1.14-1.el7.centos.noarch.rpm 、perl-Perlbal-1.78-1.el6.noarch.rpm

注意:一定要同步时间,否则复制时会报错。

(1)安装所需要的包

[root@node1~]#yum install perl-Net-Netmask perl-IO-string perl-Sys-Syslog perl-IO-AIO -y 三个节点都安装

[root@node1~]#yum localinstall -y *.rpm

[root@node2~]#yum localinstall -y *.rpm

[root@node3~]#yum localinstall -y *.rpm

(2)node1节点上配置MySQL

[root@node1~]#yum install -y mariadb-server

[root@node1~]#systemctl start mariadb.service

授权用户

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'mogile'@'127.0.0.1' IDENTIFIED BY 'mogile' WITH GRANT OPTION;

MariaDB [(none)]> FLUSH PRIVILEGES;

初始化数据库

[root@node1~]#mogdbsetup --dbhost=127.0.0.1 --dbpass=mogile

This will attempt to setup or upgrade your MogileFS database.
It won't destroy existing data.
Run with --help for more information.  Run with --yes to shut up these prompts. #询问是否继续

Continue? [N/y]: y

Create/Upgrade database name    'mogilefs'? [Y/n]: y    #是否创建数据库名为mogilefs

Grant all privileges to user 'mogile', connecting from anywhere, to the mogilefs database 'mogilefs'? [Y/n]: y  #是否所有权限给用户mogile

(3)修改mogilefsd.conf配置文件

daemonize = 1
pidfile = /var/run/mogilefsd/mogilefsd.pid
db_dsn = DBI:mysql:mogilefs:host=127.0.0.1  #修改数据库连接地址
db_user = mogile    #数据库使用者
db_pass = mogile    #数据库密码
listen = 127.0.0.1:7001     #修改mogilefsd监听的地址和端口
conf_port = 7001
query_jobs = 10
delete_jobs = 1
replicate_jobs = 5
reaper_jobs = 1

(4)启动mogilefsd服务

[root@node1~]#systemctl status mogilefsd.service

(5)启动mogstored服务

[root@node1~]#mkdir -pv /data/mogilefs/

[root@node1~]#chown -R mogilefs.mogilefs /data/mogilefs

[root@node1~]#vim /etc/mogilefs/mogstored.conf

  1 maxconns = 10000
  2 httplisten = 0.0.0.0:7500
  3 mgmtlisten = 0.0.0.0:7501
  4 docroot = /data/mogilefs

[root@node1~]#service mogstored start

(6)node2和node3安装

[root@node3~]#mkdir -pv /data/mogilefs

[root@node3~]#chown -R mogilefs.mogilefs /data/mogilefs/
[root@node3~]#systemctl status mogstored

五、MogileFS管理

mogstored程序启动使主机本身成为一个存储节点,mogstored的启动后,需要使用mogadm管理工具将当前的主机加入到MogileFS的系统中。

注意:存储节点中还需要添加设备,每个设备有一个uuiq的ID号,同样也需要使用mogadm加入到MogileFS系统中。

1、添加主机到tracker

告诉注册自己到tracker,相当于为每个主机加入MogileFS的存储系统。

[root@node1~]#mogadm host add node1 --ip 192.168.4.61 --port=7500 --status=alive

[root@node1~]#mogadm host add node2 --ip 192.168.4.62 --port=7500 --status=alive
[root@node1~]#mogadm host add node3 --ip 192.168.4.63 --port=7500 --status=alive

[root@node1~]#mogadm host list 显示所有主机

node1 [1]: alive
  IP:       192.168.4.61:7500

node2 [2]: alive
  IP:       192.168.4.62:7500

node3 [3]: alive
  IP:       192.168.4.63:7500

2、MogileFS存储设备管理

注意:所有系统中ID不能重复,也必须和配置文件中的路径一致。

[root@node1~]#mkdir /data/mogilefs/dev1 -pv
[root@node2~]#mkdir /data/mogilefs/dev2 -pv
[root@node3~]#mkdir -pv /data/mogilefs/dev3

注意:给相对应的块设备mount到这个点,软连接也行,不然写文件都会写到系统硬件上,其他的硬盘都是空的。

[root@node1~]#mogadm device add node1 1
[root@node1~]#mogadm device add node2 2
[root@node1~]#mogadm device add node3 3
[root@node1~]#mogadm device list

标记失效的设备,当硬盘坏了,设备有问题时,这时会自动在一个域内复制到最小设备的保存分数。恢复时和add操作一遍即可。

3、MogileFS域的管理

当创建上述完成之后,MogileFS运行中时,建一个自己的名字空间和加入文件到存储中。

[root@node1~]#mogadm domain add test
[root@node1~]#mogadm domain list

[root@node1~]#mogadm class add test class1 --mindevcount=3 #在域中建类,并加入最小保存分数

建议一个类的最小存储分数为3份;因为可以保证整个集群挂掉2台还能正常工作。在加入和修改的时候,都可以加上mindevcount、replpolicy和hashtype参数。

4、MogileFS文件管理

使用如下命令需要在/etc/mogilefs/mogilefs.conf中指定trackers,不然就需要在命令中加--trackers来指定。

[root@node1~]#mogupload --trackers=127.0.0.1:7001 --domain=test --key=fstab --file=/etc/fstab

查询信息

[root@node1~]#mogfileinfo --trackers=127.0.0.1:7001 --domain=test --key=fstab

- file: fstab
     class:              default
  devcount:                    1
    domain:                 test
       fid:                    3
       key:                fstab
    length:                  541
 - http://192.168.4.62:7500/dev2/0/000/000/0000000003.fid    通过此网址可以访问到数据

[root@node1~]#mogfiledebug --trackers=127.0.0.1:7001 --paths=print --domain=test --key=fstab #显示更多详细信息

[root@node1~]#mogdelete --trackers=127.0.0.1:7001 --domain=test --key=fstab #删除指定文件

[root@node1~]#moglistkeys --trackers=127.0.0.1:7001 --domain=test #列出某个域下的文件key

moglistfids --trackers=host --fromfid=123 --count=5000
fromid是之mogileFS内部文件的ID,这个是自增的,可以指定从一个开始的位置,指定显示多杀个文件。
[root@node1~]#moglistfids --trackers=127.0.0.1 --fromid=1 --count=5

5、MogileFS服务器管理

如果需要维护一个服务器,如更新内存、升级操作系统之类的需要关机操作,操作之前先设置为“down”。

[root@node1~]#mogadm host mark node1 down

[root@node1~]#mogadm host mark node1 alive

6、MogileFS硬盘管理

添加新的硬盘设备需要给一个唯一的,增量的设备ID。如果使用一个新的硬盘来替换坏掉的硬盘,总是需要给一个新的设备ID,不能使用旧的。因为这样可以从就设备中给所有文件列表中的文件重新复制到其他的MogileFS硬盘中;不然容器引起文件复制到这个中和错误的更新,也不会重新复制旧文件。

7、MogileFS只读模式和耗尽模式

如果想要冻结设备上的所有文件,只读模式就可以解决。这样将停掉MogileFS存放新文件到这个设备上,但它也将阻止删除文件,替代删除的操作会给这些内容放到丢列中等待为标记的’alive’和“drain”。

[root@node1~]#mogadm device mark node2 2 readonly

注意:耗尽模式,在2.40和更高版本以上,MogileFS不会有新的文件写入设备,但是在耗尽模式,文件可能被删除,如果不希望将文件写到这个设备上,可以设置为drain模式。

8、MogileFS复制

如果一个硬盘坏了,MogileFS可以自动的让请求不再访问这个设备,但是不会自动的重新复制这个硬盘文件,必须通过mogadm来手工标志位dead,MogileFS将开始删除设备上的文件,并试图在集群间重新复制他们到其他设备上。


  转载请注明: Joah MogileFS

 上一篇
Jumpserver Jumpserver
一、JumpserverJumpserver是一款实用Python,Django开发的开源跳板机系统,为互联网提供了认证、授权、审计、自动化运维等功能。基于ssh协议来管理,客户端无需安装agent。 1、Jumpserver工作原理
2017-12-17
下一篇 
FastDFS FastDFS
一、FastDFSFastDFS是一个国产开源的轻量级分布式文件系统;对文件进行管理,功能包括:文件存储、文件同步、文件访问等,解决了大容量存储和负载均衡的问题。特别适合以中小文件为载体的在线服务,如相册网站、视频网站等。 1、FastDS
2017-12-16