Linux运维学习之分布式存储mogilefs实现
2017-11-28 15:02
369 查看
今天来坐下关于分布式存储应用的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的实现 并不是十分理想,那么我们是否有更好的代替方法呢?
相关文章推荐
- Linux运维学习之keepalived实现高可用集群
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux系统调用的实现机制分析
- Linux学习之"互斥量实现多读单写锁"
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(5)-实现三个任务切换
- linux下用函数和系统调用分别实现计算文件长度(不解) 学习笔记
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】深入剖析Linux内核定时器实现机制
- Linux进程学习(一)之Linux进程的基本知识和实现
- 【Linux学习】配置环境:实现【VirtualBox + ubuntu】+【开启ssh服务】+【putty远程连接到虚拟机】
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(5)-实现三个任务切换
- linux多线程学习(六)——信号量实现同步。
- 老男孩linux运维实战培训网络班学习介绍
- 由su和su -的区别谈学习linux运维方法
- Linux运维学习之磁盘空间满了但是与du-sh的结果不符
- 【嵌入式Linux学习七步曲之第七篇 Linux的高级应用编程】Linux下的线程实现机制分析
- 【Ubuntu+OpenCV】ubuntu/linux环境下,运用opencv实现图像的读入、显示--学习笔记【1】
- 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux系统调用的实现机制分析
- linux多线程学习(六)——信号量实现同步。
- linux0.11学习笔记-技术铺垫-简单AB任务切换程序(1)-实现一个简单的bootloader
- 2.6版本Linux上替换系统调用函数实现隐藏文件学习