今天来坐下关于分布式存储应用的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的实现 并非十分理想,那么咱们是否有更好的代替方法呢?