分布式文件系统MogileFS的使用

MogileFS简介

MogileFS是一套开源的分布式存储组件,由LiveJournal旗下的Danga Interactive研发,主要应用于存储海量的小文件。

MogileFS有3个组件:

1)Tracker Nodes:是文件系统集群的核心节点,借助数据库节点保存元数据,主要功能包括监控后端Storage节点,及指示Storage节点完成数据的添加、删除、查询,及节点之间数据的复制等,该节点上运行的进程为mogilefsd。往往Tracker节点有多个,以实现负载均衡和高可用;

2)Storage Nodes:实际存储数据的位置,基于WebDAV模式工作,能完成文件创建、删除、重命名等操作,运行的进程为mogstored;

3)database Nodes:帮助Tracker节点存放元数据及全局信息,包括host,domain,class等。数据库建议使用高可用集群,防止单点故障。

实现机制

在该文件系统集群中,每一个数据块都会有多个副本,存放于多个Storage Node上,不同的文件系统副本的数量各不相同(一般建议为3份),在Tracker Node上会分别单独记录每一个数据块的存储位置(位于哪个Storage及路径)。若某个Storage节点不在线了,客户端向Tracker节点请求获取数据时,Tracker节点会返回用于冗余的副本的存储位置给客户端。这样就保证了整个文件系统中数据的高可用性。当有数据存储至某一storage节点后,各storage节点会根据Tracker的指示通过节点间通信将副本发送至其他节点上。若某一storage下线了,该节点上的副本会由其他节点重新提供,保证副本的个数不少于指定的值。

MogileFS结构图

工作原理:客户端需要存取数据时,首先与Tracker进行交互,Tracker通过查询数据库来获取客户端存取数据时所需要访问的元数据,然后返回给客户端,客户端利用Tracker返回的结果,与Storage Nodes节点进行交互完成数据存取(一次有可能联系一个也可能联系多个)。

部署MogileFS

部署Tracker Nodes

1)安装程序包

使用cpan在线安装,首先安装必要的perl库。

[[email protected] ~]# cpan Sys::Syscall
[[email protected] ~]# cpan IO::WrapTie 
[[email protected] ~]# cpan Danga::Socket
[[email protected] ~]# cpan IO::AIO
[[email protected] ~]# cpan MogileFS::Client
[[email protected] ~]# cpan Net::Netmask
[[email protected] ~]# cpan Perlbal

安装MogileFS Server:

[[email protected] ~]# cpan MogileFS::Server

或者下载源码包编译安装:

[[email protected] ~]# wget http://mirrors.ustc.edu.cn/CPAN/authors/id/D/DO/DORMANDO/MogileFS-Server-2.72.tar.gz
[[email protected] ~]# tar xf MogileFS-Server-2.72.tar.gz 
[[email protected] ~]# cd MogileFS-Server-2.72
[[email protected] MogileFS-Server-2.72]# perl Makefile.PL 
[[email protected] MogileFS-Server-2.72]# make && make install

2)完成配置

创建配置文件目录并添加配置文件:

[[email protected] ~]# mkdir /etc/mogilefs
[[email protected] ~]# vim /etc/mogilefs/mogilefsd.conf 
daemonize = 1
pidfile = /var/run/mogilefsd/mogilefsd.pid
db_dsn = DBI:mysql:mogilefs:host=192.168.1.134;port=3306;mysql_connect_timeout=5   #连接数据库的信息
db_user = mogilefs          #数据库上的用户名
db_pass = mogilefs          #用户名对应的密码
listen = 0.0.0.0:7001       #监听的地址和端口
conf_port = 7001 
query_jobs = 10             #用于查询的进程数
delete_jobs = 1             #用于删除操作的进程数
replicate_jobs = 5          #用于复制的进程数
reaper_jobs = 1             #用于回收资源的进程数

在数据库节点上创建数据库,并授权用户:

MariaDB [(none)]> create database mogilefs;
Query OK, 1 row affected (0.04 sec)
 
MariaDB [(none)]> grant all on mogilefs.* to ‘mogilefs‘@‘192.168.%.%‘ identified by ‘mogilefs‘;
Query OK, 0 rows affected (0.00 sec)
 
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

初始化数据库:

[[email protected] ~]# mogdbsetup --dbhost=192.168.1.134 --dbname=mogilefs --dbuser=mogilefs --dbpass=mogilefs --dbrootpass=mogilefs

若出现如下错误,是没有安装perl连接mysql的驱动引起的,安装perl-DBD-MySQL即可。

Failed to load MogileFS::Store::MySQL: Can‘t locate DBD/mysql.pm in @INC (@INC contains: lib /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /usr/local/share/perl5/MogileFS/Store/MySQL.pm line 5.........
........
###########################################
[[email protected] ~]# yum install perl-DBD-MySQL

3)启动服务

mogilefsd不能以root身份运行,必须用其他用户运行,为此添加mogilefs用户,然后启动服务:

[[email protected] ~]# useradd -r mogilefs
[[email protected] ~]# su - mogilefs -c "mogilefsd -c /etc/mogilefs/mogilefsd.conf --daemon"

更好的方式是添加服务脚本,然后通过脚本启动服务。

这里有一项需要注意,Sys::Syscall的0.25版本存在bug,在文件系统运行过程中,向文件系统上添加数据,其不会按照默认策略保留2个副本,默认策略如下:

上传的文件信息:

可以看到,数据仅有一份,保存在192.168.1.127节点上。Sys::Syscall的0.25版本为最新版本,使用cpan默认安装的就是这个版本,降级到0.23版本即可,或者直接下载安装0.23版本。

wget http://mirrors.ustc.edu.cn/CPAN/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz
###############################
perl Makefile.PL 
make && make install

部署Storage Nodes

1)安装程序包(与上述一致)

[[email protected] ~]# cpan Sys::Syscall
[[email protected] ~]# cpan IO::WrapTie 
[[email protected] ~]# cpan Danga::Socket
[[email protected] ~]# cpan IO::AIO
[[email protected] ~]# cpan MogileFS::Client
[[email protected] ~]# cpan Net::Netmask
[[email protected] ~]# cpan Perlbal
[[email protected] ~]# cpan MogileFS::Server


2)完成配置

创建目录并添加配置文件:

[[email protected] ~]# mkdir /etc/mogilefs
[[email protected] ~]# vim /etc/mogilefs/mogstored.conf 
maxconns = 10000              #最大并发连接数
httplisten = 0.0.0.0:7500     #http监听的地址
mgmtlisten = 0.0.0.0:7501     #管理接口监听地址
docroot = /mogdata/data       #用于存储的目录

添加,挂载分区,根据/etc/mogilefs/mogstored.conf中的docroot配置信息添加目录,并修改属主属组:

[[email protected] ~]# fdisk /dev/sdb
[[email protected] ~]# mkfs -t ext4 -b 4096 /dev/sdb1
[[email protected] ~]# mkdir -pv /mogdata/data
mkdir: created directory `/mogdata‘
mkdir: created directory `/mogdata/data‘
[[email protected] ~]# mount /dev/sdb1 /mogdata/data/
[[email protected] ~]# chown -R mogilefs.mogilefs /mogdata/

3)启动服务

添加用户,启动服务(同上述一样,最好使用脚本):

[[email protected] ~]# useradd -r mogilefs
[[email protected] ~]# su - mogilefs -c "mogstored -c /etc/mogilefs/mogstored.conf --daemon"

安装MogileFS-Utils管理MogileFS

在控制节点上安装MogileFS-Utils,可用于添加host,device,domain,class等管理操作。

[[email protected] ~]# cpan MogileFS::Utils

或者

[[email protected] ~]# wget http://mirrors.ustc.edu.cn/CPAN/authors/id/D/DO/DORMANDO/MogileFS-Utils-2.29.tar.gz
[[email protected] ~]# tar xf MogileFS-Utils-2.29.tar.gz
[[email protected] ~]# cd MogileFS-Utils-2.29
[[email protected] MogileFS-Utils-2.29]# perl Makefile.PL 
[[email protected] MogileFS-Utils-2.29]# make && make install

建议直接使用cpan安装,可自动安装依赖的包。

基于nginx访问MogileFS

Storge Node支持将上面存储的数据以http模式的接口输出,客户端跟Storge Node进行交互的时,通常需要基于MogileFS提供的API编程之后,通过程序和storge通信。nginx上的nginx_mogilefs模块就是这样的一个程序,用nginx作为MogileFS的反向代理,用户只要把需要访问的资源以url的形式向nginx请求,既能够得到需要的资源。

nginx_mogilefs工作原理:mogielfs为nginx的第三方模块,该模块能够自动工作在nginx上,解码用户请求的url,把url中的一部分作为domain,一部分作为key发送给Tracker,Tracker将检索到的fid返回给mogielfs模块,mogielfs利用这个fid与Storge Nod交互取得数据,并将取得的数据返回给客户端。nginx也能够接受用户的上传文件请求,把对应的url解析成domain和key,并且将文件根据Tracker的指示存储在某个store节点上。

nginx_mogilefs_module模块的下载地址:http://www.grid.net.ru/nginx/mogilefs.en.html


实验拓扑图

配置多个Tracker,利用nginx实现负载均衡,建议在实际环境中将数据库节点配置成高可用集群,这里为了方便仅配置一个节点。

配置过程

1)首先在4个节点上按照上述方式部署Tracker和Storage,并将Tracker连接上数据库

两个Tracker连接同一个数据库。

2)配置MogileFS环境

向Tracker添加各设备:

[[email protected] ~]# mogadm --trackers=192.168.1.126:7001 host add node1 --ip=192.168.1.106 --status=alive
[[email protected] ~]# mogadm --trackers=192.168.1.126:7001 host add node2 --ip=192.168.1.126 --status=alive
[[email protected] ~]# mogadm --trackers=192.168.1.106:7001 host add node3 --ip=192.168.1.127 --status=alive
[[email protected] ~]# mogadm --trackers=192.168.1.106:7001 host add node4 --ip=192.168.1.131 --status=alive
[[email protected] ~]# mogadm --trackers=192.168.1.106:7001 host list        #查看添加的主机

添加设备(需要在配置文件中docroot参数指定的目录下创建对应的目录,例如添加的设备号为1,则添加的目录名的dev1):

[[email protected] ~]# mogadm --trackers=192.168.1.106:7001 device add node1 1 --status=alive
[[email protected] ~]# mogadm --trackers=192.168.1.106:7001 device add node2 2 --status=alive
[[email protected] ~]# mogadm --trackers=192.168.1.106:7001 device add node3 3 --status=alive
[[email protected] ~]# mogadm --trackers=192.168.1.106:7001 device add node4 4 --status=alive

在各个Storage Node上创建对应的目录:

Storage Node1上
[[email protected] ~]# mkdir /mogdata/data/dev1/
[[email protected] ~]# chown -R mogilefs.mogilefs /mogdata/
##################
Storage Node2上
[[email protected] ~]# mkdir /mogdata/data/dev2/
[[email protected] ~]# chown -R mogilefs.mogilefs /mogdata/
.........
.........

检查状态:mogadm --trackers=192.168.1.106:7001,192.168.1.126:7001 check

添加名称空间:

[[email protected] ~]# mogadm --trackers=192.168.1.106:7001 domain add file

添加class:

[[email protected] ~]# mogadm --trackers=192.168.1.106:7001 class add file bigimg

3)安装配置nginx

[[email protected] ~]# tar xf nginx-1.8.0.tar.gz 
[[email protected] ~]# tar xf nginx_mogilefs_module-1.0.4.tar.gz      #使用1.0.4版本
[[email protected] ~]# yum install pcre-devel
[[email protected] ~]# cd nginx-1.8.0
[[email protected] ~]#  ./configure    --prefix=/usr/local/nginx    --conf-path=/etc/nginx/nginx.conf    --error-log-path=/var/log/nginx/error.log    --http-log-path=/var/log/nginx/access.log    --pid-path=/var/run/nginx/nginx.pid     --lock-path=/var/lock/nginx.lock    --user=nginx    --group=nginx    --with-http_ssl_module    --with-http_flv_module    --with-http_stub_status_module    --with-http_gzip_static_module    --http-client-body-temp-path=/usr/local/nginx/client/    --http-proxy-temp-path=/usr/local/nginx/proxy/    --http-fastcgi-temp-path=/usr/local/nginx/fcgi/    --http-uwsgi-temp-path=/usr/local/nginx/uwsgi    --http-scgi-temp-path=/usr/local/nginx/scgi    --with-pcre    --with-debug    --add-module=/root/nginx_mogilefs_module-1.0.4 \      #添加第三方模块
###############################
[[email protected] nginx-1.8.0]# make && make install
[[email protected] nginx-1.8.0]# useradd -r nginx

添加服务脚本:

.................
[[email protected]w ~]# chmod +x /etc/init.d/nginx 
[[email protected] ~]# chkconfig --add nginx

配置nginx.conf,Tracker无需去维持用户会话,前端的nginx在负载均衡时简单的做加权轮询即可:

[[email protected] nginx]# vim nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    upstream trackers {
        server 192.168.1.106:7001 weight=1;      #指定两个Tracker
        server 192.168.1.126:7001 weight=1;
        }
    server {
        listen       80;
        server_name  localhost;

        location /file {
            mogilefs_tracker trackers;
            mogilefs_domain file;                #指定domain
            mogilefs_pass {
                proxy_pass $mogilefs_path;
                proxy_hide_header Content-Type;
                proxy_buffering off;
            }
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
      }
}

配置完成后启动服务。

[[email protected] ~]# service nginx start
#########################
[[email protected] ~]# ansible tracker -m service -a ‘name=mogilefsd state=started enabled=yes‘
[[email protected] ~]# ansible storage -m service -a ‘name=mogstored state=started enabled=yes‘

进行测试

上传一张图片:

[[email protected] ~]# mogupload --trackers=192.168.1.106:7001 --domain=file --class=bigimg --key=‘hello.jpg‘ --file=‘/root/Public/24_P.jpg‘

访问资源:

停止192.168.1.106上的mogilefsd和mogstored服务:

[[email protected] ~]# service mogilefsd stop
Stopping mogilefsd                                         [  OK  ]
[[email protected] ~]# service mogstored stop
Stopping mogstored                                         [  OK  ]

资源能够继续访问,测试完成.................^_^

时间: 2024-10-25 14:42:48

分布式文件系统MogileFS的使用的相关文章

深入浅出分布式文件系统MogileFS集群

    一,简介    MogileFS是一款开源的分布式文件存储系统,由LiveJournal旗下的Danga Interactive公司开发.Danga团队开发了包括 Memcached.MogileFS.Perlbal 等多个知名的开源项目.目前MogileFS的日益成熟使用此解决方法的公司越来越多,例如日本的又拍.digg.中国的豆瓣.1号店.大众点评.搜狗和安居客等,分别为所在的组织或公司管理着海量的图片.和传统网络存储不一样的是分布式文件系统是将数据分散存储至多台服务器上,而网络文件

分布式文件系统MogileFS

MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包括 Memcached.MogileFS.Perlbal 等不错的开源项目:(注:Perlbal 是一个强大的 Perl 写的反向代理服务器).目前国内使用 MogileFS 的有图片托管网站 yupoo 等. MogileFS 特性 1. 应用层 – 不需要特殊的核心组件 2. 无单点失败 - MogileFS分布式文件存

分布式文件系统 ~MogileFS~

  一.分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连,也就是集群文件系统,可以支持大数量的节点以及PB级的数量存储.相对地,在一个分享的磁盘文件系统中,所有节点对数据存储区块都有相同的访问权,在这样的系统中,访问权限就必须由客户端程序来控制.分布式文件系统可能包含的功能有:透通的数据复制与容错.也就是说,即使系统中有一小部份的节点脱机,整体来说系统仍然可以持续运作而不会有数据

分布式文件系统mogilefs的简单应用

简介 MogileFS是一个开源的分布式文件存储系统,由LiveJournal旗下的DangaInteractive公司开发.Danga团队开发了包括Memcached.MogileFS.Perlbal等多个知名的开源项目. 特性 1.应用层:用户空间文件系统,无须特殊的核心组件 2.无单点:(tracker, mogstore, database(MySQL)) 3.自动文件复制:复制的最小单位不是文件,而class: 4.传输中立,无特殊协议:可以通过NFS或HTTP进行通信: 5.简单的命

分布式文件系统 Mogilefs 安装步骤

我这里的环境都是 RHEL 5 的环境. MySQL 数据库 和 tracker 都放到一台服务器上, 为 192.168.2.85 storage server两台, 分别为 192.168.2.98          192.168.2.222 第一:    安装 Mysql 数据库 Mysql的安装请大家直接下载 rpm 安装包最方便, 下载源码安装也很简单.我这里是使用 rpm 包安装. 安装完毕后使用命令   service  mysql  start  启动 启动后使用mysql的客

分布式文件系统之MogileFS的使用

一.mogilefs简介 MogileFS 是一个开源的分布式文件系统,用于组建分布式文件集群,由 LiveJournal 旗下 Danga Interactive 公司开发,Danga 团队开发了包括 Memcached.MogileFS.Perlbal 等不错的开源项目:(注:Perlbal 是一个强大的 Perl 写的反向代理服务器). MogileFS由3个部分组成: 第1个部分: 是server端,包括mogilefsd和mogstored两个程序.前者即是mogilefsd的trac

分布式文件系统之——mogilefs

本节我们将来认识下分布式文件系统,不过我主要讲的是关于其中的一个比较流行的mogilefs进行介绍,好了其他的不多说了,下面我们就开始吧. 什么是分布式文件系统? 什么是分布式文件系统(Distributed File System)?顾名思义,就是分布式+文件系统.它包含了2方面,从文件系统的客户端的角度来看,他就是一个标准的文件系统,提供了API,由此可以进行文件的创建.删除.读写等操作:从内部来看的话,分布式文件系统则与普通的文件系统不同,它不在是本地的磁盘中,它的内容和目录都不是存储在本

CentOS 6.5 分布式文件系统之MogileFS工作原理及实现过程

   MogileFS是一套高效的文件自动备份组件,由Six Apart开发,广泛应用在包括LiveJournal等web2.0站点上.MogileFS由3个部分组成:    第1个部分:是server端,包括mogilefsd和mogstored两个程序.前者即是mogilefsd的tracker,它将一些全局信息保存在数据库里,例如站点domain,class,host等.后者即是存储节点(store node),它其实是个HTTP Daemon,默认侦听在7500端口,接受客户端的文件备份

MogileFS的分布式文件系统的实现

MogileFS:是一套分布式文件存储的解决方案,它不需要特殊的核心组件.无单点失败.自动的文件复制.比RAID好多了.传输中立,无特殊协议(客户端可以通过NFS或HTTP来和MogileFS通信).简单的命名空间.不用共享任何东西.不需要RAID.不会碰到文件系统本身的不可知情况 等等优点. server端由mogilefsd和mogstored两个程序组成,mogilefsd既tracker,用来存数全局元数据放在数据库中,mogstored既存储节点. 实验目的: 实现mogilefs分布