码迷,mamicode.com
首页 > 其他好文 > 详细

mogilefs实现分布式存储

时间:2017-12-10 18:57:31      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:mogilefs

mogilefs是一个开源的分布式文件存储系统。

mogilefs的工作原理:每次文件的上传和读取,都经过前端trackerserver服务器,trackerserver服务器收到客户端的请求,查询数据库,返回一个上传或者是读取可用的后端storageserver的地址,然后由客户端直接操作后端storageserver服务器,下载操作返回就是成功或者失败的果,read操作就是返回对应的查询数据。

它支持多节点冗余。

可实现自动的文件复制。

使用名称空间,每个文件通过key来确定

工作于应用层,没有特殊的组件要求。

不共享任何数据,mogilefs不需要依靠昂贵的SAN来共享磁盘,每个机器只用维护好自己的磁盘。

mogilefs主要有三部分构成:tracker节点,database节点,storage节点。

tracker节点:这个是mogilefs的核心部分,它是一个调度器。借助数据库保存各节点文件的元数据信息,保存每个域中所有键的存储位置分布,方便检索定位数据位置的同时监控各节点,告诉客户端存储区位置并指挥storage节点复制数据副本。除此之外,它还负责数据的删除,复制,监控,查询等,可以作为负载均衡。

mysql节点:用来存放mogilefs的元数据,是trackers来操作和管理它,可以用mogdbsetup程序来初始化数据库。

storage节点:这个是mogilefs存储文件存放在这些机器上,每一台存储都要启动一个mogstored服务,扩容就是增加这些机器。

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

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等。

分别在tracker节点和storage节点上安装以上软件包,为了节省资源,我的tracker节点和mysql

数据库放在一台机器上。

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
启动多少个用于回收资源的线程

mogilefs服务初始化

授权给用户,使授权的用户可以登录到数据库
MariaDB?[(none)]>?grant?all?privileges?on?mogilefs.*?to?‘mogile‘@‘127.0.0.1‘?identified?by?‘123456‘with?grant?option;
Query?OK,?0?rows?affected?(0.08?sec)
刷新授权表
MariaDB?[(none)]>?flush??privileges;
Query?OK,?0?rows?affected?(0.00?sec)
使用mogdbsetup命令安装mogilefs数据库
[root@centos7?~]#?mogdbsetup??--dbpass=123456

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

Grant?all?privileges?to?user?‘mogile‘,?connecting?from?anywhere,?to?the?mogilefs?database?‘mogilefs‘??[Y/n]:?y
验证初始化数据库的结果
[root@centos7?~]#?mysql?-umogile?-p123456
Welcome?to?the?MariaDB?monitor.??Commands?end?with?;?or?\g.
Your?MariaDB?connection?id?is?9
Server?version:?5.5.52-MariaDB?MariaDB?Server

Copyright?(c)?2000,?2016,?Oracle,?MariaDB?Corporation?Ab?and?others.

Type?‘help;‘?or?‘\h‘?for?help.?Type?‘\c‘?to?clear?the?current?input?statement.

MariaDB?[(none)]>?show?databases;
+--------------------+
|?Database???????????|
+--------------------+
|?information_schema?|
|?mogilefs???????????|
|?test???????????????|
+--------------------+
3?rows?in?set?(0.00?sec)

MariaDB?[(none)]>?use?mogilefs;
Reading?table?information?for?completion?of?table?and?column?names
You?can?turn?off?this?feature?to?get?a?quicker?startup?with?-A

Database?changed
MariaDB?[mogilefs]>?show?tables;
+----------------------+
|?Tables_in_mogilefs???|
+----------------------+
|?checksum?????????????|
|?class????????????????|
|?device???????????????|
|?domain???????????????|
|?file?????????????????|
|?file_on??????????????|
|?file_on_corrupt??????|
|?file_to_delete???????|
|?file_to_delete2??????|
|?file_to_delete_later?|
|?file_to_queue????????|
|?file_to_replicate????|
|?fsck_log?????????????|
|?host?????????????????|
|?server_settings??????|
|?tempfile?????????????|
|?unreachable_fids?????|
|?zzz??????????????????|
+----------------------+
18?rows?in?set?(0.00?sec)


配置tracker文件

修改以下四项即可,其他的根据具体的工作环境而定

db_dsn=DBI:mysql:mogilefs:host=127.0.0.1
db_user=mogile
db_pass=123456
listen=172.17.252.15:7001


安装好tracker后会在/var/run/生成该目录,改变目录的属主和属组

[root@centos7?~]#?chown?-R?mogilefs.mogilefs??/var/run/mogilefsd


启动mogilefsd服务

[root@centos7?~]#?cd?/etc/mogilefs/
[root@centos7?mogilefs]#?/etc/init.d/mogilefsd??start
Starting?mogilefsd?(via?systemctl):????????????????????????[??OK??]
[root@centos7?mogilefs]#?ss?-ntl|grep?7001
LISTEN?????0??????128????172.17.252.15:7001?????????????????????*:*


配置storage节点的文件

maxconns?=?10000(存储系统最大连接数)
httplisten?=?0.0.0.0:7500(可通过http访问服务端口)
mgmtlisten?=?0.0.0.0:7501(mogilefs的管理端口)
docroot?=?/data/mogdata(数据存储的实际位置,建议使用的是一个单独挂载使用的磁盘)
~


因为进程都是以mogilefs的身份运行的,所以我们要把文件存储的路径的属主和属组改为mogilefs

root@centos7?data]#?ll
total?0
drwxr-xr-x.?3?mogilefs?mogilefs?18?Nov?28?21:24?mogdata
[root@centos7?mogilefs]#?/etc/init.d/mogstored??start
Starting?mogstored?(via?systemctl):????????????????????????[??OK??]
[root@centos7?mogilefs]#?ss?-ntl|grep?75*
LISTEN?????0??????128??????????*:7500?????????????????????*:*??????????????????
LISTEN?????0??????128??????????*:7501?????????????????????*:*

现在加入"存储节点"到trackers中,相当于为每个主机加入mogilefs的存储系统

[root@centos7?mogilefs]#?mogadm?--tracker=172.17.252.15:7001?host?add?node1?--ip=172.17.252.16?--port=7500?--status=alive
[root@centos7?mogilefs]#?mogadm?--tracker=172.17.252.15:7001?host?add?node2?--ip=172.17.252.17?--port=7500?--status=alive
查看已经添加的主机
[root@centos7?mogilefs]#?mogadm?--tracker=172.17.252.15:7001?check
Checking?trackers...
??172.17.252.15:7001?...?OK

Checking?hosts...
??[?1]?node1?...?REQUEST?FAILURE?FETCHING:?http://172.17.252.16:7500/
??[?2]?node2?...?REQUEST?FAILURE?FETCHING:?http://172.17.252.17:7500/
No?devices?found?on?tracker(s).

[root@centos7?mogilefs]#?mogadm?--tracker=172.17.252.15:7001?check
Checking?trackers...
??172.17.252.15:7001?...?OK

Checking?hosts...
??[?1]?node1?...?OK(节点已经检测成功)
??[?2]?node2?...?OK

Checking?devices...(devices设备尚未加入)
??host?device?????????size(G)????used(G)????free(G)???use%???ob?state???I/O%
??----?------------?----------?----------?----------?------?----------?-----
??----?------------?----------?----------?----------?------
?????????????total:?????0.000??????0.000??????0.000???0.00%

mogilefs中的存储设备管理

建目录使用dev+ID这种格式,注意所有系统中的ID不能重复,也必须和配置文件中的路径一样

分别在两个storage节点的主机上建目录dev1 和dev2

mkdir?-p?/data/mogdata/dev1
mkdir?-p?/data/mogdata/dev2

给设备加入存储的节点当中,相当于为每个设备加入mogilefs的存储系统

[root@centos7?mogilefs]#?mogadm?--tracker=172.17.252.15:7001??device?add?node1??1
[root@centos7?mogilefs]#?mogadm?--tracker=172.17.252.15:7001??device?add?node2??2
[root@centos7?mogilefs]#?mogadm?--tracker=172.17.252.15:7001?check
Checking?trackers...
??172.17.252.15:7001?...?OK

Checking?hosts...
??[?1]?node1?...?OK
??[?2]?node2?...?OK

Checking?devices...(已经成功加入设备)
??host?device?????????size(G)????used(G)????free(G)???use%???ob?state???I/O%
??----?------------?----------?----------?----------?------?----------?-----
??[?1]?dev1????????????97.609??????6.321?????91.287???6.48%??writeable???0.0
??[?2]?dev2????????????97.609??????6.429?????91.179???6.59%??writeable???0.0
??----?------------?----------?----------?----------?------
?????????????total:???195.217?????12.750????182.467???6.53%

也可以使用另一种方式查看device
[root@centos7?mogilefs]#?mogadm?--tracker=172.17.252.15:7001?device?list
node1?[1]:?alive
????????????????????used(G)????free(G)???total(G)??weight(%)
???dev1:???alive??????6.321?????91.287?????97.608????????100

node2?[2]:?alive
????????????????????used(G)????free(G)???total(G)??weight(%)
???dev2:???alive??????6.429?????91.180?????97.608????????100


添加域:域用来存储不同应用类型数据的容器

创建图片存放的域
[root@centos7?~]#?mogadm?--tracker=172.17.252.15:7001?domain?add?imgs
创建html等文件存放的域
[root@centos7?~]#?mogadm?--tracker=172.17.252.15:7001?domain?add?files
root@centos7?~]#?mogadm?--tracker=172.17.252.15:7001?domain?list
?domain???????????????class????????????????mindevcount???replpolicy???hashtype
--------------------?--------------------?-------------?------------?-------
?files????????????????default???????????????????2????????MultipleHosts()?NONE??
?imgs?????????????????default???????????????????2????????MultipleHosts()?NONE


添加类:

[root@centos7?~]#?mogadm?--tracker=172.17.252.15:7001?class?add?imgs?img1?--mindevcount=3
[root@centos7?~]#?mogadm?--tracker=172.17.252.15:7001?class?add?imgs?img2?--mindevcount=3
[root@centos7?~]#?mogadm?--tracker=172.17.252.15:7001?class?add?files?file1?--mindevcount=4
[root@centos7?~]#?mogadm?--tracker=172.17.252.15:7001?class?add?files?file2?--mindevcount=4
[root@centos7?~]#?mogadm?--tracker=172.17.252.15:7001?class?list
domain???????????????class????????????????mindevcount???replpolicy???hashtype
--------------------?--------------------?-------------?------------?-------
?files????????????????default???????????????????2????????MultipleHosts()?NONE???
?files????????????????file1?????????????????????4????????MultipleHosts()?NONE???
?files????????????????file2?????????????????????4????????MultipleHosts()?NONE??
?imgs?????????????????default???????????????????2????????MultipleHosts()?NONE???
?imgs?????????????????img1??????????????????????3????????MultipleHosts()?NONE???
?imgs?????????????????img2??????????????????????3????????MultipleHosts()?NONE

上传文件

root@centos7?~]#?mogupload?--domain=imgs?--key=jpg1?--file=timg.jpg
--key指定上传后的键
--file指定要上传的文件

查询文件

[root@centos7?~]#?mogfileinfo?--domain=imgs?--key=jpg1
-?file:?jpg1
?????class:??????????????defa
??devcount:????????????????????2
????domain:?????????????????imgs
???????fid:???????????????????12
???????key:?????????????????jpg1
????length:????????????????60918
?-?http://172.17.252.17:7500/dev2/0/000/000/0000000012.fid
?-?http://172.17.252.16:7500/dev1/0/000/000/0000000012.fid

通过它给出的路径,我们进行访问

技术分享图片

删除指定的文件

[root@centos7?~]#?mogdelete?--domain=imgs?--key=jpg1
再次查看
[root@centos7?~]#?mogfileinfo?--domain=imgs?--key=jpg1
Error?fetching?file?info:?unknown_key?unknown_key?at?/usr/bin/mogfileinfo?line?60,?<Sock_172.17.252.15:7001>?line?1.

列出所有文件的key

[root@centos7?~]#?moglistkeys?--domain=imgs

暂时停止服务器

如果需要维护一个服务器,比如更新内存,升级操作之类的需要关机的操作,可以在操作之前将主机设置为"down".

?[root@centos7?~]?mogadm?host?mark??node1??down
?恢复
??[root@centos7?~]?mogadm?host?mark??node1??alive

mogilefs有一个小bug,就是默认的情况下它是不会复制的,为了实现自动复制,我们需要安装Syscall模块、

可以到http://search.cpan.org/网站下载如下包,并在tarcker节点和storage节点进行编译

技术分享图片

?



mogilefs实现分布式存储

标签:mogilefs

原文地址:http://blog.51cto.com/13017865/2049160

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!