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. auto_ptr 实现

    #ifndef MYAUTOPTR_H #define MYAUTOPTR_H template<typename _T> class MyAutoPtr { private: _T* _ ...

  2. Unity Water Shader

    上图是一个物体浸入水中的效果 原理 我们使用相机渲染的整个场景的深度图减去需要忽略的模型的深度,这里忽略的是图中蓝色部分,就保留了其他的深度值. 用到Main Camera渲染的深度贴图: sampl ...

  3. STM32F407 跑马灯 寄存器版 个人笔记

    更多原理请参考跑马灯 库函数版 个人笔记 步骤 使能IO口时钟.配置相关寄存器寄存器RCC->AHB1ENR 初始化IO口模式.配置四个配置寄存器 GPIOx_MODER/ GPIOx_OTYP ...

  4. js在HTML中的三种写法

    1.内联样式 内联样式分为两种,一是直接写入元素的标签内部 <html> <title>js样式内联写法</title> <meta http-equiv=& ...

  5. Linux虚拟机安装学习笔记

    一.Linux系统的安装1.VMwaer虚拟机的安装使用 官方下载软件地址:www.vmwaer.com 安装的虚拟机可以与现实的计算机进行通信 安装虚拟主机可以随意定制硬件安装配置建议: CPU:1 ...

  6. 《C语言程序设计(第四版)》阅读心得(四 文件操作)

    第10章  对文件的输入输出 函数名 调用形式 功能 fopen fopen(“a1”,”r”); 打开一个文件 fclose fclose( fp ); 关闭数据文件 fgetc fgetc( fp ...

  7. docsearch & algolia

    docsearch & algolia The easiest way to add search to your documentation. https://community.algol ...

  8. DTRACE简介之完结篇3

    https://blogs.oracle.com/swan/entry/dtrace%E7%AE%80%E4%BB%8B_3 DTRACE简介之完结篇 By samwan on 四月 13, 2007 ...

  9. 【SQL Server 学习系列】-- 收缩数据库文件大小

    USE WebExam; GO ALTER DATABASE WebExam SET RECOVERY SIMPLE; GO -- 收缩文件到 1 MB. ); GO ALTER DATABASE W ...

  10. JAVA 流程控制之选择语句

    在程序设计时,有三种基本技术可以改变程序的流程控制: 调用方法: 选择: 循环. 在这里,我们主要来讲讲选择语句. JAVA中的选择语句与C语言中的基本相同,包括: if 语句: if/else 语句 ...