MogileFS:是一个开源的分布式存储,适用于存储海量的小文件。由LiveJournal旗下的Danga Interactive。这个公司还有memcache , MogileFS, Perlbal(http代理)等产品。其特点如下:

        1,工用于应用层(用户空间):无须特殊的核心组件,因为基于http或都nfs,一般客户端都支持。

        2,无单点故障所在,假设MySQL已经高可用并且tracker为多个节点。因为MySQL是否高可用,取决于MySQL。

        3,自动文件复制,用户在上传一份数据都,tracker会根据设定好的策略自动复制一份或多份其它节点。假如其中一个节点故障,tracker会自动把数据复制一份,做到数据一直有冗余。如果使用中增加一个节点,需要手动做策略把那些节点的数据与新加入的节点做平均。

        4,比“RAID”好多了,因为其实现了主机间的冗余。官方就这么解释的!

        5,传输中立,无特殊协议。传输中用的是http协议或nfs协议。

        6,命名空间比较简单。使用域(domain)来表示名称空间的。每个文件对应于一个KEY,文件存储的机制是一个值。是以 key-value 对儿在任的。KEY是一个全局名称空间,可以使用domain模拟实现目录级别,也可以把所有文件放在一个平面。

        7,不依赖于任何共享存储设备。使用系统上的一般存储就可以。

 

MogileFS的组件:

跟踪节点,Tracker : Mogilefsd进程,主控制进程,。其实现的功能包括:文件的复制,文件的删除,查询文件是否存储,监控一个文件存储的位置是否正常等等。这个进程工作于元数据节点。

存储节点(storage nodes),由mogstored进程监听于套接字上。文件实际存储的位置。其实质上是一个http服务器。基于WebDAV模式工作。能够实现创建,删除,重命名等操作。其实现方式是把一个大容量的磁盘挂载上,然后上传下载数据。

MySQL节点:用于为tracker存储元数据信息:为mogilefs的名称空间及文件名。

MogileFS自带了很多管理文件的工具。



安装配置过程。

安装完成后,需要在mysql为mogliefs授权一个用户,让其对mogilefs库有全部权限。此数据库主要用来存储node数据。如果tracker与mysql在一台服务器上,需要对本机的主机名进行授权。

MariaDB [mogilefs]> grant all on *.* to 'root'@'172.16.2.%' identified by 'mogpass';

MariaDB [mogilefs]> grant all on *.* to 'mogilefs'@'172.16.2.%' identified by 'mogpass';

MariaDB [mogilefs]> grant all on *.* to 'root'@'firewall' identified by 'mogpass';

MariaDB [mogilefs]> grant all on *.* to 'root'@'172.16.2.%' identified by 'mogpass';

MariaDB [mogilefs]> flush privileges;

注:如果tracker与mysql在一个节点上,需要为本机的主机名授权,因为mysql在验证时会验证主机名。

msql授权完成后,在tracker上初始化数据库

# mogdbsetup --dbhost=172.16.2.13 --dbport=3306 --dbname=mogilefs --dbrootuser=root --dbrootpass=mogpass --dbuser=moguser --dbpass=mogpass

修改配置文件 ,大概如下:

# grep '^[^#]' /etc/mogilefs/mogilefsd.conf

daemonize = 1                                     #是否运行为守护进程,1表示为真

pidfile = /var/run/mogilefsd/mogilefsd.pid

db_dsn = DBI:mysql:mogilefs:host=172.16.2.13        #指定连接数据库,mogilefs为数据库名。

db_user = moguser                                    连接mysql时使用的用户

db_pass = mogpass                                    连接mysql时使用的密码

listen = 172.16.2.16:7001                            tracker端监听的ip和tcp端口,默认就是7001

conf_port = 7001

query_jobs = 10                最多的查询线程数

delete_jobs = 1                 用于删除文件的线程数最多有几个。1 比较妥当

    replicate_jobs = 5           

    reaper_jobs = 1

    min_free_space = 200      最小的利于空间,以m为单位

# service mogilefsd start

# chkconfig mogilefsd on      确保tracker的服务能开机自动启动

# ss -tnl   查看是否有7001端口处于监听

mogilefd配置端口处理监听后,到mogstor上安装配置。第个存储节点都需要执行下面的操作

# yum -y install  perl-Net-Netmask-1.9015-8.el6.noarch.rpm perl-Net-Netmask-1.9015-8.el6.noarch.rpm  MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm MogileFS-Utils-2.19-1.el6.noarch.rpm   perl-MogileFS-Client-1.14-1.el6.noarch.rpm

# yum -y install perl-IO-AIO    这个模块必须要安装。

把准备用于存储的磁盘格式化挂载,把用户和组都设置为mogilefs。然后修改配置文件/etc/mogilefs/mogstored.conf

maxconns = 10000                  最大并发连接数

httplisten = 172.16.2.100:7500        监听地址

mgmtlisten = 172.16.2.100:7501     管理地址

docroot = /mogiled/data                文件存储的位置,生产环境中应当为挂载的整个磁盘。

# mkdir -pv  /mogiled/data  && chwon -R  mogilefs.mogilefs /mogiled/data

# service mogstored star  如果启动不了,可能是mogilefs用户没有创建。添加用户就可以了。

# chkconfig mogstroed on        让存储服务开机自动启动。

# ss -tnl     查看配置文件中定义的端口是否启动。

数据存储端配置好后到tracker 上把存储端加入到本分布式系统中。有多少个就加多少个。输入mogadm 就会显示这命令的使用方法。这个命令可以

# mogadm --trackers=172.16.2.16:7001 host add s2 --ip=172.16.2.100 --status=alive

# mogadm --trackers=172.16.2.16:7001 host list

clipboard

添加好节点后为各个节点添加设备

# mogadm --trackers=172.16.2.16:7001 device add s3 dev3

# mogadm --trackers=172.16.2.16:7001 device list             如果像下面显示,没有显示容量等信息,说明mogstored端存储目录下没有与设备ID同名的目录,且这个目录的属主和属组应当为mogliefs

Mogilefs配置以及nginx代理mogilefs_第1张图片

# mogadm --trackers=172.16.2.16:7001 device summary  查看各个设备的摘要信息。

clipboard[2]

        注:如果显示不出设备的摘要信息,需要在各个存储节点下 docroot = /mogiled/data 所指定的路径下创建一个名字与设备名同名的目录,并且属主和属组是 mogilefs。

# mogadm --trackers=172.16.2.16:7001 device list

Mogilefs配置以及nginx代理mogilefs_第2张图片

添加domain   domain是用来创建名称空间的,每个文件都需要用key来标记,每个文件在名称必须惟一。

# mogadm --trackers=172.16.2.16:7001 domain add "p_w_picpaths"

# mogadm --trackers=172.16.2.16:7001 domain list

Mogilefs配置以及nginx代理mogilefs_第3张图片

class 是mogilefs中最小的复制单位。创建class如果有需要可以指定复本存储几份。

上传文件测试,在任意一台节点上执行都可以。

# mogupload --trackers=172.16.2.16:7001 --domain=/p_w_picpaths/ --key='/p_w_picpaths/bg.png' --file='/usr/share/backgrounds/default.png'

# mogfileinfo --trackers=172.16.2.16:7001 --domain=/p_w_picpaths/ --key='/p_w_picpaths/bg.png'

Mogilefs配置以及nginx代理mogilefs_第4张图片

复制红框里的任意一条到浏览器中访问,可以访问到此文件了。

Mogilefs配置以及nginx代理mogilefs_第5张图片

由于存储节点的mogiled使用的是 WebDAV机制,它允许使用http的 put , delete方法管理文件。这里全用curl模仿一下。

其它的命令

mogfetch 下载文件

mogupload  上传文件

mogrename 生命名

moglistkey 例出所有的key

        # moglistkeys --trackers=172.16.2.16:7001 --domain=test

# moglistkeys --trackers=172.16.2.16:7001 --domain=test  --key_prefix='/p_w_picpaths' 查看以p_w_picpaths开头的。

# mogstats --db_dsn="DBI:mysql:mogilefs:host=172.16.2.13" --db_user="moguser" --db_pass="mogpass" --verbose    查看数据库中主机信息,domain,class,文件个数等。


让nginx代理mogilefs

编译安装

# yum -y groupinstall "Development tools" "Server Platform Development"

# yum -y install gcc

# yum -y install pcre-devel

# yum -y install bzip2-devel

# wget http://www.grid.net.ru/nginx/download/nginx_mogilefs_module-1.0.4.tar.gz

# wget http://nginx.org/download/nginx-1.7.3.tar.gz

# tar -xvf nginx_mogilefs_module-1.0.4.tar.gz

# tar -xvf nginx-1.7.3.tar.gz

# cd nginx-1.7.3

# ./configure --prefix=/usr/local/ --sbin-path=/usr/sbin/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/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=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fcgi --http-uwsgi-temp-path=/var/tmp/nginx/uwscgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre --with-debug --add-module=../nginx_mogilefs_module-1.0.4

 

--add-module=../nginx_mogilefs_module-1.0.4 用来添加模块的选项

注:用nginx_mogilefs_module-1.0.4版本,1.0.2有问题。

# make && make install

# useradd -r nginx

# vim /etc/init.d/nginx  提供一个服务管理脚本

        官方提供的适用于red hat 系统的脚本:http://wiki.nginx.org/RedHatNginxInitScript

# chmod +x /etc/init.d/nginx

# service nginx start

# vim nginx.conf 

        官方 配置说明 http://www.grid.net.ru/nginx/mogilefs.en.html

        本次实验的配置

----------------------------------------------------------------------------------------

worker_processes 1;

events {

    worker_connections 1024;

}

http {

    include mime.types;

    default_type application/octet-stream;

    sendfile on;

    keepalive_timeout 65;

        upstream trackers {                定义后端的服务器组

                server 172.16.2.10:7001;

                server 172.16.2.14:7001;

                server 172.16.2.16:7001;

        }

    server {

        listen 80;

        server_name localhost;

        client_max_body_size 500m;      允许客户端上传文件最大为500M

        location / {

            root html;

            index index.html index.htm;

        }

        location /file {                                        定义一个URL,对此URL使用mogilefs模块

                mogilefs_tracker trackers;            调用后端服务器

                mogilefs_domain file;                   

                mogilefs_methods  GET DELETE;        允许使用的方法,由于这个版本的nginx不支持上传,所以没写put

                mogilefs_pass {

                        proxy_pass $mogilefs_path;

                        proxy_hide_header Content-Type;

                        proxy_buffering off;

                }

        }

        location /p_w_picpaths {

                mogilefs_tracker trackers;

                mogilefs_domain p_w_picpaths;

                mogilefs_methods GET DELETE;

                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;

        }

    }

-------------------------------------------------------------------------

测试阶段

上传一个文件

# mogupload --trackers=172.16.2.10:7001 --domain=p_w_picpaths --key='/test.jpg' --file='/usr/share/backgrounds/centos_1920x1200_logoonly.jpg'   

在浏览器中使用http://172.16.2.18/p_w_picpaths/test.jpg访问。

Mogilefs配置以及nginx代理mogilefs_第6张图片

使用crul模拟测试删除文件。

# curl -X DELETE http://172.16.2.18/p_w_picpaths/test.jpg

Mogilefs配置以及nginx代理mogilefs_第7张图片