分布式文件系统之MogileFS


本节我们将来认识下分布式文件系统,不过我主要讲的是关于其中的一个比较流行的mogilefs进行介绍,好了其他的不多说了,下面我们就开始吧。

什么是分布式文件系统?

什么是分布式文件系统(Distributed File System)?顾名思义,就是分布式+文件系统。它包含了2方面,从文件系统的客户端的角度来看,他就是一个标准的文件系统,提供了API,由此可以进行文件的创建、删除、读写等操作;从内部来看的话,分布式文件系统则与普通的文件系统不同,它不在是本地的磁盘中,它的内容和目录都不是存储在本地磁盘中,而是通过网络传输到远程主机上,并且同一个文件存储在不只一台远程主机中,而是在一簇主机中进行分布式存储,协同提供服务。

MogileFS 设置 Memcached

在 MogileFS 中使用 Nginx

在开源分布式文件系统MogileFS 中使用 Nginx

自定义Nagios监控MogileFS存储节点脚本

 常见的分布式文件系统

      GFS :Google File System

      HDFS:适合存储大文件;

      TFS:在名称节点上将元数据存储于关系型数据中,文件数量不再受限于名称节点的内存空间;可以存储海量小文件;

      Lustre: 企业级应用,重量级;

      GlusterFS: 适用于存储少量大文件 ,流媒体,云

      MooseFS: 通用简便,适用于存储小文件,大文件也不错

      Mogilefs: 使用Perl语言,FastDFS

      FastDFS:在内存中存储

      Ceph:内核级别,支持PB级别存储

 

 

MogileFS

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

 

MogileFS的特性:

  1、 应用层: 用户空间文件系统,无须特殊的核心组件

  2、无单点:(tracker, mogstore, database(MySQL))

  3、自动文件复制:复制的最小单位不是文件,而class;

  4、传输中立,无特殊协议:可以通过NFS或HTTP进行通信;

  5、比RAID好多了

  6、简单的命名空间: 每个文件对应一个key:用于domain定义名称空间

  7、不共享任何数据:

MogileFS组件:

 

Tracker nodes: MogileFS的核心,是一个调度器;服务进程为mogilefsd; 职责:删除、复制、监控、查询等;

storge nodes:mogstored进程: 数据存储的位置,通常是一个HTTP(WebDAV)服务器,用来数据的创建、删除、获取;

Database nodes(MySQL):用于为tracker存储元数据信息,mogileFS

 

实验:构建基于Nginx+mogilefs的分布式文件系统

实验拓扑图:

image

总的实验步骤如下:由于有些步骤连在一起做,所以做的时候可能并不是完全按照以下步骤进行:

安装tracker:

  1、安装相关的包:

  MogileFS-Server-2.46-2.el6.noarch.rpm

  MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm

  perl-Net-Netmask-1.9015-8.el6.noarch.rpm

  MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm

  perl-Perlbal-1.78-1.el6.noarch.rpm

  2、授权数据库用户,并初始mysql数据库

  # mogdbsetup

  3、修改配置文件

  db_dsn = DBI:mysql:DBNAME:host=HOSTNAME

  4、启动mogilefsd进程

安装mogstord:

  1、安装相关的包

  MogileFS-Server-2.46-2.el6.noarch.rpm

  MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm

  perl-Net-Netmask-1.9015-8.el6.noarch.rpm

  MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm

  perl-Perlbal-1.78-1.el6.noarch.rpm

  perl-IO-AIO

  2、准备存储设备

  挂载至某路径下,确认此路径下存在文件devN

  此路径的属主和属组为mogilefs.mogilefs

  3、修改配置文件/etc/mogilefs/mogstored.conf

  docRoot=

  前面的挂载路径;

 配置mogielfs:

  1、向tracker添加各mogstored主机

  mogadm --trackers=TRACKER_NODE host add

  2、向tracker添加各设备

  mogadm --trackers=TRACKER_NODE device add

  3、为tracker定义名称空间domain

  mogadm --trackers=TRACKER_NODE domain add

  4、为domain添加一个或多个class

  mogadm --trackers=TRACKER_NODE class add

    可同时副本的最少个数;

 

好了下面就开始安装了。

2个storage节点都装上以下几个包

[root@localhost mogilefs]# ls    
MogileFS-Server-2.46-2.el6.noarch.rpm            MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm  perl-MogileFS-Client-1.14-1.el6.noarch.rpm  perl-Perlbal-1.78-1.el6.noarch.rpm    
MogileFS-Server-mogilefsd-2.46-2.el6.noarch.rpm  MogileFS-Utils-2.19-1.el6.noarch.rpm            perl-Net-Netmask-1.9015-8.el6.noarch.rpm    
[root@localhost mogilefs]# yum install -y * perl-IO-AIO

各自创建存储目录(2个节点分别为dev{1,2})

第一个节点:

[root@www mog]# mkdir -pv /mogdata/data/dev1    
mkdir: created directory `/mogdata'    
mkdir: created directory `/mogdata/data'    
mkdir: created directory `/mogdata/data/dev1'

第二个节点:

[root@localhost mog]# mkdir -pv /mogdata/data/dev2    
mkdir: created directory `/mogdata'    
mkdir: created directory `/mogdata/data'    
mkdir: created directory `/mogdata/data/dev2'

修改文件夹权限

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

数据库授权

mysql节点安装并启动mysqld

[root@localhost mog]# yum install mysql mysql-server

[root@localhost mog]# service mysqld start

Please report any problems with the /usr/bin/mysqlbug script!

                                                          [  OK  ]    
Starting mysqld:                                          [  OK  ]

 

进入mysql进行授权

mysql> grant all on mogilefs.* to 'moguser'@'172.16.%.%' identified by 'mogpass';    
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;    
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on *.* to 'root'@'172.16.%.%' identified by 'mageedu';    
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;    
Query OK, 0 rows affected (0.00 sec)

 

OK,下面到storage端进行数据库初始化

image

初始化完成可以在数据库中查看

image

 

 

修改配置文件

注意2个节点中都要修改

[root@www mog]# vim /etc/mogilefs/mogilefsd.conf

image

然后就可以启动服务了

[root@www mog]# service mogilefsd start    
Starting mogilefsd                                        [  OK  ]

查看端口是否开启

image

 

下面修改mogstored的配置文件并启动服务(2个节点都要改)

[root@localhost mog]# vim /etc/mogilefs/mogstored.conf

image

[root@www ~]# service mogstored start    
Starting mogstored                                        [  OK  ]

查看端口是否启动

image

 

添加节点

[root@www ~]# mogadm --trackers=172.16.6.20:7001 host add 172.16.6.20 --ip=172.16.6.20 --status=alive    
[root@www ~]# mogadm --trackers=172.16.6.20:7001 host add 172.16.6.30 --ip=172.16.6.30 --status=alive

查看是否添加成功

image 

image

 

添加设备

 

[root@www ~]# mogadm --trackers=172.16.6.20:7001,172.16.6.30:7001 device add 172.16.6.20 1    
[root@www ~]# mogadm --trackers=172.16.6.20:7001,172.16.6.30:7001 device add 172.16.6.30 2

查看是否添加成功

image

发现刚刚的文件目录的权限没给。注:修改权限的步骤我没写在这里,我放到了上面的修改权限

修改之后就OK :

image

 

创建domain:实现名称空间

[root@www ~]# mogadm --trackers=172.16.6.20:7001,172.16.6.30:7001 domain add files

[root@www ~]# mogadm --trackers=172.16.6.20:7001,172.16.6.30:7001 domain add images

 

查看生成的domain

image

创建class:复制文件的最小单位

image

解释下这里的几个参数意思:

mindevcount:最小复制文件的份数

replpolicy :复制份数

hashtype:采用的hash的类型

更多详情见请继续阅读下一页的精彩内容:

  • 1
  • 2
  • 下一页

相关内容