MogileFS的实现

准备三个主机:
centos7.1:tracker节点、database节点、storage节点:192.168.213.251
centos7.2、centos7.3:storage节点:192.168.213.251/252/253
注意关掉防火墙,iptables -F
1》在三个节点安装如下软件包
yum install perl-Net-Netmask perl-IO-String perl-Sys-Syslog perl-IO-AIO #先用yum安装安装环境需要的包
ls #将如下安装包下载到本地,再用yum本地安装如下包
MogileFS-Server-2.46-2.el7.centos.noarch.rpm #核心服务
MogileFS-Server-mogilefsd-2.46-2.el7.centos.noarch.rpm #tracker节点
MogileFS-Server-mogstored-2.46-2.el7.centos.noarch.rpm #storage节点
MogileFS-Utils-2.19-1.el7.centos.noarch.rpm #mogilefs的一些管理工具,如mogadm
perl-Danga-Socket-1.61-1.el6.rf.noarch.rpm #依赖包
perl-MogileFS-Client-1.14-1.el7.centos.noarch.rpm
perl-Perlbal-1.78-1.el6.noarch.rpm
[root@node1 app]#yum localinstall ./* -y #在三个节点上都要安装
2》在centos7.1上操作
yum install mariadb-server
systemctl start mariadb
ss -nlt
mogdbsetup --help #初始化数据库的命令
mogdbsetup --dbuser=mogile --dbpass=123 #进行初始化数据库,会创建了一个mogilefs的数据库,同时里面有很多表,授权了一个mogile用户在任何主机都可以连接到此数据库
vim /etc/mogilefs/mogilefsd.conf #修改tracker的配置文件
db_dsn = DBI:mysql:mogilefs:host=127.0.0.1 #指明数据库的主机
db_user = mogile #授权的用户
db_pass = 123 #授权的密码
listen = 0.0.0.0:7001
systemctl start mogilefsd #启动tracker服务
ss -nltu #发现监听在tcp/7001端口
3》在三个节点上对storage节点进行配置
vim /etc/mogilefs/mogstored.conf #配置storage节点
maxconns = 10000 #最大并发连接
httplisten = 0.0.0.0:7500 #监听的端口
mgmtlisten = 0.0.0.0:7501 #管理命令监听的端口
docroot = /app/mogdata/ #指明数据存放的目录,一般这个目录要使用单独的磁盘进行挂载,本实验就使用目录代替了,没有单独挂载磁盘
mkdir /app/mogdata
chown mogilefs:mogilefs /app/mogdata -R
systemctl start mogstored #启动storage服务
ss -nlt #发现监听的是7500端口
4》在centos7.1上的操作
添加主机到trackers中,这样storage节点才能被tracker节点所管理,并将主机信息注册到数据库中
mogadm check #查看状态
mogadm host add centos7.1 --ip=192.168.213.251 --port=7500 --status=alive #添加storage节点的主机到tracker中
mogadm host add centos7.2 --ip=192.168.213.252 --port=7500 --status=alive
mogadm host add centos7.3 --ip=192.168.213.253 --port=7500 --status=alive
mogadm check #此时再查看发现三个节点都被添加进来了
mogadm host list #可以查看添加的主机
5》在三个节点上的设置
mkdir /app/mogdata/dev1 #在三个主机上创建三个目录dev1、dev2、dev3做为存储设备,1、2、3为设备的ID号,必须唯一
chown -R mogilefs:mogilefs /app/mogdata/dev1/ #修改权限,注意三个节点都要操作
6》在centos7.1节点的操作,添加存储设备到集群中
mogadm device add centos7.1 1
mogadm device add centos7.2 2
mogadm device add centos7.3 3
mogadm device list
centos7.1 [1]: alive
used(G) free(G) total(G) weight(%)
dev1: alive 0.032 39.011 39.043 100 centos7.2 [2]: alive
used(G) free(G) total(G) weight(%)
dev2: alive 0.031 39.012 39.043 100 centos7.3 [3]: alive
used(G) free(G) total(G) weight(%)
dev3: alive 0.031 39.012 39.043 100 mogadm check
Checking trackers...
127.0.0.1:7001 ... OK Checking hosts...
[ 1] centos7.1 ... OK
[ 2] centos7.2 ... OK
[ 3] centos7.3 ... OK Checking devices...
host device size(G) used(G) free(G) use% ob state I/O%
---- ------------ ---------- ---------- ---------- ------ ---------- -----
[ 1] dev1 39.043 0.032 39.011 0.08% writeable 0.0
[ 2] dev2 39.043 0.032 39.011 0.08% writeable 0.0
[ 3] dev3 39.043 0.032 39.011 0.08% writeable 0.0
---- ------------ ---------- ---------- ---------- ------
total: 117.130 0.097 117.034 0.08%
cd dev1/ ;ls #发现目录中已经有东西了
test-write usage
cd test-write/ ;ls #此目录是tracker节点测试storage节点是否是好的,会定期往目录里面写一些东西来判断个节点是不是可用的
test-write-21 test-write-35 test-write-44 test-write-49 test-write-55 test-write-7 test-write-8 test-write-87 test-write-93
test-write-23 test-write-40 test-write-47 test-write-53 test-write-64 test-write-76 test-write-84 test-write-9
mogadm device mark centos1 1 readonly #可将某个设备标记为只读状态,共有这几种状态(alive,dead,down,drain,readonly)
7 》添加创建域和类在centos7.1上的操作
mogadm domain add m25 #添加一个域m25
mogadm domain list #我们发现只要创建一个域,就会生成一个默认的class,并且副本数量为2个
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
m25 default 2 MultipleHosts() NONE
mogadm class --help
mogadm class add m25 img --mindevcount=3 #在m25域中添加一个类为在img,并指定最小的副本数量为3个
mogadm class add m25 doc --mindevcount=2
mogadm domain list #可以发现已经创建两个类了,现在就可以向这两个类中上传数据了
domain class mindevcount replpolicy hashtype
-------------------- -------------------- ------------- ------------ -------
m25 default 2 MultipleHosts() NONE
m25 doc 2 MultipleHosts() NONE
m25 img 3 MultipleHosts() NONE
8》上传数据(centos7上需要先解决bug问题)
在centos7.1上
mogupload --help #上传
cd /app
find /usr/share/ -iname *.jpg -exec cp {} ./ \; #拷贝一些图片文件到当前目录
mogupload --tracker=172.18.21.107:7001 --domain=m25 --class=img --key=night --file=night.jpg #注意这里要指定tracker,不然传不上去,要设置一个key,根据这个key才能进行查找
md5sum night.jpg
a1cb1ab93a2d2b81e7943fbc0283f83f night.jpg 在centos7.2上
cd /app/data/dev2/
tree 0/ #在节点2上查看,发现已经存到设备目录下,注意格式是这种格式的
0/
└── 000
└── 000
└── 0000000002.fid
md5sum 0/000/000/0000000002.fid #哈希运算的结果是一样的,说明是同一个文件
a1cb1ab93a2d2b81e7943fbc0283f83f 0/000/000/0000000002.fid
9》查询
在trackers上
mogfileinfo --trackers=192.168.213.251:7001 --domain=m25 --key=night #在一个域内key必须是唯一的
- file: night
class: img
devcount: 1
domain: m25
fid: 2
key: night
length: 569714 - http://192.168.213.252:7500/dev2/0/000/000/0000000002.fid
- http://192.168.213.253:7500/dev3/0/000/000/0000000002.fid
- http://192.168.213.251:7500/dev1/0/000/000/0000000002.fid
#告诉我们如何可以查到这个数据可以输入这个网址下载下来就可以看到刚才上传的图片了
moglistkeys -tracker=192.168.213.251:7001 --domain=m25 #查看这个域内的所有key
night
可以创建一个配置文件指明trackers是谁就不用每次输入命令的时候指定了
vim /etc/mogilefs/mogilefs.conf
trackers=172.18.21.107:7001
moglistkeys --domain=m25
night
mogdelete --domain=m25 --key=night #删除指定的文件
mogupload --domain=M25 --class=img --key=fish --file=/app/fish.jpg
mogfileinfo --domain=M25 --key=fish
- file: fish
class: img
devcount: 3
domain: M25
fid: 7
key: fish
length: 3225
- http://192.168.213.253:7500/dev3/0/000/000/0000000007.fid
- http://192.168.213.252:7500/dev2/0/000/000/0000000007.fid
- http://192.168.213.251:7500/dev1/0/000/000/0000000007.fid 数据库中查询
MariaDB [mogilefs]> select * from file; #进入数据库中也可以查看一些信息
+-----+------+-------+--------+---------+----------+
| fid | dmid | dkey | length | classid | devcount |
+-----+------+-------+--------+---------+----------+
| 3 | 1 | puppy | 3461 | 1 | 1 |
| 4 | 1 | sky | 2964 | 2 | 1 |
+-----+------+-------+--------+---------+----------+
MariaDB [mogilefs]> select * from domain;
+------+-----------+
| dmid | namespace |
+------+-----------+
| 1 | m25 |
+------+-----------+
MariaDB [mogilefs]> select * from class;
+------+---------+-----------+-------------+----------+------------+
| dmid | classid | classname | mindevcount | hashtype | replpolicy |
+------+---------+-----------+-------------+----------+------------+
| 1 | 1 | img | 3 | NULL | NULL |
| 1 | 2 | doc | 2 | NULL | NULL |
+------+---------+-----------+-------------+----------+------------+
关闭主机
mogadm host mark centos7.1 down #也可以将主机设置为down状态
mogadm host list
centos7.1 [1]: down
IP: 192.168.213.251:7500 centos7.2 [2]: alive
IP: 192.168.213.252:7500 centos7.3 [3]: alive
IP: 192.168.213.253:7500
mogadm host mark centos7.1 alive

解决MogileFS的bug问题

cd data/dev1/ ;ls #发现其他节点上并没有我们上传的数据目录
test-write usage
ls #只有上传东西的节点上才有
0 test-write usage 注意:
说明MogileFS在centos7上有个致命的bug,就是没有复制副本到其他的节点上
解决方法如下:
yum -y install make gcc unzip perl-DBD-MySQL perl perl-CPAN perl-YAML perl-Time-HiRes #先安装perl环境,三个storage主机都要安装
wget http://pkgs.fedoraproject.org/repo/pkgs/perl-Sys-Syscall/Sys-Syscall-0.23.tar.gz/be6dc2d791684a6f8abb3dd39ff2d1de/Sys-Syscall-0.23.tar.gz #下载软件包到本地,也可以在google上搜索Syscall-0.23.tar.gz
在三个节点上都要安装此源码包
在三个节点上进行编译安装Sys-Syscall
tar -xf Sys-Syscall-0.23.tar.gz
cd Sys-Syscall-0.23/
perl Makefile.PL
Checking if your kit is complete...
Looks good
Warning: prerequisite Test::More 0 not found.
Writing Makefile for Sys::Syscall
make && make instal
在centos7.1节点上重启下面的三个服务
systemctl restart mogilefsd
systemctl restart mogstored
systemctl restart mariadb
在centos7.2和centos7.3节点上重启mogstored服务,这里需要注意,编译安装完Sys-Syscall后一定要重启三个节点的所有服务,不然不会生效
systemctl restart mogstored
在centos7.1上
#mogupload --tracker=192.168.213.251:7001 --domain=m25 --class=img --key=morning --file=/app/morning.jpg #再上传一个文件
tree 0
0
└── 000
└── 000
├── 0000000002.fid
└── 0000000004.fid 2 directories, 2 files
在centos7.2和centos7.3上
tree 0
0
└── 000
└── 000
├── 0000000002.fid
└── 0000000004.fid 2 directories, 2 files
发现在三个节点上结果相同文件

MogileFS的实现和bug解决的更多相关文章

  1. 百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法

    百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法 金刚 前端 ueditor 初始化 因项目中使用了百度编辑器——ueditor.整体来说性能还不错. 发现问题 我在做一个编辑页面 ...

  2. paip.c3p0 nullpointexcept 配置文件根路径读取bug 解决

    paip.c3p0 nullpointexcept 配置文件根路径读取bug 解决 windows ok linux犯错误... 查看loging, 初始化的时候儿jdbcurl,user,pwd都是 ...

  3. Android较低版本(<5.2) 页面默认Select选择框效果的BUG解决

    Bug描述: 使用低版本安卓(<5.2),在微信上打开网页,点击下拉框,会出现如下图所示的用来展示select选项的弹出框: 在选项较少的时候,可以向下滑动,将选项滑到底部 滑动前: 滑动后: ...

  4. dede留言板BUG解决

    dede留言板刷新后空白BUG解决 DEDE留言板验证码留空或者不正确返回空白页面的解决方法 解决方法如下进入文件/plus/guestbook.php 找到代码ShowMsg("验证码不正 ...

  5. 在TFS中通过程序动态创建Bug并感知Bug解决状态

    为便于跟踪问题解决情况,预警引擎产生的比较严重的预警日志,需要在TFS中登记Bug,通过TFS的状态流转,利用TFS Bug的Web挂钩功能,动态感知Bug解决状态,从而跟踪预警问题的解决状态, 整体 ...

  6. IDEA插件(Android Studio插件)开发示例代码及bug解决

    IDEA插件(Android Studio插件)开发示例代码及bug解决 代码在actionPerformed方法中,有个AnActionEvent e 插件开发就是要求我们复写上述的这个方法即可,在 ...

  7. ProxyStrike运行bug解决办法

     ProxyStrike运行bug解决办法 由于curl中参数CURLOPT_SSL_VERIFYHOST的值取消原有的值1,导致ProxyStrike无法正常运行.所以,要运行该工具,需要手动修改/ ...

  8. Kali Linux 2017中Scapy运行bug解决

    Kali Linux 2017中Scapy运行bug解决   Scapy是一款强大的网络数据包构建工具.在Kali Linux 2017中,当在scapy的命令行中,运行res.graph()生成图形 ...

  9. indy9在程序关闭时出现terminate thread timeout的BUG解决办法

    indy9在程序关闭时出现terminate thread timeout的BUG解决办法 INDY9线程有BUG,在退出程序的时候会报错:terminate thread timeout(终止线程超 ...

随机推荐

  1. Linux基础命令回顾

    前言 说到linux基础命令,网上一搜一箩筐,想学也有很多教程,如果你不幸看到此篇文章,想看就认真看完,毕竟你点进来了不是嘛? 我每次写的文章都是为了分享自己的学习成果或重要知识点,希望能帮助更多的人 ...

  2. SQlServer中的MD5加密

    SELECT sys.fn_varbintohexstr(HASHBYTES('MD5', '我'));

  3. Rim 边缘光

    边缘光:计算眼睛和模型顶点法线的点积,结果作为强度,和材质输出:顶点和法线平行时,强度最大,垂直时,强度最小.因此将他取反,即同一方向时,强度最小,垂直时,强度最大. -dot(normalize(v ...

  4. 【springmvc】传值的几种方式&&postman接口测试

    最近在用postman测试postman接口,对于springmvc传值这一块,测试了几种常用方式,总结一下.对于postman这个工具的使用也增加了了解.postman测试很棒,有了工具,测试接口, ...

  5. 特种部队(codevs 1427)

    题目描述 Description 某特种部队接到一个任务,需要潜入一个仓库.该部队士兵分为两路,第一路士兵已经在正面牵制住了敌人,第二路士兵正在悄悄地从后方秘密潜入敌人的仓库.当他们到达仓库时候,发现 ...

  6. 【BZOJ4474】isomorphism(树的同构,哈希)

    题意:一个无向树的度数为 2的结点称为假结点,其它结点称为真结点.一个无向树的简化树其结点由原树的全体真结点组成,两个真结点之间有边当且仅当它们在原树中有边,或者在原树中有一条联结这两个结点的路,其中 ...

  7. cdq分治入门--BZOJ1492: [NOI2007]货币兑换Cash

    n<=100000天,一开始有s块钱,每天股票A价格ai,B价格bi,每天可以做的事情:卖出股票:按A:B=RTi的比例买入股票.问最后的最大收益.股票可以为浮点数,答案保留三位. 用脚指头想想 ...

  8. 2.4 选择第k大的元素 selection

    1.目标:找到N个元素中,第k大的数. 例如:max是k=N--1:min是k=0:median是k=N/2 2.Quick-select 借鉴了快速排序的思想 (1)利用partition保证: ① ...

  9. echarts模拟highcharts实现折线图的虚实转换

    多的不说直接上代码: <html><html lang="en"><head> <meta charset="utf-8&quo ...

  10. 程序猿是如何解决SQLServer占CPU100%的--马非码

    http://www.cnblogs.com/marvin/p/ASolutionForSQLServerCauseHighCPU.html