MogileFS的实现和bug解决
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解决的更多相关文章
- 百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法
百度编辑器ueditor 异步加载时,初始化没办法赋值bug解决方法 金刚 前端 ueditor 初始化 因项目中使用了百度编辑器——ueditor.整体来说性能还不错. 发现问题 我在做一个编辑页面 ...
- paip.c3p0 nullpointexcept 配置文件根路径读取bug 解决
paip.c3p0 nullpointexcept 配置文件根路径读取bug 解决 windows ok linux犯错误... 查看loging, 初始化的时候儿jdbcurl,user,pwd都是 ...
- Android较低版本(<5.2) 页面默认Select选择框效果的BUG解决
Bug描述: 使用低版本安卓(<5.2),在微信上打开网页,点击下拉框,会出现如下图所示的用来展示select选项的弹出框: 在选项较少的时候,可以向下滑动,将选项滑到底部 滑动前: 滑动后: ...
- dede留言板BUG解决
dede留言板刷新后空白BUG解决 DEDE留言板验证码留空或者不正确返回空白页面的解决方法 解决方法如下进入文件/plus/guestbook.php 找到代码ShowMsg("验证码不正 ...
- 在TFS中通过程序动态创建Bug并感知Bug解决状态
为便于跟踪问题解决情况,预警引擎产生的比较严重的预警日志,需要在TFS中登记Bug,通过TFS的状态流转,利用TFS Bug的Web挂钩功能,动态感知Bug解决状态,从而跟踪预警问题的解决状态, 整体 ...
- IDEA插件(Android Studio插件)开发示例代码及bug解决
IDEA插件(Android Studio插件)开发示例代码及bug解决 代码在actionPerformed方法中,有个AnActionEvent e 插件开发就是要求我们复写上述的这个方法即可,在 ...
- ProxyStrike运行bug解决办法
ProxyStrike运行bug解决办法 由于curl中参数CURLOPT_SSL_VERIFYHOST的值取消原有的值1,导致ProxyStrike无法正常运行.所以,要运行该工具,需要手动修改/ ...
- Kali Linux 2017中Scapy运行bug解决
Kali Linux 2017中Scapy运行bug解决 Scapy是一款强大的网络数据包构建工具.在Kali Linux 2017中,当在scapy的命令行中,运行res.graph()生成图形 ...
- indy9在程序关闭时出现terminate thread timeout的BUG解决办法
indy9在程序关闭时出现terminate thread timeout的BUG解决办法 INDY9线程有BUG,在退出程序的时候会报错:terminate thread timeout(终止线程超 ...
随机推荐
- 单线制DS18B20温度传感器LED数码管显示当前的温度值
/******************************************* 程序功能:利用单线制DS18B20温度传感器 LED数码管显示当前的温度值 ***************** ...
- 杭电 2037 今年暑假不AC
Problem Description “今年暑假不AC?”“是的.”“那你干什么呢?”“看世界杯呀,笨蛋!”“@#$%^&*%...” 确实如此,世界杯来了,球迷的节日也来了,估计很多ACM ...
- vim 编辑器使用法则
vim 编辑器使用法则 Vi编辑器有3种使用模式:一般模式.编辑模式和命令模式. $SHELL:查看当前默认shell类型 $BASH_VERSION:查看当前shell版本 3.一般模式: 光标移 ...
- 关于.NET玩爬虫这些事 【初码干货】
这几天在微信群里又聊到.NET可以救中国但是案例太少不深的问题,我说.NET玩爬虫简直就是宇宙第一,于是大神朱永光说,你为何不来写一篇总结一下? 那么今天就全面的来总结一下,在.NET生态下,如何玩爬 ...
- [luoguP1045] 麦森数(快速幂 + 高精度)
传送门 这道题纯粹是考数学.编程复杂度不大(别看我写了一百多行其实有些是可以不必写的). 计算位数不必用高精时刻存,不然可想而知时间复杂度之大.首先大家要知道一个数学公式 logn(a*b)=logn ...
- 【HDOJ5713】K个联通块(状压DP,计数)
题意:有一张无重边的无向图, 求有多少个边集,使得删掉边集里的边后,图里恰好有K个连通块. 1≤T≤201≤K≤N≤140≤M≤N∗(N+1)/21≤a,b≤N 思路:From http://blog ...
- Linux下汇编语言学习笔记4 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
- 常见Unix指令
常用的UNIX指令: 1.文件和目录操作 ls –l 列出当前目录下的所有内容(文件\文件夹) pwd 显示出当前目录的名称 cd 改变当前操作的目录 who 显示当前用户名 clear ...
- mysql常用jar包
连接Mysql数据库: 常用的连接池有两种 DBCP连接池 C3P0连接池 Apache的commons组件 -- DBCP连接池: commons-dbutils-1.4.jar 封装并简化了JDB ...
- Ubuntu 16.04开机自动挂载硬盘分区(转)
说明:如果挂载以前旧硬盘分区时不需要第2.3步! 1.查看Linux硬盘信息: sudo fdisk -l 2.格式化新硬盘(很危险,注意操作时确定硬盘分区的位置): sudo mkfs.ext4 / ...