设为首页 收藏本站
查看: 1087|回复: 0

[经验分享] 基于MogileFS的分布式存储系统

[复制链接]

尚未签到

发表于 2019-2-1 07:34:14 | 显示全部楼层 |阅读模式
  今天我们来认识一个新的存储系统——MogileFS(分布式文件存储系统)。

(一)MogileFS是什么
  MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发。Danga团队开发了包括 Memcached、MogileFS、Perlbal 等多个知名的开源项目。目前使用MogileFS 的公司非常多,如日本排名先前的几个互联公司及国内的yupoo(又拍)、digg、豆瓣、1号店、大众点评、搜狗和安居客等,分别为所在的组织或公司管理着海量的图片,以大众点评为例,用户全部图片均有mogileFS存储,数据量已经达到500TB级别以上。

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

(三)MogileFS的架构
  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、Database(MySQL):用来存放 MogileFS 的元数据 (命名空间, 和文件在哪里),是Trackers 来操作和管理它,可以用mogdbsetup程序来初始化数据库,因为数据库保存了MogileFS的所有元数据,建议做成HA架构;
  3、Storage Nodes:这个是 MogileFS 存储文件存放在这些机器上,也是 mogstored 节点,也叫 Storage Server,一台存储主要都要启动一个 mogstored 服务.扩容就是增加这些机器,实际文件存放的地方。

(四)MogileFS的工作机制

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


(五) 具体的安装和实现
  通常情况下有两种安装方式:yum安装和源码安装,这里我们就以yum安装为例。
1、首先要安装下列相关包

yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO  -y
yum install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker -y
本地安装的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 #客户端
ogileFS-Server-mogstored-2.46-2.el6.noarch.rpm #Storage存储节点
MogileFS-Utils-2.19-1.el6.noarch.rpm #主要是MogileFS的一些管理工具,例如 mogadm等。
  2、 在tracker上进行以下配置
  1.安装完mogilefs相关包后,安装mariadb数据库,然后对用户进行授权:

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'mogile' @'172.17.%.%' IDENTIFIED BY 'mogile' WITH GRANT OPTION;
  2.设定数据库(MogileFS 中文件管理,我们可以简单的使用 mog 开头的系列 Linux 命令, 来进行管理, 当然也可以用 Client 的 API 来管理. 新的 MogileFS 的工具, 拆分成多个了. 下面这些命令, 都需要在 /etc/mogilefs/mogilefs.conf 中指定 trackers , 不然就需要在下面的命令都加上 –trackers 来指定.)

mogdbsetup --help
mogdbsetup --dbhost=127.0.0.1 --dbpass=mogile 用户名默认为:mogile
  3.修该tracker的主配置文件

db_dsn = DBI:mysql:mogilefs:host=127.0.0.1
db_user = mogile
db_pass = mogile
listen = 172.17.253.210:7001
  4.用自带脚本启动该服务,可以看到7001端口已经打开

/etc/init.d/mogilefsd start
  5.登录MySQL,查看mogilefs库是否生成

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mogilefs           |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> use mogilefs;
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     |
+----------------------+
17 rows in set (0.00 sec)
  3、配置storage文件
  1.修改storage配置文件(由于两个storage节点配置一样,这里就以storage1节点为例。storage1:172.17.254.222,storage2:172.17.254.224)

vim /etc/mogilefs/mogstored.conf
maxconns = 10000
httplisten = 0.0.0.0:7500
mgmtlisten = 0.0.0.0:7501
docroot = /data/mogstorage
  2.MogileFS 中的存储设备管理
  建一个目录并修改目录权限 ( 并且需要 mount 一个硬盘给这个目录 ) 给这个"设备" 使用, 我们这的例子是使用 dev1在主机中建一个目录,建目录使用 dev + ID 这种格式,记的所有系统中 ID 不能重复.也必 须和配置文件中的路径一样. 如下:  mkdir -p /data/mogstorage/dev1 一定要注意, 给相对应用的块设备 mount 到这个点, 软链也行. 不然写文件都会写到系统硬上, 其它的硬盘都是空的

mkdir -p /data/mogstorage/dev1
chown mogilefs.mogilefs /data/mogstorage/ -R
  3.启动服务,可以看到7500端口已打开

/etc/init.d/mogstored start
  4、在tracker节点上进行mogilefs存储主机的管理:
   1.现在加入“存储节点”到 trackers 中.告诉注册自己到 trackers.相当于为每个主机 加入 MogileFS 的存储系统

mogadm host add node1 --ip=172.17.254.222 --port=7500 --status=alive #添加主机,将主机信息注册到数据库中
mogadm host list #检查这个主机是否加入到 MogileFS 的系统中
[root@localhost mysql]#mogadm host list
node1 [1]: alive
IP:       172.17.254.222:7500
node2 [2]: alive
IP:       172.17.254.224:7500
mogadm host modify node1 --ip=123.xxx.xxx.70 --status=alive #可以修改主机IP
  2.给"设备"加入”存储的节点“当中,相当于为每个设备加入 MogileFS 的存储系统

mogadm device add node1 1
mogadm device add node2 2
mogadm device list
[root@localhost mysql]#mogadm device list
node1 [1]: alive
used(G)    free(G)   total(G)  weight(%)
dev1:   alive      3.780     46.195     49.976        100
node2 [2]: alive
used(G)    free(G)   total(G)  weight(%)
dev2:   alive      3.410     46.565     49.976        100
  标记失效的设备,当硬盘坏了,设备有问题时,这时会自动在一个域内复制到最小设置的保存份数. 恢复上面一样再一次 add 设备就好了 mogadm device mark  node_name ID dead
  3.当上面的准备好了,MogileFS 是运行中时,接下来我们要建一个我们自己的'名字空间'和加入文 件到存储当中. 我们使用 mogadm 的工具来能创建一个"域"和"类".也可以使用这个来增加文件到"类"中.

建"域"
mogadm domain add imgs
检查"域",显示存在的域
mogadm domain list
在"域"中建"类",并加入最小保存份数
mogadm class add imgs class1 --mindevcount=3
[root@localhost mysql]#mogadm domain list
domain               class                mindevcount   replpolicy   hashtype
-------------------- -------------------- ------------- ------------ -------
imgs                 class1                    3        MultipleHosts() NONE   
imgs                 default                   2        MultipleHosts() NONE   
  4.上传文件进行测试

mogupload --domain=imgs --key=test1 --file=test1.png
mogupload --domain=imgs --key=test2 --file=test2.jpg
[root@localhost mysql]#mogfileinfo --domain=imgs --key=test1#查询文件
- file: test1
class:              default
devcount:                    2
domain:                 imgs
fid:                   11
key:                test1
length:                72825
- http://172.17.254.224:7500/dev2/0/000/000/0000000011.fid
- http://172.17.254.222:7500/dev1/0/000/000/0000000011.fid
[root@localhost mysql]#mogfileinfo --domain=imgs --key=test2
- file: test2
class:              default
devcount:                    2
domain:                 imgs
fid:                   10
key:                test2
length:                87170
- http://172.17.254.222:7500/dev1/0/000/000/0000000010.fid
- http://172.17.254.224:7500/dev2/0/000/000/0000000010.fid
  在两个存储节点可以看到文件已经都存在了:

  这里有一个bug,如果不解决这个bug会导致这两个存储节点的数据不同步,来看一下bug存在的情况下:

  这个0的目录下只在storage1节点存在,而另一边没有,然而这个问题就是由于我们安装的这个Sys-Syscall的版本存在的问题,由于我们目前的版本是0.25的版本,所以这里我们就需要降级,降到0.23的版本,这里我们就需要去Sys-Syscal官网下载0.23的版本,然后编译安装。之后就看到了两边文件同步的状况。

tar xf Sys-Syscall-0.23.tar.gz
cd Sys-Syscall-0.23/
perl Makefile.PL
make
mkae install
  5、在网页上访问任意路径,可以看到能正常访问我们上传的图片。





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-670210-1-1.html 上篇帖子: 分布式存储之MogileFS 下篇帖子: 分布式存储MogileFS介绍,Tengine反代MogileFS负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表