Linux运维学习之分布式存储mogilefs实现

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