L12 MogileFS详细应用配置与说明

MogileFS

概述:

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

MogileFS由3个部分组成:

(1) server:主要包括mogilefsd和mogstored两个应用程序。mogilefsd实现的是tracker,它通过数据库来保存元数据信息,包括站点domain、class、host等;mogstored是存储节点(store node),它其实是个WebDAV服务,默认监听在7500端口,接受客户端的文件存储请求。在MogileFS安装完后,要运行mogadm工具将所有的store node注册到mogilefsd的数据库里,mogilefsd会对这些节点进行管理和监控。

(2) utils(工具集):主要是MogileFS的一些管理工具,例如mogadm等。

(3) 客户端API:MogileFS的客户端API很多,例如Perl、PHP、Java、Python等,用这个模块可以编写客户端程序,实现文件的备份管理功能等。

存储主机(节点)

这个是 MogileFS 存储文件存放在这些机器上,也是 mogstored 节点,也叫 Storage Server,一台存储主要都要启动一个 mogstored 服务.扩容就是增加这些机器.

设备(device)

一个存储节点,以就是上面的主机,可以有多个 device, 就是用来存放文件的目录(例如挂载的目录),每个设备都有一个设备id,需要在 mogstored 的配置文件中的 docroot 配置的项目 指定的目录下面创建相应的设备的目录,目录名为 $docroot/dev$id,设备是不能删除的.只能将其设备的状态的值置为dead,当一个设备 dead 之后,就真的 dead了,里面的数据也无法恢复了,且这个dead了的设备的 id 也不能再用.


简单示例图:

wKiom1Z8nHahStkwAADTGdpD09A896.png

spacer.gifspacer.gifwKioL1Z8nKLDBO_AAARd5XfgE0w284.png

配置示例:

192.168.0.20  trackers mariadb     (node1)

192.168.0.21 192.168.0.22  mogstored 节点  (node2 node3)

spacer.gifwKioL1Z8nSCgEBSPAABmEwLTsgQ623.png

步骤:

一,node1:mogilefsd ,tracker+mysql配置

二,node2,node3:mogstored 节点配置

三,在node1配置mogilefs添加node1,2节点 (添加主机,设备,domain,class)

四,一些事项说明


一,node1:mogilefsd,tracker+mysql配置

1,安装mariadb

2,安装 mogiefsd

需要的软件包:(要安装完成需要epel源)

wKiom1Z8nSPwhPTyAAA10sOZ5oY305.png

spacer.gifepel源

vi /etc/yum.repos.d/epel.repo

[epel]
name=epel
mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-$releasever&arch=$basearch
enabled=1
gpgcheck=0

yum --nogpgcheck localinstall *.rpm 

wKioL1Z8nWnC0x5VAAAqRJMuwng795.png

3,授权远程访问mysql的账户

MariaDB [(none)]> GRANT ALL ON *.* TO 'root'@'192.168.0.%' IDENTIFIED BY 'root' WITH GRANT OPTION;

Query OK, 0 rows affected (0.22 sec)

MariaDB [(none)]> flush privileges;

Query OK, 0 rows affected (0.15 sec)

4,初始化数据库 (建立mogilefs的数据库和用户)

使用mogdbsetup --help查看信息

[root@node1 ~]# mogdbsetup --dbhost=192.168.0.20 --dbrootuser=root --dbrootpass='root' --dbname=mogdb --dbuser=moguser --dbpass=mogpass

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 'mogdb'? [Y/n]: y

Grant all privileges to user 'moguser', connecting from anywhere, to the mogilefs database 'mogdb'? [Y/n]: y

4,配置mogilefsd

[root@node1 mogilefs]# cp mogilefsd.conf{,.bak}
[root@node1 mogilefs]# ls
mogilefsd.conf  mogilefsd.conf.bak  mogstored.conf

[root@node1 mogilefs]# vim mogilefsd.conf

daemonize = 1  #运行为后台守护进程

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

db_dsn = DBI:mysql:mogdb:host=192.168.0.20

db_user = moguser

db_pass = mogpass

listen = 0.0.0.0:7001

conf_port = 7001

query_jobs = 10    #并发响应客户端请求数

delete_jobs = 1 #删除请求的线程数

replicate_jobs = 5 #用于做复制的线程数

reaper_jobs = 1 #

#fsck_jobs = 1          #文件系统检查的进程(一般不必要开)

spacer.gifwKiom1Z8nWrDsBjnAACIvGo3Ppg105.png

二,node2,node3 :mogstored 节点配置

1,安装 mogstored

软件包复制到node2,node3

scp -r /mogilefs node2:/

scp -r /mogilefs node3:/

注意也要有epel源

yum install *.rpm -y

yum install perl-IO-AIO  -y ---在mogstored节点必须安装这个组件

2,配置

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

maxconns = 10000  #最大并发连接数

httplisten = 0.0.0.0:7500        #http监听

mgmtlisten = 0.0.0.0:7501        #tracter来监测mogstored健康状态的

docroot = /var/mogdata        #文件存储的目录

两个节点分别创建文件存储目录(最好使用新分区,这里直接使用系统目录使用)

dev1,dev2 中 dev为固定文件名,1,2区分两个节点的设备名

node2

mkdir /var/mogdata/dev1 -p

node3

mkdir /var/mogdata/dev2 -p

chown mogilefs.mogilefs /var/mogdata/ -R  #一定要修改权限。

启动服务

wKioL1Z8ncyzm2gPAAAp-Zbe-rE654.pngspacer.gif

三,在node1配置mogilefs添加node1,2节点 (添加主机,设备,domain,class)

MogileFS-Utils-2.19-1.el6.noarch.rpm 包有很多工具,使用这些工具配置。

wKioL1Z8ngux_DpOAAA58oQjaFw967.png

spacer.gif

mogadm 工具使用:

mogadm --help

man mogadm

wKiom1Z8nhqgo6JAAABakCSbxwg150.pngspacer.gif

监测自己,tracker是否状态正常。

spacer.gifwKioL1Z8nkSyiWoWAAAhr8hzViw673.png

mogstats 命令连接mysql查看tracker状态

mogstats --help

添加mogstrore节点:

使用添加主机方法:

wKioL1Z8nmCAN3DPAABbATCgrYY727.pngspacer.gif

添加 192.168.0.21 主机,查看信息

[root@node1 mogilefs]# mogadm --trackers=192.168.0.20:7001 host add mg1 --ip=192.168.0.21 --status=alive
[root@node1 mogilefs]# mogadm --trackers=192.168.0.20:7001 host list
mg1 [1]: alive
  IP:       192.168.0.21:7500
添加 192.168.0.22 主机,查看信息
[root@node1 mogilefs]# mogadm --trackers=192.168.0.20:7001 host add mg2 --ip=192.168.0.22 --status=alive
[root@node1 mogilefs]# mogadm --trackers=192.168.0.20:7001 host list
mg1 [1]: alive
  IP:       192.168.0.21:7500

mg2 [2]: alive
  IP:       192.168.0.22:7500

添加设备方法:

spacer.gifwKiom1Z8nl6zYnngAABAc0x-oSU586.png

mogadm --trackers=192.168.0.20:7001 device add mg1 1

mogadm --trackers=192.168.0.20:7001 device add mg2 2

mogadm --trackers=192.168.0.20:7001 device list  #查看

wKioL1Z8noTBKu_5AAAw5YIZLBs636.png

spacer.gif

添加domain

spacer.gifwKiom1Z8noLCHAW-AABE_n-BiKA377.png

添加class

spacer.gifwKioL1Z8nrDAdWW_AACXofEl5rg615.png

使用命令测试:

mogupload上传

mogfetch  下载


[root@node1 mogilefs]# mogupload   #使用方法
Usage: /usr/bin/mogupload --trackers=host --domain=foo --key='/hello.jpg' --file='./hello.jpg'
You have new mail in /var/spool/mail/root
[root@node1 mogilefs]# mogupload --trackers=192.168.0.20:7001 --domain=images --key='/1.jpg' --file=/abc.jpg  #上传本地图片/abc.jpg 访问路径为/1.jpg


[root@node1 mogilefs]# mogfileinfo
Usage: /usr/bin/mogfileinfo --trackers=host --domain=foo --key='/hello.jpg'
[root@node1 mogilefs]# mogfileinfo --trackers=192.168.0.20:7001 --domain=images --key='/1.jpg'
- file: /1.jpg
     class:              default
  devcount:                    2
    domain:               images
       fid:                    2
       key:               /1.jpg
    length:                15299
 - http://192.168.0.21:7500/dev1/0/000/000/0000000002.fid
 - http://192.168.0.22:7500/dev2/0/000/000/0000000002.fid   #保存的两个副本

wKioL1Z8nsqRUVNXAACAr4OOM9o231.png

spacer.gif在node2和node3节点查看mogdata目录:

wKiom1Z8nsSx7tOfAAAiV1yY3hU932.png

spacer.gif

至此,简单配置完成。

四,一些事项说明

客户端访问url和冗余负载均衡

客户端可以直接访问:

spacer.gifwKioL1Z8nurzX-nsAAGmscWhwSs420.png

spacer.gif

Nginx 做为 MogileFS 的前端客户端

wKiom1Z8nvHTDPrKAAB717vX_QI796.png我们使用 Nginx 来获取文件,做前端的查询代理时需要使用到mogilefs的这个模块.可以下载这个模块编译进 Nginx 就行了.直接使用 ./configure �Cadd-module= 这个参数就可以了.
最新的这个模块的下载地址是:https://github.com/vkholodkov/nginx-mogilefs-module
使用这个需要考虑到网站原来的 url 是什么样的.比如:

http://www.a.com/uploads/front_page/A6B00135E24AB17E043B9B5453762438.png
这个 URL 中的 UUID 是 A6B00135E24AB17E043B9B5453762438.png.这时我们使用这个做 key 来存成 MogileFS 中就行.
再结合 rewrite,只要 key 在 url 里有,就能直接代理到后端的 mogilefs.象如下的写法,会直接取 A6B00135E24AB17E043B9B5453762438.png 来做查询用的 key.

location  ~ ([^\/]+)$ {
        mogilefs_tracker 192.168.1.xxx:7001;
        mogilefs_domain img;
        mogilefs_methods GET;
        mogilefs_noverify on;
 
        mogilefs_pass {
                proxy_pass $mogilefs_path;
                proxy_hide_header Content-Type;
                proxy_buffering off;
        }
}

spacer.gif

负载均衡:

wKiom1Z8nzLgPlf3AABun8baF1c126.png

如果使用了多个 tracker 的话,要配置使用多个 tracker 来进行负载均衡和备份.可以直接配置 tracker 为 upstrame:

upstream online_mogilefs {
  server 10.0.0.1:7001;
  server 10.0.0.2:7001;
}
然后后面配置 tracker 的连接时,直接加上就行了

mogilefs_tracker online_mogilefs;
如果你还想配置使用 mogilefs 的 Nginx 上传,使用其中的 put 功能然后就不要安装客户端上传送,就需要打个补丁.
上面的配置其实也是一样,关键对于上传的配置,需要给方法修改为
mogilefs_methods PUT DETEL;

你可能感兴趣的:(mogilefs)