简介
MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发。Danga团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。
MogileFS组成:
- server:主要包括mogilefsd和mogstored两个应用程序。mogilefsd实现的是tracker,它通过数据库来保存元数据信息,包括站点domain、class、host等;mogstored是存储节点(store node),它其实是个WebDAV服务,默认监听在7500端口,接受客户端的文件存储请求。在MogileFS安装完后,要运行mogadm工具将所有的store node注册到mogilefsd的数据库里,mogilefsd会对这些节点进行管理和监控。
- utils(工具集):主要是MogileFS的一些管理工具,例如mogadm等。
- 客户端API:MogileFS的客户端API很多,例如Perl、PHP、Java、Python等,用这个模块可以编写客户端程序,实现文件的备份管理功能等。
存储节点
-
存储主机(节点)
这个是 MogileFS 存储文件存放在这些机器上,也是 mogstored 节点,也叫 Storage Server,一台存储主要都要启动一个 mogstored 服务.扩容就是增加这些机器. -
设备(device)
一个存储节点,可以有多个 device, 就是用来存放文件的目录(例如挂载的目录),每个设备都有一个设备id,需要在 mogstored 的配置文件中的 docroot 配置的项目 指定的目录下面创建相应的设备的目录,目录名为\ $docroot/dev$id,设备是不能删除的.只能将其设备的状态的值置为dead,当一个设备 dead 之后,就真的 dead了,里面的数据也无法恢复了,且这个dead了的设备的 id 也不能再用. -
Domain域
- 一个MogileFS可以有多个Domain
- 用来存放不同文件(大小,类型)同一个Domain内key必须唯一
- 不同Domain内,key可以相同
- Class
- 文件属性管理
- 定位文件存储在不同设备上的份数定位文件存储在不同设备上的份数
流程
(这里的trackers可以有多个.这里只是为了搭建简单)
客户端访问文件大致流程
- 客户端去询问Tracker,访问的文件的位置。
- Tracker查找数据库,并告诉客户端它请求访问的文件的位置
- 客户端去对应的存储节点获取文件
安装
第一步:数据库节点安装MariaDB数据库
数据库节点安装MariaDB数据库
yum install mariadb mariadb-server -y
启动数据库
systemctl start mariadb
第二步:tracker和storage节点安装Mogilefs
tracker和storage节点都执行下面命令
yum groupinstall "Development Tools" -y #开发工具包组
yum -y install make gcc gcc-devel unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes openssl openssl-devel perl-IO-Socket-*
然后执行下面的命令,第一次进入会找附近的镜像等,直接一直回车就可以了
perl -MCPAN -e shell
等到下面这个页面
执行命令,开始正式安装MogileFS和相关的依赖包
install App::cpanminus
install Danga::Socket
install IO::AIO
install Perlbal
install MogileFS::Client
install MogileFS::Utils
install MogileFS::Server
第三步:数据库节点创建相关用户和配置数据库
进入数据库创建用户
MariaDB [(none)]> grant all on mogilefs.* to 'moguser'@'192.168.253.%' identified by 'mogpass';
初始化mogilefs相关数据库
mogdbsetup --dbhost=192.168.253.158 --dbport=3306 --dbname=mogilefs --dbuser=moguser --dbpass=mogpass
进入数据库,查看相关表信息
第四步:配置tracker节点并启动服务
[root@localhost ~]# cat /etc/mogilefsd.conf
# Enable daemon mode to work in background and use syslog
daemonize = 1 #是否守护进程启动,1为是
# Where to store the pid of the daemon (must be the same in the init script)
pidfile = /tmp/mogilefsd.pid #pid文件路径
# Database connection information
db_dsn = DBI:mysql:mogilefs:host=192.168.253.158 #数据库地址
db_user = moguser #连接数据库的用户
db_pass = mogpass #连接数据库的密码
# IP:PORT to listen on for mogilefs client requests
listen = 192.168.253.158:7001 #监听的地址
# Optional, if you don't define the port above.
conf_port = 7001
# Number of query workers to start by default.
query_jobs = 10
# Number of delete workers to start by default.
delete_jobs = 1
# Number of replicate workers to start by default.
replicate_jobs = 5
# Number of reaper workers to start by default.
# (you don't usually need to increase this)
reaper_jobs = 1
# Number of fsck workers to start by default.
# (these can cause a lot of load when fsck'ing)
#fsck_jobs = 1
# Minimum amount of space to reserve in megabytes
# default: 100
# Consider setting this to be larger than the largest file you
# would normally be uploading.
#min_free_space = 200
# Number of seconds to wait for a storage node to respond.
# default: 2
# Keep this low, so busy storage nodes are quickly ignored.
#node_timeout = 2
# Number of seconds to wait to connect to a storage node.
# default: 2
# Keep this low so overloaded nodes get skipped.
#conn_timeout = 2
# Allow replication to use the secondary node get port,
# if you have apache or similar configured for GET's
#repl_use_get_port = 1
创建用户
useradd -M mogile #创建用户
启动服务
[root@localhost ~]# su mogile #因为不能用root启动这个服务所以需要切换用户
bash-4.2$ mogilefsd -c /etc/mogilefsd.conf #手动启动服务
第五步:配置storage 节点
[root@localhost ~]# cat /etc/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /mogilefs/data #存放数据的目录
创建相关目录
useradd -M mogile #创建用户
mkdir -pv /mogilefs/data/dev1 (158目录为dev1,168目录为dev2,128目录为dev3)
chown -R mogile:mogile /mogilefs
启动服务
mogstored -config /etc/mogstored.conf -d
到此tracker和存储节点都安装好了接下来就是管理的了。
storage 节点管理
tracker添加存储主机(storage 节点)
现在加入“存储节点”到 trackers 中.告诉注册自己到 trackers.相当于为每个主机加入 MogileFS 的存储系统
mogadm --trackers=192.168.253.158:7001 host add 192.168.253.158 --ip=192.168.253.158 --port=7500 --status=alive
mogadm --trackers=192.168.253.158:7001 host add 192.168.253.168 --ip=192.168.253.168 --port=7500 --status=alive
mogadm --trackers=192.168.253.158:7001 host add 192.168.253.128 --ip=192.168.253.128 --port=7500 --status=alive
查看存储主机(storage 节点)列表
mogadm --trackers=192.168.253.158:7001 host list
检查trackers和存储节点
mogadm --trackers=192.168.253.158:7001 check
添加存储设备
格式:mogadm device add <storage_node_name> ID
检查我们加入的"设备"信息,这里的ID和主机/mogilefs/data/devID这个目录有关
mogadm --trackers=192.168.253.158:7001 device add 192.168.253.158 1
mogadm --trackers=192.168.253.158:7001 device add 192.168.253.168 2
mogadm --trackers=192.168.253.158:7001 device add 192.168.253.128 3
查看存储设备
mogadm --trackers=192.168.253.158:7001 device list
域和类的管理
域的管理命令
mogadm domain add <domain> 添加
mogadm domain delete <domain> 删除
mogadm domain list 查看
创建3个域,分别是domain1,domain2,domain3
mogadm --trackers=192.168.253.158:7001 domain add domain1
mogadm --trackers=192.168.253.158:7001 domain add domain2
mogadm --trackers=192.168.253.158:7001 domain add domain3
查看域
mogadm --trackers=192.168.253.158:7001 domain list
删除域
mogadm --trackers=192.168.253.158:7001 domain delete domain1
类管理命令
mogadm class add <domain> <class> [opts] 添加
<class> Name of class to add.
<domain> Domain to add class to.
--hashtype=s Hash algorithm string ('MD5', 'NONE').
--mindevcount=i Minimum number of replicas.
--replpolicy=s Replication policy string.
mogadm class delete <domain> <class> 删除
mogadm class list 查看
mogadm class modify <domain> <class> [opts] 修改
创建类
mogadm --trackers=192.168.253.158:7001 class add domain2 class1 --mindevcount=2
mogadm --trackers=192.168.253.158:7001 class add domain2 class2 --hashtype=MD5 --mindevcount=3
查看类
mogadm --trackers=192.168.253.158:7001 class list
文件管理
上传文件
格式: mogupload --trackers=host --domain=foo --key=’/hello.jpg’ --file=’./hello.jpg’
#将本地的/etc/fstab文件上传到domain2域中。key为/fstab
mogupload --trackers=192.168.253.158:7001 --domain=domain2 --key='/fstab' --file='/etc/fstab'
查看文件信息
格式:mogfileinfo --trackers=host --domain=foo --key=’/hello.jpg’
mogfileinfo --trackers=192.168.253.158:7001 --domain=domain2 --key='/fstab'
这里可以看到一个url我们可以用浏览器访问
可以看到这个就是我们上传的文件,所以MogileFS存储的文件也可以利用http协议
删除文件
格式:mogdelete --trackers=host --domain=foo --key=’/hello.jpg’
mogdelete --trackers=192.168.253.158:7001 --domain=domain2 --key='/fstab'
列出所有文件的key
格式:moglistkeys --trackers=host --domain=foo --key_prefix=‘bar/’
列出指定的fid文件
格式:moglistfids --trackers=host --fromfid=123 --count=5000