• 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
    		发现在三个节点上结果相同文件
    
  • 相关阅读:
    Java -- Map
    Bootstrap -- 标签属性
    SQLServer -- 竟然默认不区分大小写
    ThinkPHP -- 问题
    ThinkPHP
    MVC-内容详情页显示内容
    未能加载文件或程序集“Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed”或它的某一个依赖项。
    Random.Next获取随即数
    Razor语法小记
    VisualStudio自定义代码段_方法二
  • 原文地址:https://www.cnblogs.com/shenxm/p/8459256.html
Copyright © 2020-2023  润新知