今天来坐下关于分布式存储应用的mogilefs的实现。
首先我们先准备四台机器,其中两台配置数据的主从复制,每台都配置tracker,三台配置store。
ip1:172.17.254.111   mysql-master+tracker
ip2:172.17.254.112   mysql-slave+tracker+store
ip3:172.17.254.113   tracker+store
ip4:172.17.245.114   tracker+store
然后我们在上面进行配置,在所有的机器上进行安装mogilefs的相关包。
yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO -y
#安装相关的perl的包,mogilefs是由perl编写的
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 #客户端
MogileFS-Server-mogstored-2.46-2.el6.noarch.rpm #Storage存储节点
MogileFS-Utils-2.19-1.el6.noarch.rpm #主要是MogileFS的一些管理工具,例如mogadm。
 #本地安装rpm包,可以在https://pkgs.org/download/mogilefs 下载
主程序:/usr/bin/mogilefsd
命令行管理工具程序:/usr/bin/mogadm
主配置文件(Tracker):/etc/mogilefs/mogilefsd.conf
主配置文件(Storage Nodes):/etc/mogilefs/mogstored.conf
然后在 所有哦的机器上上进行配置/etc/mogilefs/mogilefsd.conf
db_dsn = DBI:mysql:mogilefs:host=172.17.254.111   #配置数据库的所在ip
db_user = mogile  
db_pass = mogile  
#配置数据库连接相关信息
listen = 127.0.0.1:7001
然后我们再去配置除了ip1之外的其他三台的mogstored.conf,大部分都不用改动,只需改动此项:
docroot = /data/mogilefs/      #此目录为我们存储数据的实际位置,最好是单块硬盘
之后,我们对数据库所在的机器(ip1)进行服务初始化
首先对数据库进行授权:
grant all on mogilefs.* to 'mogile'@'172.17.254.111' identified by 'mogile';    
#此处账户密码,应与上面配置文件相同
然后设置数据库:
mogdbsetup --dbhost=127.0.0.1 --dbpass=mogpass
#可以进入数据库查看,表库都已经自动设置完成
/etc/init.d/mogilefsd start 
启动失败,我们可以通过/var/log/messages看到这样的报错:
couldn't create pidfile '/var/run/mogilefsd/mogilefsd.pid': Permission denied
然后我们更改此目录所属人、所属组(ip2,3,4都需要更改此项,不然tracker启动不起来)
chown -R mogilefs.mogilefs /var/run/mogilefsd,再次启动成功运行!
我们的调度器做好了,各个storage node也配置好了(只改了一个docroot),然后就是把彼此链接:
mogadm host add node1 --ip=172.17.254.112 --port=7500 --status=alive
#把ip2添加到存储节点中,以此类推
mogadm host add node2 --ip=172.17.254.113 --port=7500 --status=alive
mogadm host add node3 --ip=172.17.254.114 --port=7500 --status=alive
然后可以通过mogadm host list查看,出来下面三项成功。
node1 [1]: alive
	IP:       172.17.254.112:7500
node2 [2]: alive
	IP:       172.17.254.113:7500
node3 [3]: alive
	IP:       172.17.254.114:7500
存储节点建立了,我们通过mogadm check查看一直都显示Checking devices..,很明显我们要添加devices了,那么怎么
添加呢?上面的docroot已经指明路径,所以我们新建一个目录把硬盘挂载上就ok了,建目录使用 dev + ID 这种格式,记的所
有系统中 ID 不能重复.也必须和配置文件中的路径一样.
如下:ip2:mkdir -p /data/mogdata/dev1
然后我们还在ip1上执行添加硬盘命令:
mogadm device add node1 1
mogadm device add node2 2
mogadm device add node3 3
使用mogadm device list命令可以查看每块硬盘的状态、大小。
当上面的准备好了,MogileFS 是运行中时,接下来我们要建一个我们自己的'名字空间'和加入文件到存储当中;我们使用 
mogadm 的工具来能创建一个"域"和"类".也可以使用这个来增加文件到"类"中。
mogadm domain add test(随便取的域名)
mogadm class add test testclass --mindevcount=3
# --mindevcount=3 指明该class可以有三份副本,也就是备份到三台机器上
我们可以使用上传来测试一下是否可以实现该功能:
mogupload --domain=test --key=test1 --file=1.jpg
mogfileinfo --domain=test --key=test1
然后发现有问题devcount:1 只有一份副本,这是因为该版本的mogilefs有BUG,我们通过官方文档发现需要降级来配置使用
yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-Hi-
Res
#安装perl编译安装环境
wget http://www.cpan.org/authors/id/B/BR/BRADFITZ/Sys-Syscall-0.23.tar.gz 
tar -xvf Sys-Syscall-0.23.tar.gz
cd Sys-Syscall-0.23
perl Makefile.PL
make && make install 
/etc/init.d/mogilefsd  restart #重启服务
我们再次使用上传命令:mogupload --domain=test --key=test2 --file=1.jpg
发现还是不行,最多只能备份两份,找了半天才发现需要制定class,具体如下:
mogupload --domain=test --class=testclass --key=test3 --file=1.jpg
不加入class走了默认的class,参数为2,不得不说mogilefs的语法说明真的有点坑人。
好了,今天的分享就到此结束,分布式的存储在实际中应用很广泛,但是mogilefs的实现
并不是十分理想,那么我们是否有更好的代替方法呢?